지금 우리는 곧 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으로 보내면 자세히 코칭해 드립니다. 틀리는 것이 정상이니 틀렸다고 절대로 스트레스를 받지 맙시다)

 

용어설명

 

-----------------------------

  • 내용 중 DIY 따라 하기가 잘 안 되거나 질문이 있다면 crebizias@naver.com 로 질문하세요.
  • 강좌를 위한 설문을 하고 있습니다. 설문(https://goo.gl/3S23du)에 참여하시면 기사에 수록하지 못한 자료와 연습문제, 오프라인 강좌정보를 보내 드리도록 하겠습니다.
  • 대전 오프라인 강좌는 서구문화원에 디트뉴스24의 코딩교육과 4차산업혁명과 연계해서 “사물인터넷과 DIY 예제로 배우는 문학코딩”을 개설하였습니다(http://www.sgcc.or.kr/index.php?mc=03&md=02)
저작권자 © 디트NEWS24 무단전재 및 재배포 금지