Здравствуйте. В моём проекте используется цифровой датчик вибрации совместно с сигнальной лампой 220В, которая подключена через реле. Необходимо чтобы лампа горела 3 секунды после появления сигнала о вибрации. Дело в том, что датчик очень быстро переходит в обратное состояние и лампа включившаяся на долю секунды опять не горит. Как датчик остановить на эти 3 секунды? Наведите на решение, пожалуйста.
Код (C++): bool vibration = false; //переменная для хранения наличия вибрации unsigned long now; //Переменная для хранения времени void loop { if (digitalRead(SW - 420)) { vibration=true; now=millis(); } if(millis()-now >=3000) { vibration=false; } digitalWrite(Relay_pin, vibration); } Или вы имели ввиду не опрашивать датчик в течение этих трех секунд? В таком случае вам нужно просто в условие включения реле поставить трехсекундный делей. Разница между первым и вторым вариантами в том, что в первом вы все еще можете выполнять какой-либо код, пока идут эти три секунды. В случае с делеем такой возможности у вас не будет.
Спасибо. Ваш код помог мне разобраться с флагами. У датчика ещё инвертированный сигнал, пришлось кое-что изменить. Ещё раз спасибо!
Код (C++): bool vibration = false; // флаг есть вибрация или нет unsigned long now; // время когда появилась вибрация #define WINDOW 50 // окно #define VIB_PIN 6 // датчик вибрации void setup () { pinMode(WINDOW, OUTPUT); pinMode(VIB_PIN, INPUT); } void loop () { if(digitalRead(VIB_PIN) == LOW && vibration == 0) { vibration = true; digitalWrite(WINDOW, LOW); now = millis(); } if(digitalRead(VIB_PIN) == HIGH && vibration == 1) { vibration = false; } if(millis() - now >= 3000) { digitalWrite(WINDOW, HIGH); } }