LED는 어떻게 깜박거리는 걸까?
지금까지 그냥 예제 띄워서 로딩하고, 실행해 봤다. 이유도 모르고.
회사에서 업무 끝나고 자료를 작성해서 올리고(요건 windows), 집에 와서는 mac으로 작업한다. windows에서 했다가 mac에서 했다가… 땜쟁이도 헷갈린다.
자 하나씩 설명한다.
pinMode()
아두이노 측면에는 많은 커넥터 구멍이 있다. 여기에는 많은 핀들이 연결되어 있다. 입력을 받을 수도, 출력을 내보낼 수도 있다. 요 핀들의 기능을 정의하는 함수이다.
함수는 다음과 같이 사용한다.
pinMode(pin,mode);
여기서 pin은 지정된 핀 번호이다. 예를 들어 13번 핀을 사용하려면 13을 주면 된다.
mode : 요건 지정된 핀을 입력으로 할 지, 출력으로 할 지 정하는 부분이다. INPUT,OUTPUT,INPUT_PULLUP 이렇게 3가지 모드가 있다. INPUT으로 하면 입력, OUTPUT으로 하면 출력, INPUT_PULLUP으로 하면 입력이지만 풀업 input모드가 있다. pullup,pulldown에 대한 개념은 추후에 설명하기로 한다. 이것까지 여기서 설명하면 머리털 다 빠진다.
위의 예제를 보면, LED_BUILTIN을 핀 번호로 정하고, 모드를 출력으로 했다.
LED_BUILTIN은 arduino 내부의 지정된 파일 (궁금하면 찾아봐라. variant.h라는 헤더파일 안에 정의되어 있다. 초보자들은 일단 무시해도 된다. #define LED_BUILTIN 13
그래서 blink 예제를 실행하면 13번 LED가 깜박거리게 되는 것이다.
큰 줄기의 설명을 빼먹었다.
void setup()
{}
초기값을 정의하는 부분이다. 여기서 정의는 초기값은 처음 실행될 때, 한번만 수행이 된다.
void loop()
{}
실제 수행되는 부분이다. 일반적인 C언어에서 main에 해당되는 부분이나, 약간 다르다. C언어에서 main부분은 무한루프를 지정해 주지 않으면 한번만 수행이 되나, loop는 무한루프로 계속 수행된다. (요부분도 초보자는 좀 어렵다. 그냥 loop부분에 프로그램을 넣으면 계속 실행된다고 우선 생각하자)
자, 다시 돌아가서,
digitalWrite(LED_BUILTIN,HIGH);
delay(1000);
digitalWrite(LED_BUILTIN,LOW);
delay(1000);
LED-BUILTIN은 13번핀으로 정의되어 있다고 했다. 13번 핀을 HIGH(5V)로 올린다. 실제 현장에서 사용하는 오실로스코프로 측정해보면 정말로 5V로 올라간다. (오실로스코프는 사실 일반인이나 초보자가 가지기에는 어려운 장비인데, 자연스럽게 말해 버렸다….)
delay(1000); 요건 1000ms이다. 즉, 1초 시간 지연함수 이다. 1초동안 아무것도 안하고 머물러 있는 구조이다.
digitalWrite(LED_BUILTIN,LOW);
자 여기서는 high로 올렸던 13번 핀을 LOW(0V)로 떨어뜨렸다.
delay(1000); 다시 1초동안 시간지연, 즉 그대로 멈춰라~!
다시 위에서부터 반복
즉, 1초마다 꺼졌다 켜졌다를 반복한다. 신기하지 않은가? (나만 그런가?) 공업고등학교 2,3학년 아이들에게 이런거 가르쳐보면 좋아하는 친구들은 참 좋아하지만, 전혀 흥미가 없는 친구들은 정말로 그 표정은…(정말로 가르쳐보면 절망적이다…)
있다가 새벽에 20세이하 월드컵 축구한다고 한다. 1시간 정도 남은 거 같은데, 좀 더 버티다가 보고 잘까나?
(웬지 그대로 잘 것 같은 느낌이다…)