본문 바로가기

Industry 4.0/Internet of Things

아두이노를 위한 C언어

728x90
반응형

아두이노 프로그램의 기본 구조는 2개의 몸통으로 구분됩니다. 첫번째
몸통은 실제 일을 하기 전 준비운동을 하는 단계입니다. setup() 이라고
하는 이름이 붙어있습니다. 두번째 몸통은 실제 일을 하는 단계입니다.
loop() 라는 이름을 붙여두었습니다.

여기 보면 setup() 과 loop()의 앞에 void 라는게 붙어 있습니다. 자세한 설명은
함수를 다룰 때 설명하겠습니다. 우선은 *무조건* 위의 모습을 기억해두세요.
[준비운동]과 [실제할 일]은 나눠집니다.

void setup() {
  //  중괄호 안에 변수 선언, pinMode등 한번만 실행 되는 코드를 넣는다.

void loop() {
  // 반복적으로 실행되는 메인 코드를 넣는다. 
  // 반복 실행문이 없으면 괄호안을 빈 공란으로 남겨두어야 한다.


a. setup()
setup() 함수는 아두이노가 시작되는 처음단계에서 한번만 실행됩니다. 다음처럼
어떤 핀을 출력으로 사용한다면 먼저 그 핀을 출력으로 쓴다고 알려주는 역할로
사용됩니다.

여기서 절대 손대지 말아야 할 곳이 바로 첫째 줄과 둘째 줄, 그리고 맨 마지막 줄
입니다. 첫째 줄은 setup() 함수를 시작한다는 뜻이고, 둘째 줄의 { 기호는 여기서부터
시작이라는 뜻입니다. 마지막 줄에 있는 } 를 만날 때까지 모든 것이 setup() 의 내용이
됩니다.
pinMode(13, OUTPUT);
pinMode() 함수는 아두이노의 핀을 입력으로 사용할 것인지 출력으로 사용할
것인지 선택하게 해줍니다. OUTPUT 은 출력으로 쓰겠다는 뜻입니다. 이제부터
아두이노의 13번 핀은 전류를 흘려서 바깥으로 내보낼 수 있습니다. 이 전류로
꼬마전구(LED)를 켜서 전기가 흐르는지, 흐르지 않는지를 볼 수 있습니다. 참고로
pinMode() 를 통해서 13번 핀을 출력으로 선택했다는 것이 13번 핀에 전류가 흐른다는
뜻은 아닙니다. 출력으로 잡혔고, 그 출력은 5V가 될 수도 있고, 0V 가 될 수도 있습니다.
항상 명령의 끝은 ; 로 마무리합니다. 즉, “;” 를 만나기 전까지는 프로그램은 아직
끝이 나지 않았다고 판단합니다. 처음 C언어 프로그램을 하는 사람들의 잦은 실수는 ;
를 제대로 사용하지 않는 것입니다.
setup() 은 처음부터 끝까지 한번만 실행하고 끝이 납니다.




b. loop()
준비운동으로 13번 핀을 출력으로 만들었습니다. 그러면 13번 핀에 전기가 흐르게
합시다. 13번 핀에 꼬마전구(LED)를 달고 전기를 흐르게 해서 불이 들어오게 합시다.
이것은 loop() 에서 하면 됩니다.


위에서 setup()을 통해 13번 핀을 출력으로 쓰겠다고 정했으니 loop() 에서는 그
13번 핀을 사용해서 전기를 흐르게 하든지 혹은 흐르지 않게 하든지 하면 됩니다.
아두이노의 13번 핀에 꼬마전구(LED)의 한쪽 발을 연결하고, 다른 한쪽 발은 0V에
연결합니다. 전기는 물과 같아서 높은 곳에서 낮은 곳으로 흐릅니다. 13번 핀에서
전기가 나와서 LED의 한쪽 발로 흘러들어가고, 그 전기가 다른 쪽 발로 나온 다음 0V
인 GND 로 흘러들어갑니다. 마치 산에 있는 물이 아래로 아래로 흘러 바다로
들어가듯이 전기는 이리저리 흘러 결국은 GND 로 흘러들어갑니다.
꼬마전구의 한쪽 발이 5V 에 연결되어있고, 다른 한쪽 발이 0V에 연결되어 있다면 5V에서 0V로 전기가 흐릅니다. 참고로 LED 라는 꼬마전구는 반도체입니다. LED 라는
반도체는 한쪽 방향으로는 전기가 흐르는 도체가 되지만 다른 반대 방향으로는 부도체가
됩니다.


다음 그림과 같이 잘 연결하세요. 반대로 연결하면 전기가 흐르지 않습니다.
전기가 흐르지 않으면 빛도 나지 않겠지요.

참고로 저항을 하나 연결해주면 더 좋습니다. 아두이노에서 나오는 전류가 약해서
LED 가 손상되지는 않습니다만, 아두이노에 직접 연결하는 경우가 아니라면 LED 에
너무 많은 전류가 흐르게 되면 LED 가 고장이 날 수 있습니다. 200 ohm 에서 500
ohm 사이의 저항을 하나 연결해 주면 좋습니다. 13번 핀과 LED 사이에 연결하거나
혹은 GND 와 LED 사이에 연결하거나 상관없습니다.




digitalWrite() 함수는 ()안에 2개의 내용이 들어갑니다. 이걸 프로그래머들은
인자를 받는다고 표현합니다만, 굳이 어렵게 말할 필요는 없으니 앞으로 가능한 쉽게
풀어서 설명하겠습니다. digitalWrite() 안에 들어가는 2개의 내용은 첫째, 어떤
핀을 사용할까와 둘째 그 핀에 전기를 흐르게 할까 말까입니다.
13번 핀에 전기를 흐르게 하겠다(5V)면 13 과 HIGH 를 넣어주면 됩니다. 반대로
흐르지 않게 하겠다(OV)면 LOW 를 넣어주면 됩니다. HIGH 는 1 과 같고, LOW 는
0 과 같습니다. 일반적으로 전자회로를 다룰 때 1은 전기가 흐르는 것을 의미하고, 0은
전기가 흐르지 않는 것을 의미합니다.
loop() 는 처음부터 끝까지 실행한 다음 다시 처음으로 돌아갑니다. 이것을 끝없이
반복합니다. 아두이노에 전기가 공급되는 한 계속합니다.
그래서 위의 loop() 는 그냥 계속 13번에 연결된 LED 가 불이 켜진 채로 그대로
있습니다.




728x90
반응형

'Industry 4.0 > Internet of Things' 카테고리의 다른 글

iot cps 차이  (0) 2020.01.13
Arduino, Blink  (0) 2019.11.04