Подскажите пожалуйста, у меня такая проблема: мне нужно что бы если на арудино (допустим на D8) придёт сигнал HIGH, выполнилось определенное действие(допустим, что бы зажегся светодиод на 5 секунд), но что бы это действие выполнилось только 1 раз, до того момента, пока на порту D8 не поменяется сигнал на LOW. Спасибо
Как то так Код (C++): boolean flag = true; int ledPin = 3; //пин со светодиодом /*---- Вставить в основной цикл ----*/ if (digitalRead(8) && flag) { flag = !flag; digitalWrite (ledPin, HIGH); delay (5000); digitalWrite (ledPin, LOW); } if (!flag && !digitalRead(8)) { flag = !flag; } /*--------------------------------*/
Почему не сравнивается? В таком if, как ниже - даже два сравнения, а не одно Код (C++): if (digitalRead(8) && flag) { В некотором смысле оператор digitalRead - это оператор сравнения, если на пине HIGH - он возвращает истинное значение, если LOW - ложное. А еще там есть логическая переменная flag, которая может быть истинной или ложной. Знак && - это оператор логического "И" Обьединяя все вместе, получаем, что условие оператора if выполнится, если digitalRead(8) вернет HIGH и оператор flag == true
Код (C++): if (digitalRead(8) && flag) равноценно Код (C++): if (digitalRead(8) == true && flag == true)