Ви не увійшли.
Задача:
При включенні ардуіно, 5 секунд блимає білий світодіод, після цього починає блимати жовтий на протязі 10 хв, але якщо у цей проміжок часу датчик побачить руху, відлік часу блиманя жовтого світодіода починається спочатку.
Якщо на протязі 10 хв датчик не тривожити, після того як час вийшов він перестає блимати. І після цього якщо спрацьовує датчик руху, загоряться червоний світодіод, а на один із пінів подається напруга.
savik2828@gmail.com
Неактивний
#define wled 2
#define yled 3
#define rled 4
#define mov 5
#define out 6
unsigned long t1, t2, t3;
bool led1 = 1;
bool led2 = 1;
enum state
{
white,
yellow,
red
};
state current = white;
void setup() {
pinMode(wled, OUTPUT);
pinMode(yled, OUTPUT);
pinMode(rled, OUTPUT);
pinMode(out, OUTPUT);
pinMode(mov, INPUT);
digitalWrite(wled, LOW);
digitalWrite(yled, LOW);
digitalWrite(rled, LOW);
digitalWrite(out, LOW);
}
void loop() {
switch (current) {
case white:
if (millis() - t2 >= (led1 ? 300 : 300)) {
t2 = millis();
digitalWrite(wled, led1);
led1 = !led1;
}
if (millis() - t1 >= 5000) {
digitalWrite(wled, LOW);
t2 = millis();
current = yellow;
}
break;
case yellow:
if (millis() - t3 >= (led2 ? 300 : 300)) {
t3 = millis();
digitalWrite(yled, led2);
led2 = !led2;
}
if ( millis() - t2 >= 10 * 60000) {
digitalWrite(yled, LOW);
current = red;
}
if (digitalRead(mov)) t2 = millis();
break;
case red:
if (digitalRead(mov)) {
digitalWrite(rled, HIGH);
digitalWrite(out, HIGH);
break;
}
}
}
Остання редакція г0сть (2023-06-01 11:43:13)
Неактивний