#1 2023-05-31 13:09:47

Savik
Учасник
Зареєстрований: 2022-01-09
Повідомлень: 27

Потрібна допомога в написанні скетчу для HC-SR501

Задача:
При включенні ардуіно, 5 секунд блимає білий світодіод, після цього починає блимати жовтий на протязі 10 хв, але якщо у цей проміжок часу датчик побачить руху, відлік часу блиманя жовтого світодіода починається спочатку.
Якщо на протязі 10 хв датчик не тривожити, після того як час вийшов він перестає блимати. І після цього якщо спрацьовує датчик руху, загоряться червоний світодіод, а на один із пінів подається напруга.
savik2828@gmail.com

Неактивний

#2 2023-05-31 21:29:34

г0сть
Учасник
Зареєстрований: 2022-06-09
Повідомлень: 45

Re: Потрібна допомога в написанні скетчу для HC-SR501

#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)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму