// Переменные для каждого света в каждом светофоре. int eLightG = 2; int eLightY = 3; int eLightR = 4; int nLightG = 5; int nLightY = 6; int nLightR = 7; int sLightG = 8; int sLightY = 9; int sLightR = 10; int wLightG = 11; int wLightY = 12; int wLightR = 13; // Сброс света на LOW. void lightsOff() { for (int i = 0; i <= 13; i++) { digitalWrite(i, LOW); } } void setup() { // Устанавливает все светофоры на выходы. pinMode(nLightG, OUTPUT); pinMode(nLightY, OUTPUT); pinMode(nLightR, OUTPUT); pinMode(sLightG, OUTPUT); pinMode(sLightY, OUTPUT); pinMode(sLightR, OUTPUT); pinMode(eLightG, OUTPUT); pinMode(eLightY, OUTPUT); pinMode(eLightR, OUTPUT); pinMode(wLightG, OUTPUT); pinMode(wLightY, OUTPUT); pinMode(wLightR, OUTPUT); lightsOff(); // Запускает последовательный монитор на 9600 Serial.begin(9600); } // lightOn - это функция, которая включает определенные источники света в зависимости от заданного светофора (символа) и цвета (String) в нижнем регистре. void lightOn(char tLight, String color) { // Северный светофор if (tLight == 'n') { if (color == "red") { digitalWrite(nLightR, HIGH); } else if (color == "yellow") { digitalWrite(nLightY, HIGH); } else if (color == "green") { digitalWrite(nLightG, HIGH); } } // Южный светофор if (tLight == 's') { if (color == "red") { digitalWrite(sLightR, HIGH); } else if (color == "yellow") { digitalWrite(sLightY, HIGH); } else if (color == "green") { digitalWrite(sLightG, HIGH); } } // Восточный светофор if (tLight == 'e') { if (color == "red") { digitalWrite(eLightR, HIGH); } else if (color == "yellow") { digitalWrite(eLightY, HIGH); } else if (color == "green") { digitalWrite(eLightG, HIGH); } } // Западный светофор if (tLight == 'w') { if (color == "red") { digitalWrite(wLightR, HIGH); } else if (color == "yellow") { digitalWrite(wLightY, HIGH); } else if (color == "green") { digitalWrite(wLightG, HIGH); } } } // lightOff - это функция, которая отключает определенные огни в зависимости от заданного светофора (символа) и цвета (String) в нижнем регистре. void lightOff(char tLight, String color) { // Северный светофор if (tLight == 'n') { if (color == "red") { digitalWrite(nLightR, LOW); } else if (color == "yellow") { digitalWrite(nLightY, LOW); } else if (color == "green") { digitalWrite(nLightG, LOW); } } // Южный светофор if (tLight == 's') { if (color == "red") { digitalWrite(sLightR, LOW); } else if (color == "yellow") { digitalWrite(sLightY, LOW); } else if (color == "green") { digitalWrite(sLightG, LOW); } } // Восточный светофор if (tLight == 'e') { if (color == "red") { digitalWrite(eLightR, LOW); } else if (color == "yellow") { digitalWrite(eLightY, LOW); } else if (color == "green") { digitalWrite(eLightG, LOW); } } // Западный светофор if (tLight == 'w') { if (color == "red") { digitalWrite(wLightR, LOW); } else if (color == "yellow") { digitalWrite(wLightY, LOW); } else if (color == "green") { digitalWrite(wLightG, LOW); } } } // sleep - это функция, которая берет время в секундах и запускает в функции задержки, чтобы сделать функцию задержки более интуитивно понятной. void sleep(int sec){ delay(sec * 1000); } void loop() { // Удалите часть этого примера, если планируете научить студентов программированию // Печатает, какие огни меняются. Время быстрое. Serial.println("Светофоры N и S меняются!"); lightOff('n', "red"); lightOff('s', "red"); lightOn('n', "green"); lightOn('s', "green"); sleep(2); lightOff('n', "green"); lightOff('s', "green"); lightOn('n', "yellow"); lightOn('s', "yellow"); sleep(3); lightOff('n', "yellow"); lightOff('s', "yellow"); lightOn('n', "red"); lightOn('s', "red"); sleep(5); Serial.println("Светофоры E и W меняются!"); lightOff('e', "red"); lightOff('w', "red"); lightOn('e', "green"); lightOn('w', "green"); sleep(2); lightOff('e', "green"); lightOff('w', "green"); lightOn('e', "yellow"); lightOn('w', "yellow"); sleep(3); lightOff('e', "yellow"); lightOff('w', "yellow"); lightOn('e', "red"); lightOn('w', "red"); sleep(5); }