아두이노 나노 - LED - 딜레이 없이 깜박임 | Arduino Nano - LED - Blink Without Delay

우리가 Arduino Nano가 달성해야 할 두 가지 작업이 있다고 상상해봅시다: LED를 깜박이는 것과 언제든지 눌릴 수 있는 버튼의 상태를 모니터링하는 것입니다. 만약 우리가 delay() 함수(이전 튜토리얼에서 논의된 아두이노 나노 참조)를 사용한다면, Arduino Nano는 일부 버튼 누름을 간과할 수 있습니다. 다시 말해, Arduino Nano는 두 번째 작업을 완전히 수행할 수 없습니다.

이 튜토리얼은 아두이노 나노가 LED를 깜박이게 하고 버튼의 상태를 누르는 이벤트가 누락되지 않고 감지하는 방법을 알려줍니다.

우리는 세 가지 예시를 살펴보고 그 차이를 비교할 것입니다:

이 방법은 단순히 LED를 깜박이고 버튼의 상태를 확인하는 것에만 제한되지 않습니다. 일반적으로 서로 차단하지 않고 아두이노 나노가 동시에 여러 작업을 수행할 수 있게 해줍니다.

준비물

1×Arduino Nano Amazon
1×USB A to Mini-B USB cable 쿠팡 | Amazon
1×LED Amazon
1×220 ohm resistor Amazon
1×Push Button 쿠팡 | Amazon
1×(Optional) Panel-mount Push Button Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Nano Amazon
1×(Recommended) Screw Terminal Expansion Board for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

LED와 버튼에 대하여

LED 및 버튼(핀 아웃, 기능성, 프로그래밍 포함)에 익숙하지 않다면, 다음 튜토리얼이 도움이 될 수 있습니다:

선연결

Arduino Nano LED wiring diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

아두이노 나노 코드 - 딜레이 포함

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */ const int LED_PIN = 5; // LED 핀의 번호 const int BUTTON_PIN = 2; // 버튼 핀의 번호 const long BLINK_INTERVAL = 1000; // LED를 깜박일 간격 (밀리초) int led_state = LOW; // led_state는 LED 설정에 사용됨 int prev_button_state = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장할 변수 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 설정: pinMode(LED_PIN, OUTPUT); // 디지털 핀을 입력으로 설정: pinMode(BUTTON_PIN, INPUT); } void loop() { // 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 버튼을 클릭하여 코드를 컴파일하고 아두이노 나노에 코드를 업로드하세요.
How to upload code to Arduino Nano
  • 시리얼 모니터를 열어주세요.
  • 버튼을 네 번 눌러주세요.
  • LED를 확인하세요; 매 초마다 켜졌다가 꺼질 것입니다.
  • 시리얼 모니터에서 출력을 확인하세요.
COM6
Send
1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

시리얼 모니터에서 일부 버튼 누름 시간이 등록되지 않았습니다. 이는 딜레이 시간 동안 아두이노 나노가 어떠한 동작도 수행할 수 없기 때문입니다. 결과적으로, 버튼 누름 이벤트를 감지할 수 없습니다.

아두이노 나노 코드 - 지연 없음

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */ const int LED_PIN = 5; // LED 핀의 번호 const int BUTTON_PIN = 2; // 버튼 핀의 번호 const long BLINK_INTERVAL = 1000; // LED를 깜빡이는 간격(밀리초) int led_state = LOW; // led_state는 LED를 설정하는 데 사용됩니다 int prev_button_state = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장할 것입니다 unsigned long prev_time_ms = 0; // LED가 마지막으로 업데이트된 시간을 저장할 것입니다 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 설정하세요: pinMode(LED_PIN, OUTPUT); // 디지털 핀을 입력으로 설정하세요: pinMode(BUTTON_PIN, INPUT); } void loop() { // LED를 깜빡일 시간인지 확인하세요; 즉, 현재 시간과 마지막으로 LED를 깜빡인 시간의 차이가 // LED를 깜빡이고자 하는 간격보다 큰지 확인하세요. unsigned long 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초 간격으로 켜기와 끄기 사이를 전환할 것입니다.
  • 시리얼 모니터에서 출력을 확인하세요.
COM6
Send
1 0 1 0 1 0 1 0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

긴급한 사항의 모든 발생이 식별되었습니다.

코드 설명

소스 코드의 주석에 포함된 줄별 설명을 확인하세요!

더 많은 작업 추가하기

아래의 아두이노 나노 코드는 다음을 수행합니다:

  • 두 개의 LED를 다른 간격으로 깜박입니다.
  • 버튼의 상태를 확인합니다.
/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-led-blink-without-delay */ const int LED_PIN_1 = 5; // LED 1 핀의 번호 const int LED_PIN_2 = LED_BUILTIN; // LED 2 핀의 번호 const int BUTTON_PIN = 2; // 버튼 핀의 번호 const long BLINK_INTERVAL_1 = 1000; // LED 1을 깜빡이는 간격 (밀리초) const long BLINK_INTERVAL_2 = 500; // LED 2를 깜빡이는 간격 (밀리초) int led_state_1 = LOW; // LED 1을 설정하는 데 사용되는 led_state int led_state_2 = LOW; // LED 2를 설정하는 데 사용되는 led_state int prev_button_state = LOW; // 마지막으로 버튼이 업데이트된 시간을 저장할 변수 unsigned long prev_time_ms_1 = 0; // 마지막으로 LED 1이 업데이트된 시간을 저장할 변수 unsigned long prev_time_ms_2 = 0; // 마지막으로 LED 2가 업데이트된 시간을 저장할 변수 void setup() { Serial.begin(9600); // 디지털 핀을 출력으로 설정: pinMode(LED_PIN_1, OUTPUT); pinMode(LED_PIN_2, OUTPUT); // 디지털 핀을 입력으로 설정: pinMode(BUTTON_PIN, INPUT); } void loop() { unsigned long 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 표시등을 깜빡이고 취소 버튼을 모니터링하는 것입니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!