Задача: после срабатывания датчика движения, нужно включить вентиляцию на 5 минут.

29.08.2018

В данном примере вместо вентиляции используется диод, а вместо датчика движения кнопка и время 20 секунд, а не 5 минут.

Еще нужно учесть, что кнопка возвращает цифровое значение, а датчик движения аналоговое, т.ч. часть:

 
    TriggerVal = digitalRead(pinTrigger);
    if (TriggerVal == HIGH) // Если есть движение 

нужно будет переделать.

 
int pinTrigger = 2;       // Номер пина датчика движения
int pinGo = 13;           // Номер пина вытяжки

int bWorking = 0;         // Вытяжка работает (да / нет)
int iMaxTime = 20000;     // 5 минут в секундах
int iCurrentTime = 0;     // Счетчик тиков (секунд) 

int TriggerVal = LOW;     // Данные с датчика движения

void setup() {
  Serial.begin(9600);
  pinMode(pinTrigger, INPUT);
  pinMode(pinGo, OUTPUT);
}

void loop() {
  
  if (bWorking == 1)
  {
    iCurrentTime = iCurrentTime + 1000; // + 1 тик
    if(iCurrentTime >= iMaxTime)
    {
      digitalWrite(pinGo, LOW); // Выключаем вытяжку
      bWorking = 0; //Отмечаем, что ее работа закончена
    }
  }
  else
  {
    TriggerVal = digitalRead(pinTrigger);
    Serial.println(TriggerVal);
    if (TriggerVal == HIGH) // Если есть движение 
    {
      iCurrentTime = 0; // Обнуляем счетчик 
      bWorking = 1; // Включаем отчет 
      digitalWrite(pinGo, HIGH); // Запускаем вытяжку 
    } 
  }
  
  delay(1000); // Ждем секунду
}

Хорошо бы поверить в боевых условиях, а не на диодах


Яндекс.Метрика