digitalWrite(PIN_RED, HIGH); // 빨강 켜기digitalWrite(PIN_YELLOW, LOW); //digitalWrite(PIN_GREEN, LOW);delay(RED_TIME); // 일정 시간 동안 빨간 LED 켜져 있음
아두이노 나노 ESP32 코드
/* * 이 아두이노 나노 esp32 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 esp32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-traffic-light */#define PIN_RED D3 // Arduino Nano ESP32 핀이 교통 신호등 모듈의 R 핀에 연결됩니다#define PIN_YELLOW D4 // Arduino Nano ESP32 핀이 교통 신호등 모듈의 Y 핀에 연결됩니다#define PIN_GREEN D5 // Arduino Nano ESP32 핀이 교통 신호등 모듈의 G 핀에 연결됩니다#define RED_TIME 4000 // 밀리초 단위의 빨간색 시간#define YELLOW_TIME 4000 // 밀리초 단위의 노란색 시간#define GREEN_TIME 4000 // 밀리초 단위의 초록색 시간voidsetup() {pinMode(PIN_RED, OUTPUT);pinMode(PIN_YELLOW, OUTPUT);pinMode(PIN_GREEN, OUTPUT);}// 루프 함수는 무한히 반복됩니다voidloop() {// 빨간 불 켜기digitalWrite(PIN_RED, HIGH); // 켜기digitalWrite(PIN_YELLOW, LOW); // 끄기digitalWrite(PIN_GREEN, LOW); // 끄기delay(RED_TIME); // 일정 시간 동안 빨간 불을 켜둡니다// 노란 불 켜기digitalWrite(PIN_RED, LOW); // 끄기digitalWrite(PIN_YELLOW, HIGH); // 켜기digitalWrite(PIN_GREEN, LOW); // 끄기delay(YELLOW_TIME); // 일정 시간 동안 노란 불을 켜둡니다// 초록 불 켜기digitalWrite(PIN_RED, LOW); // 끄기digitalWrite(PIN_YELLOW, LOW); // 끄기digitalWrite(PIN_GREEN, HIGH); // 켜기delay(GREEN_TIME); // 일정 시간 동안 초록 불을 켜둡니다}
Arduino IDE의 Upload 버튼을 클릭하여 코드를 Arduino Nano ESP32에 업로드하세요
신호등 모듈을 확인하세요.
교통 신호등의 정확한 작동 방식은 다양한 지역과 교차로에서 사용되는 특정 설계와 기술에 따라 달라질 수 있음을 주목하는 것이 중요합니다. 위에 설명된 원리들은 교통 신호등이 교통을 관리하고 도로의 안전을 향상시키는 방법에 대한 일반적인 이해를 제공합니다.
위의 코드는 개별 조명 제어를 보여줍니다. 이제 코드를 더 잘 최적화하기 위해 개선해 봅시다.
아두이노 나노 ESP32 코드 최적화
조명 제어를 위한 함수를 구현하여 코드를 개선합시다.
/* * 이 아두이노 나노 esp32 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 esp32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-traffic-light */#define PIN_RED D3 // Arduino Nano ESP32핀이 교통 신호등 모듈의 R핀에 연결됨#define PIN_YELLOW D4 // Arduino Nano ESP32핀이 교통 신호등 모듈의 Y핀에 연결됨#define PIN_GREEN D5 // Arduino Nano ESP32핀이 교통 신호등 모듈의 G핀에 연결됨#define RED_TIME 2000 // 밀리초 단위의 빨간색 시간#define YELLOW_TIME 1000 // 밀리초 단위의 노란색 시간#define GREEN_TIME 2000 // 밀리초 단위의 초록색 시간#define RED 0 // 배열의 인덱스#define YELLOW 1 // 배열의 인덱스#define GREEN 2 // 배열의 인덱스constint pins[] = { PIN_RED, PIN_YELLOW, PIN_GREEN };constint times[] = { RED_TIME, YELLOW_TIME, GREEN_TIME };voidsetup() {pinMode(PIN_RED, OUTPUT);pinMode(PIN_YELLOW, OUTPUT);pinMode(PIN_GREEN, OUTPUT);}// loop 함수는 무한히 반복됨voidloop() {// 빨간 불 켜기 trafic_light_on(RED);delay(times[RED]); // 일정 시간 동안 빨간 불을 켜둠// 노란 불 켜기 trafic_light_on(YELLOW);delay(times[YELLOW]); // 일정 시간 동안 노란 불을 켜둠// 초록 불 켜기 trafic_light_on(GREEN);delay(times[GREEN]); // 일정 시간 동안 초록 불을 켜둠}void trafic_light_on(int light) {for (int i = RED; i <= GREEN; i++) {if (i == light)digitalWrite(pins[i], HIGH); // 켜기elsedigitalWrite(pins[i], LOW); // 끄기 }}
for 반복문을 사용하여 코드를 개선해봅시다.
/* * 이 아두이노 나노 esp32 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 esp32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-traffic-light */#define PIN_RED D3 // Arduino Nano ESP32 핀이 신호등 모듈의 R 핀에 연결됨#define PIN_YELLOW D4 // Arduino Nano ESP32 핀이 신호등 모듈의 Y 핀에 연결됨#define PIN_GREEN D5 // Arduino Nano ESP32 핀이 신호등 모듈의 G 핀에 연결됨#define RED_TIME 2000 // 밀리초 단위의 RED 시간#define YELLOW_TIME 1000 // 밀리초 단위의 YELLOW 시간#define GREEN_TIME 2000 // 밀리초 단위의 GREEN 시간#define RED 0 // 배열에서의 인덱스#define YELLOW 1 // 배열에서의 인덱스#define GREEN 2 // 배열에서의 인덱스constint pins[] = {PIN_RED, PIN_YELLOW, PIN_GREEN};constint times[] = {RED_TIME, YELLOW_TIME, GREEN_TIME};voidsetup() {pinMode(PIN_RED, OUTPUT);pinMode(PIN_YELLOW, OUTPUT);pinMode(PIN_GREEN, OUTPUT);}// loop 함수는 무한히 반복됩니다voidloop() {for (int light = RED; light <= GREEN; light ++) { trafic_light_on(light);delay(times[light]); // 일정 시간 동안 빛을 켜둠 }}void trafic_light_on(int light) {for (int i = RED; i <= GREEN; i ++) {if (i == light)digitalWrite(pins[i], HIGH); // 켜기elsedigitalWrite(pins[i], LOW); // 끄기 }}
delay() 대신 millis() 함수를 사용하여 코드를 개선해 봅시다.
/* * 이 아두이노 나노 esp32 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 esp32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-traffic-light */#define PIN_RED D3 // Arduino Nano ESP32 핀이 교통 신호등 모듈의 R 핀에 연결됨#define PIN_YELLOW D4 // Arduino Nano ESP32 핀이 교통 신호등 모듈의 Y 핀에 연결됨#define PIN_GREEN D5 // Arduino Nano ESP32 핀이 교통 신호등 모듈의 G 핀에 연결됨#define RED_TIME 2000 // 밀리초 단위의 빨간색 시간#define YELLOW_TIME 1000 // 밀리초 단위의 노란색 시간#define GREEN_TIME 2000 // 밀리초 단위의 초록색 시간#define RED 0 // 배열에서의 인덱스#define YELLOW 1 // 배열에서의 인덱스#define GREEN 2 // 배열에서의 인덱스constint pins[] = { PIN_RED, PIN_YELLOW, PIN_GREEN };constint times[] = { RED_TIME, YELLOW_TIME, GREEN_TIME };unsignedlong last_time = 0;int light = RED; // 빨간색 불로 시작voidsetup() {pinMode(PIN_RED, OUTPUT);pinMode(PIN_YELLOW, OUTPUT);pinMode(PIN_GREEN, OUTPUT); trafic_light_on(light); last_time = millis();}// loop 함수는 무한히 반복됨voidloop() {if ((millis() - last_time) > times[light]) { light++;if (light >= 3) light = RED; // 새로운 순환 trafic_light_on(light); last_time = millis(); }// 할일: 여러분의 다른 코드}void trafic_light_on(int light) {for (int i = RED; i <= GREEN; i++) {if (i == light)digitalWrite(pins[i], HIGH); // 켜기elsedigitalWrite(pins[i], LOW); // 끄기 }}
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.