우리가 Arduino Nano가 달성해야 할 두 가지 작업이 있다고 상상해봅시다: LED를 깜박이는 것과 언제든지 눌릴 수 있는 버튼의 상태를 모니터링하는 것입니다. 만약 우리가 delay() 함수(이전 튜토리얼에서 논의된 아두이노 나노 - LED 참조)를 사용한다면, Arduino Nano는 일부 버튼 누름을 간과할 수 있습니다. 다시 말해, Arduino Nano는 두 번째 작업을 완전히 수행할 수 없습니다.
이 튜토리얼은 아두이노 나노가 LED를 깜박이게 하고 버튼의 상태를 누르는 이벤트가 누락되지 않고 감지하는 방법을 알려줍니다.
우리는 세 가지 예시를 살펴보고 그 차이를 비교할 것입니다:
delay() 함수를 사용하여 아두이노 나노로 LED를 깜박거리기
millis() 함수를 사용하여 아두이노 나노로 LED를 깜박거리기
ezLED 라이브러리를 사용하여 아두이노 나노로 LED를 깜박거리기
이 방법은 단순히 LED를 깜박이고 버튼의 상태를 확인하는 것에만 제한되지 않습니다. 일반적으로 서로 차단하지 않고 아두이노 나노가 동시에 여러 작업을 수행할 수 있게 해줍니다.
Arduino Nano와 기타 부품에 전원을 공급하는 가장 효과적인 방법은 다음 링크를 참조하세요: 아두이노 나노 전원 공급 방법.
아두이노 나노 코드 - 딜레이 포함
/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */constint LED_PIN = 5; // LED 핀의 번호constint BUTTON_PIN = 2; // 버튼 핀의 번호constlong BLINK_INTERVAL = 1000; // LED를 깜박일 간격 (밀리초)int led_state = LOW; // led_state는 LED 설정에 사용됨int prev_button_state = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장할 변수voidsetup() {Serial.begin(9600);// 디지털 핀을 출력으로 설정:pinMode(LED_PIN, OUTPUT);// 디지털 핀을 입력으로 설정:pinMode(BUTTON_PIN, INPUT);}voidloop() {// LED가 꺼져있다면 켜고, 그 반대의 경우도 마찬가지로 처리: led_state = (led_state == LOW) ? HIGH : LOW;// 변수의 led_state를 사용하여 LED 설정:digitalWrite(LED_PIN, led_state);delay(BLINK_INTERVAL); // 만약 이 시간 동안 버튼이 눌린다면, Arduino는 감지할 수 없음int button_state = digitalRead(BUTTON_PIN);if(button_state != prev_button_state) {// 버튼의 상태를 출력:Serial.println(button_state);// 버튼의 마지막 상태를 저장 prev_button_state = button_state; }// 여기에 다른 작업을 수행}
사용 방법
아두이노 나노를 USB 케이블을 사용하여 컴퓨터에 연결하세요.
아두이노 IDE를 실행하고, 올바른 보드와 포트를 선택하세요.
코드를 복사하여 아두이노 IDE에서 엽니다.
아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 컴파일하고 아두이노 나노에 코드를 업로드하세요.
시리얼 모니터를 열어주세요.
버튼을 네 번 눌러주세요.
LED를 확인하세요; 매 초마다 켜졌다가 꺼질 것입니다.
시리얼 모니터에서 출력을 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
1
0
Ln 11, Col 1
Arduino Nano on COM15
2
시리얼 모니터에서 일부 버튼 누름 시간이 등록되지 않았습니다. 이는 딜레이 시간 동안 아두이노 나노가 어떠한 동작도 수행할 수 없기 때문입니다. 결과적으로, 버튼 누름 이벤트를 감지할 수 없습니다.
아두이노 나노 코드 - 지연 없음
/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */constint LED_PIN = 5; // LED 핀의 번호constint BUTTON_PIN = 2; // 버튼 핀의 번호constlong BLINK_INTERVAL = 1000; // LED를 깜빡이는 간격(밀리초)int led_state = LOW; // led_state는 LED를 설정하는 데 사용됩니다int prev_button_state = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장할 것입니다unsignedlong prev_time_ms = 0; // LED가 마지막으로 업데이트된 시간을 저장할 것입니다voidsetup() {Serial.begin(9600);// 디지털 핀을 출력으로 설정하세요:pinMode(LED_PIN, OUTPUT);// 디지털 핀을 입력으로 설정하세요:pinMode(BUTTON_PIN, INPUT);}voidloop() {// LED를 깜빡일 시간인지 확인하세요; 즉, 현재 시간과 마지막으로 LED를 깜빡인 시간의 차이가// LED를 깜빡이고자 하는 간격보다 큰지 확인하세요.unsignedlong time_ms = millis();if (time_ms - prev_time_ms >= BLINK_INTERVAL) {// LED가 꺼져 있다면 켜고 그 반대도 마찬가지입니다: led_state = (led_state == LOW) ? HIGH : LOW;// 변수의 led_state로 LED를 설정하세요:digitalWrite(LED_PIN, led_state);// LED를 깜빡인 마지막 시간을 저장하세요 prev_time_ms = time_ms; }// 버튼 상태의 변경을 확인하세요int button_state = digitalRead(BUTTON_PIN);if(button_state != prev_button_state) {// 버튼의 상태를 출력하세요:Serial.println(button_state);// 버튼의 마지막 상태를 저장하세요 prev_button_state = button_state; }// 여기서 다른 작업을 하세요}
사용 방법
코드를 실행하고 버튼을 네 번 누르세요.
LED를 확인하세요; 1초 간격으로 켜기와 끄기 사이를 전환할 것입니다.
시리얼 모니터에서 출력을 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
1
0
1
0
1
0
1
0
Ln 11, Col 1
Arduino Nano on COM15
2
긴급한 사항의 모든 발생이 식별되었습니다.
코드 설명
소스 코드의 주석에 포함된 줄별 설명을 확인하세요!
더 많은 작업 추가하기
아래의 아두이노 나노 코드는 다음을 수행합니다:
두 개의 LED를 다른 간격으로 깜박입니다.
버튼의 상태를 확인합니다.
/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */constint LED_PIN_1 = 5; // LED 1 핀의 번호constint LED_PIN_2 = LED_BUILTIN; // LED 2 핀의 번호constint BUTTON_PIN = 2; // 버튼 핀의 번호constlong BLINK_INTERVAL_1 = 1000; // LED 1을 깜빡이는 간격 (밀리초)constlong BLINK_INTERVAL_2 = 500; // LED 2를 깜빡이는 간격 (밀리초)int led_state_1 = LOW; // LED 1을 설정하는 데 사용되는 led_stateint led_state_2 = LOW; // LED 2를 설정하는 데 사용되는 led_stateint prev_button_state = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장할 변수unsignedlong prev_time_ms_1 = 0; // 마지막으로 LED 1이 업데이트된 시간을 저장할 변수unsignedlong prev_time_ms_2 = 0; // 마지막으로 LED 2가 업데이트된 시간을 저장할 변수voidsetup() {Serial.begin(9600);// 디지털 핀을 출력으로 설정:pinMode(LED_PIN_1, OUTPUT);pinMode(LED_PIN_2, OUTPUT);// 디지털 핀을 입력으로 설정:pinMode(BUTTON_PIN, INPUT);}voidloop() {unsignedlong time_ms = millis();// LED 1을 깜빡일 시간인지 확인if (time_ms - prev_time_ms_1 >= BLINK_INTERVAL_1) {// LED가 꺼져 있으면 켜고 그 반대의 경우도 마찬가지: led_state_1 = (led_state_1 == LOW) ? HIGH : LOW;// 변수의 led_state로 LED를 설정:digitalWrite(LED_PIN_1, led_state_1);// LED를 깜빡인 마지막 시간을 저장 prev_time_ms_1 = time_ms; }// LED 2를 깜빡일 시간인지 확인if (time_ms - prev_time_ms_2 >= BLINK_INTERVAL_2) {// LED가 꺼져 있으면 켜고 그 반대의 경우도 마찬가지: led_state_2 = (led_state_2 == LOW) ? HIGH : LOW;// 변수의 led_state로 LED를 설정:digitalWrite(LED_PIN_2, led_state_2);// LED를 깜빡인 마지막 시간을 저장 prev_time_ms_2 = time_ms; }// 버튼 상태의 변화 확인int button_state = digitalRead(BUTTON_PIN);if(button_state != prev_button_state) {// 버튼의 상태를 출력:Serial.println(button_state);// 버튼의 마지막 상태를 저장 prev_button_state = button_state; }// 여기에 다른 작업을 수행}
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
확장성
이 방법은 한 작업이 다른 작업의 진행을 막지 않고, Arduino Nano가 여러 작업을 동시에 실행할 수 있게 사용될 수 있습니다. 예를 들어, 인터넷에 요청을 보내고 응답을 기다리는 동안 동시에 몇몇 LED 표시등을 깜빡이고 취소 버튼을 모니터링하는 것입니다.