В данном примере вместо вентиляции используется диод, а вместо датчика движения кнопка и время 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); // Ждем секунду
}
Хорошо бы поверить в боевых условиях, а не на диодах