[아두이노] [강좌] 5. Blink 예제 해부하기(4) - digitalWrite()와 delay()

드디어 loop() 함수의 내용을 살펴볼 시간이 되었다강좌 4개만에ㅜㅜ

 

 

앞 강좌의 pinMode() 함수 설명에서 “OUTPUT” 모드에 대한 설명을 했으니 이번 강좌도 짧게 끝내고 넘어갈 수 있을 것 같다설명 강박증이 도지지 않는 이상.


과연.brown_and_cony-79 





지난 강좌에서 “OUTPUT” 모드는 아두이노 핀의 디지털’ 기능 중 출력’ 기능을 사용하는 모드라고 설명했었다그리고 출력’ 기능이란 핀으로 전기를 흘려 보낼지 흘려 보내지 않을지를 결정하여 ‘0(LOW)’ 또는 ‘1(HIGH)’를 만드는 기능이라고도 설명했었고.

 

오늘 설명할 ‘digitalWrite()’ 함수가 바로 출력’ 모드에서 ‘0’을 보낼 것이냐, ‘1’을 보낼 것이냐를 결정하는 함수이다자세히 살펴보자.

 

 


void digitalWrite(pin, value)

 

 

매개 변수는 정해진 키워드가 들어가야 하기 때문에 타입을 표시하지 않았다.



  

 매개 변수

 

 pin : 신호를 출력할 아두이노 보드의 핀 번호

 

 value : ‘HIGH’ 또는 ‘LOW’




pin 값은 pinMode() 함수와 같이 아두이노 보드에 표시된 번호 중 하나를 사용하면 된다아두이노에서 사용할 수 있는 모든 번호를 사용할 수 있다.


value 값에는 위 설명처럼 ‘HIGH’ 또는 ‘LOW’라는 키워드 중 하나가 들어가야 한다이 전 강좌를 열심히 정독한 사람이라면아니 사실은 누구나 눈치 챘겠지만 ‘LOW’를 넣으면 ‘0’의 값이, ‘HIGH’를 넣으면 ‘1’의 값이 출력된다.

 

기억하고 있지요? ‘1’의 신호는 기본 출력 전압인 5V 또는 3.3V의 전압을 내보내는 것. ‘0’의 신호는 0V의 전압을 만드는 것.

 

 

HIGH

 

주구장창 설명해온 ‘1’의 신호를 아두이노에서는 ‘HIGH’라는 키워드로 사용하고 있다.

 

 

LOW

 

역시 계속 설명한 ‘0’의 신호를 아두이노에서는 ‘LOW’라는 키워드로 사용하고 있다.

 


 

digitalWrite() 함수의 기능은 이게 다다'HIGH' 또는 'LOW' 신호를 출력하는 것. 너무 쉽죠?

 



혹시 digitalWrite() 함수가 어디에 쓰이는가, ‘HIGH’ 또는 ‘LOW’의 신호를 내보내는 것이 무슨 기능을 하는 것인가,가 궁금한 사람이 있다면 Blink 예제를 살펴보면서 설명하자.

 

 

  

 void loop() {

 digitalWrite(13, HIGH);

 delay(1000);

 digitalWrite(13, LOW);

 delay(1000);

 }




? delay() 함수 설명을 빼먹었네;;


delay() 함수는 함수명 그대로 아두이노 보드의 동작을 지연시키는 역할을 한다. ‘잠깐 멈춤’ 기능이랄까?

 

 

void delay(unsigned long ms)

 

 

 

 매개 변수

 

 

 ms : 동작을 지연시킬 시간을 밀리초 단위로 설정한다타입은 unsigned long 타입이므로 음수가 들어갈 수는 없다.




, Blink 예제에서처럼 “delay(1000);”이라고 사용하면 1(=1000밀리초)동안 아무 동작도 하지 않은 채 대기하는 상태를 유지하다가 1초가 지나면 다음 동작을 수행한다.

 


 

다시 Blink 예제로 돌아와서.

 


  

 void setup() {

   pinMode(13, OUTPUT);

 }

 

 void loop() {

 digitalWrite(13, HIGH);

 delay(1000);

 digitalWrite(13, LOW);

 delay(1000);

 }




 

스케치 버전이 1.0.5 이전 버전인 사람들은 pinMode() 함수나 digitalWrite() 함수에 사용된 핀 번호가 ‘led’라는 변수로 사용되었을 것이다. ‘led’라는 변수에는 ‘13’이라는 값이 저장되어 있으므로 위 예제와 동작은 동일하다.

 

 

setup() 함수에서 13번 핀의 모드를 출력’ 모드로 설정하였다.

 

그리고 loop() 함수첫 번째 줄에서 “digitalWrite(13, HIGH);” 구문으로 13번 핀에 ‘HIGH’ 신호를 내보낸다. 13번 핀에 ‘HIGH’ 신호를 출력하는 것은 ‘L’ 램프(오랜만에 나오는 ‘L’ 램프)를 켜는 동작을 한다.

 

아두이노 보드에 장착된 ‘L’ 램프는 실제로 아두이노의 13번 핀에 연결되어 있고, 13번 핀에 ‘HIGH’ 신호를 줘서 전기를 흘려 보내면 그 전기가 ‘L’ 램프로 흘러 램프가 켜지게 되는 것초등학교 때 실습했던 꼬마 전구와 같이.

 


