
Katsed
Katse 1 — Aleksandr Nurk ÕPIMAPP/ portfoolio (nurkz.dev)
Описание
Данная программа работает как светофор для автомобилей и людей (включаяя ночные режимы — мигает желтым).
Автоматическое переключение между днем и ночью.
Использованые компоненты
5x 330 Ω резисторы
5x цветные LEDы (3 для машин, 2 для людей)
6x стандартные одиночные провода «папа-папа»
Код программы
const int RED_PIN = 9;
const int YELLOW_PIN = 10;
const int GREEN_PIN = 11;
const int GREEN_PIN_HUMAN = 6;
const int RED_PIN_HUMAN = 5;
int DISPLAY_TIME = 100; // värvimuutuse kiirus
bool night_time = false;
void setup()
{
pinMode(RED_PIN, OUTPUT);
pinMode(YELLOW_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(GREEN_PIN_HUMAN, OUTPUT);
pinMode(RED_PIN_HUMAN, OUTPUT);
}
void clean()
{
digitalWrite(RED_PIN, LOW);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(GREEN_PIN_HUMAN, LOW);
digitalWrite(RED_PIN_HUMAN, LOW);
}
void loop()
{
clean();
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(RED_PIN_HUMAN, HIGH);
//svetofor_test();
while (true) {
svetofor();
delay(10000);
}
}
void svetofor_test()
{
while (true) {
digitalWrite(RED_PIN, HIGH);
delay(1000);
digitalWrite(RED_PIN, LOW);
digitalWrite(YELLOW_PIN, HIGH);
delay(1000);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
delay(1000);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(GREEN_PIN_HUMAN, HIGH);
delay(1000);
digitalWrite(GREEN_PIN_HUMAN, LOW);
digitalWrite(RED_PIN_HUMAN, HIGH);
delay(1000);
digitalWrite(RED_PIN_HUMAN, LOW);
}
}
bool is_car_color_green()
{
return digitalRead(GREEN_PIN) == HIGH;
}
bool is_human_color_green()
{
return digitalRead(GREEN_PIN_HUMAN) == HIGH;
}
void change_color_car()
{
int pin = is_car_color_green() ? GREEN_PIN : RED_PIN;
for (int i = 0; i < 5; i++) {
digitalWrite(pin, digitalRead(pin) == HIGH ? LOW : HIGH);
delay(500);
}
digitalWrite(pin, LOW);
digitalWrite(YELLOW_PIN, HIGH);
delay(3000);
digitalWrite(YELLOW_PIN, LOW);
digitalWrite(pin == GREEN_PIN ? RED_PIN : GREEN_PIN, HIGH);
}
void change_color_human()
{
int pin = is_human_color_green() ? GREEN_PIN_HUMAN : RED_PIN_HUMAN;
digitalWrite(pin, LOW);
digitalWrite(pin == GREEN_PIN_HUMAN ? RED_PIN_HUMAN : GREEN_PIN_HUMAN, HIGH);
}
void night_lightning()
{
clean();
for (int i = 0; i < 20; i++) {
if (digitalRead(YELLOW_PIN) == HIGH)
digitalWrite(YELLOW_PIN, LOW);
else
digitalWrite(YELLOW_PIN, HIGH);
delay(1000);
}
}
void svetofor()
{
for (int i = 0; i < 3; ++i) {
if (night_time == true) {
night_lightning();
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(RED_PIN_HUMAN, HIGH);
break;
} else {
if (is_car_color_green()) {
change_color_car();
delay(1000);
change_color_human();
} else {
change_color_human();
delay(1000);
change_color_car();
}
}
delay(10000);
}
night_time = !night_time;
}
