지금 우리는 곧 LED를 제어할 수 있게 됨에 따라 실내에서 광합성을 하는 IoT산소나무 코딩에 도전 할 것이다. 1단계 IoT산소나무는 어두워지면 스스로 불을 켜서 광합성을 할 수 있는 IoT산소나무다. 산소나무가 실내에서 광합성을 하도록 어떤 것들이 필요한지 하나씩 담론해 나갈 것이다.
지난번 LED의 깜박거리는 속도를 조절해 보았다. 이번에는 프로그램 코드에 대해서 간단히 설명하기로 한다. 아래 그림을 보면 LED의 긴 다리를 13번 핀에 그리고 짧은 다리를 저항 330Ω과 연결된 GND(-)에 연결되어 있다.
그런데 찬찬히 살펴보자
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
- void setup()은 아두이노 스케치가 시작할 때 한번 작동되는 함수이다.
- 함수는 데이터형 함수명(매개변수) { 처리부분 }로 구성되어 있다.
- void는 반환 값(return 값)이 없는 절차함수라는 의미
- void setup(){ }은 반환 값이 없는 함수로 { } 안의 내용 pinMode(LED_BUILTIN, OUTPUT);를 최초에 한번 실행하라는 의미다.
- pinMode(LED_BUILTIN, OUTPUT);는 pinMode는 내장된 LED를 출력하라는 명령어다.
- 세미콜론”;”은 처리 부분이 끝났다는 의미다. 초기에 가장 범하기 쉬운 실수가 세미콜론을 생략하는 경우인데 이 세미콜론”;”없다면 아두이노나 nodeMCU는 처리할 부분이 남아있는 것으로 해석한다.
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
void loop() { }는 앞서 설명한대로 반환 값이 없는 절차함수(void)로 무한대로 반복하라는 함수이다. 따라서 digitalWrite(LED_BUILTIN, HIGH);를 실행한 다음 delay(1000);을 실행하고 다음 digitalWrite(LED_BUILTIN, LOW);을 실행 그 다음 delay(1000);을 실행한 후 다시 반복 실행한다.
- digitalWrite(LED_BUILTIN, HIGH); digitalWrite는 on과 off, 1과 0, 켜고 끄는 디지털 신호를 Wirte하라는 명령어로 내장된 LED를 HIGH 켜라는 의미다.
- delay(1000);은 1000ms(1초)동안 유지 시키라는 명령어다. 앞에서 LED를 켜라 했으니 1초간 켜있는 상태를 유지하라는 의미다.
- 그러면 digitalWrite(LED_BUILTIN, LOW);와 delay(1000);은 어떤 의미인가?
- “{“는 처리부분의 시작을, “}”는 처리부분이 끝났다는 의미이다
그런데 내장되지 않은 13 LED가 명령대로 수행되는 이유는 초기값이 13핀으로 되어 있기 때문에 13 LED가 명령대로 수행한다. 그러면 회로도 대로 LED_BUILTIN를 13핀LED로 바꿔보자
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
뭔가 달라졌다 void setup() 전에 int led = 13;이 선언되어 있다. 전처리기라 하는데 전처리기란 소스코드를 컴파일하기 전에 수행되는 처리를 말한다. 즉 본 소스코드에 나오는 조건부 추가 구문이나 실행 프로그램에 전처리기에 있는 코드를 불러와 본 소스코드에 삽입하여 사용한다.
“int led = 13;”는 정수형 데이터(int) 변수(함수명) led는 13핀이라 선언함으로 함수명 led는 모두 13핀의 led를 의미한다.
연습문제 1.
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
위 Blink 코드를 참고 해서 아래 회로도에 적합하게 코드를 작성해 보자. Blink 코드는 한 개의 LED가 있지만 아래 회로도는 3개의 LED가 있다. 어떻게 해야 할까?(세 개의 LED가 Blink처럼 깜박거리지 않는다면 작성한 코드를 crebizias@naver.com으로 보내면 자세히 코칭해 드립니다. 틀리는 것이 정상이니 틀렸다고 절대로 스트레스를 받지 맙시다)
용어설명
- 전처리기(preprocessor) http://cafe.naver.com/storytellingiot/214
- 컴파일(Compile) http://cafe.naver.com/storytellingiot/215
-----------------------------
- 내용 중 DIY 따라 하기가 잘 안 되거나 질문이 있다면 crebizias@naver.com 로 질문하세요.
- 강좌를 위한 설문을 하고 있습니다. 설문(https://goo.gl/3S23du)에 참여하시면 기사에 수록하지 못한 자료와 연습문제, 오프라인 강좌정보를 보내 드리도록 하겠습니다.
- 대전 오프라인 강좌는 서구문화원에 디트뉴스24의 코딩교육과 4차산업혁명과 연계해서 “사물인터넷과 DIY 예제로 배우는 문학코딩”을 개설하였습니다(http://www.sgcc.or.kr/index.php?mc=03&md=02)