그리고 delay() 함수를 사용해 1(=1000밀리초간 대기한다, 1초 간 ‘HIGH’ 신호를 유지한다는 뜻.

 

1초가 지나면 다음 구문인 “digitalWrite(13, LOW);” 구문을 실행하게 되고, 13번 핀에 ‘LOW’ 신호를 내보낸다. 'LOW' 신호는 전기를 흘려 보내지 않으므로 ‘L’ 램프는 꺼지게 된다역시 delay() 함수로 1초간 이 상태를 유지한다.

 

loop() 함수는 아두이노 보드에 전원이 들어와 있는 한 계속해서 반복되므로, 1초간 ‘L’ 램프가 켜지고 다시 1초간 ‘L’ 램프가 꺼지는 동작을 무한히 반복하게 된다.

 

 

digitalWrite() 함수로 ‘HIGH’ 또는 ‘LOW’ 신호를 출력해서 할 수 있는 기능은 단지 ‘L’ 램프를 켜고 끄는 것만이 당연히’ 아니다


어떤 센서에는 ‘HIGH’ 또는 ‘LOW’ 신호가 센서를 동작해라동작하지 마라,라는 신호가 될 수도 있고또 어떤 센서에게는 'HIGH’ 신호가 유지되는 시간에 따라 동작이 달라질 수도 있을 것이다. 또 'HIGH',N'LOW' 신호를 여러 개 연속해서 보내는 것으로 좀더 다양한 값을 표시할 수도 있을 것이다.


 


아두이노의 모든 동작이 ‘0’과 ‘1’로 만들어진다고 말한 것이 과장이 아닌 만큼 digitalWrite() 함수를 이용해서 신호만 잘 출력해도 아두이노의 반은 할 수 있다고 보면 됨!

 

그럼 우린 오늘 아두이노의 반을 끝냈다고 생각하자구요어차피 시작이 반이니까ㅋㅋ

 

 

이번 시간은 여기서 끝! 드디어 Blink 예제가 끝났..ㅜㅜ 

 

 



참고 : ‘입력’ 모드에서의 ‘digitalWrite()’

 

끝난줄brown_and_cony-77

 


digitalWrite() 함수를 사용할 때 pinMode() 함수로 출력’ 기능을 설정하지 않고 사용하면 어떻게 될까?

 

사실 아두이노 보드의 모든 핀에 대한 기본 모드는 입력’ 기능이다, pinMode() 함수로 ‘OUTPUT’ 모드를 설정하지 않으면 자동으로 ‘INPUT’ 모드가 설정된다는 뜻입력 모드에서의 digitalWrite() 함수는 출력 모드에서의 기능과 전혀 다른 기능을 수행한다.

 

입력 모드에서 digitalWrite() 함수의 기능은 내부 풀업 저항을 켜고(HIGH), 끄는(LOW) 역할. 13번 핀을 ‘INPUT’으로 설정하고(pinMode(13, INPUT)), ‘HIGH’를 출력하면(digitalWrite(13, HIGH)) 13번 핀을 내부 풀업을 사용하는 입력 모드로 변환한다. ‘INPUT_PULLUP’ 모드를 설정한 것(pinMode(13, INPUT_PULLUP))과 동일한 효과인 것다시 ‘LOW’를 출력하면(digitalWrite(13, LOW)내부 풀업 저항을 사용하지 않도록 해서 원래의 INPUT 설정으로 되돌아 온다.

 

내부 풀업 저항에 대해서는 스위치 예제에서 다시 자세히 설명하도록 하고지금은 입력 신호의 기본 값을 HIGH로 만드는 것이라는 정도만 알고 넘어가자.

 

아무튼, digitalWrite() 함수는 입력 모드에서와 출력 모드에서의 기능이 다르다는 것을 꼭 명심하고출력 기능으로 사용할 때는 반드시pinMode() 함수로 ‘OUTPUT’ 모드를 설정해주도록 하자.

 

 

오늘 강좌는 여기서 진짜 끝~! 바바이brown_and_cony-80

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
118 아두이노 ESP32 Analog Inputs (ADC) +4 icon 양재동메이커 02-12 15,986
117 아두이노 TIP : Serial의 Port가 Open 시점 확인 icon 양재동메이커 01-21 12,875
116 아두이노 ESP32 Boot Mode icon 양재동메이커 12-28 12,669
115 아두이노 아두이노 에러 리스트(Arduino Error list) icon 양재동메이커 11-24 17,606
114 아두이노 ESP32 main.cpp +1 icon 양재동메이커 11-19 13,040
113 아두이노 ESP32 EEPROM 와 IR Remote icon 양재동메이커 08-06 12,939
112 아두이노 Learn ESP32 icon 양재동메이커 06-25 12,510
111 라즈베리 파이 라즈베리 파이 (Raspberry Pi) 기초 icon 양재동메이커 06-19 13,954
110 라즈베리 파이 (동영상 강의) 라즈베리 파이 강좌 Link icon 양재동메이커 06-17 13,110
109 STM32 / MBED [MED] Switch debouncing icon HellMaker 12-30 15,053
108 기타 [타이젠] 아두이노의 16x2 LCD Display라이브러리 LiquidCrystal_I2C의 타이젠 포팅 icon 양재동메이커 09-15 14,658
107 기타 [타이젠] GPIO의 디지탈 출력과 입력 인터럽트의 C++ Class 제작 icon 양재동메이커 09-12 14,132
106 마이크로비트 서보 모터 icon HellMaker 09-03 13,970
105 마이크로비트 아날로그 온도센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 14,475
104 마이크로비트 터치센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 13,571
103 마이크로비트 디지털 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 12,747
102 마이크로비트 리니어 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 12,275
101 마이크로비트 불꽃 감지 센서 (마이크로 비트 센서 활용) icon HellMaker 08-26 12,632
100 마이크로비트 로터리 엔코더 (마이크로 비트 센서 활용) icon HellMaker 08-25 12,768
99 마이크로비트 2컬러 LED(3mm) (센서 활용) icon HellMaker 08-22 12,746