Код (C++): int FLAG= 0; void setup() { Serial.begin(9600); } void loop() { if(FLAG == 0) { digitalWrite(PIN_RELAY, HIGH); FLAG = 1; Serial.println("РЕЛЕ ВКЛЮЧИЛОСЬ"); } } При исполнении кода реле включается, флаг устанавливается - все ОК. Но как только loop начинает повтор - реле отключается, хотя флаг равен 1. Как решить? То есть, чтобы реле было включено. пока не поступит команда на выключение.
Код (C++): boolean New = 0; boolean oldNew = 0; int FLAG= 0; int PIN_RELAY = 12; void setup() { Serial.begin(9600); pinMode(PIN_RELAY, OUTPUT); } void loop() { if(FLAG == 0) { New = !New; FLAG =1; } if (New != oldNew) { digitalWrite(PIN_RELAY, HIGH); FLAG = 1; Serial.println("РЕЛЕ ВКЛЮЧИЛОСЬ"); oldNew = New; } }
Kamikadze, вот так было бы короче и надежнее Код (C++): int PIN_RELAY = 12; void setup() { Serial.begin(9600); pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); Serial.println("РЕЛЕ ВКЛЮЧИЛОСЬ"); } void loop() {}
Вы ничего не напутали? В приведенном коде реле включается и остается включенным, никакой "повтор loop()" ему не страшен. Вероятно, вы тестировали не на этом коде, а на немного другом. Приведмие его - и тогда можно будет обсудить ошибки.
Ага, не понятно, зачем Камикадзе такие сложности с кучей булевых переменных - у ТС в первом сообщении вполне рабочий код. Там только pinMode(PIN_RELAY, OUTPUT); в сетапе не хватает.
Очевидно, что это не полный код а его фрагмент (ибо буть это полный скетч ТС бы сказал не о том что реле щелкает, а о отм что компилятор ругается на не объявленную переменную) как и то, что при некотором условии реле должно включаться например: digitalRead(kakoitoPin) == HIGH Как очевидно и то, что есть условие которое отключает реле, при этом опрашивая было нажатие или нет (за что как раз и отвечает флаг), и собственно если это все например в цикле, и было нажатие то вырубить реле нужно назад по прошествию некоторого времени например, так вот если не будет проверочных булевых переменных при каждой итерации в цикле реле будет включаться и выключаться ибо одного условия не достаточно, или я больной и мне пора вместе с тс лечиться... но ответ на это дать может только ТС
Да, код неполный - полный больше 500 строк, так что я его не выкладывал. Ошибка была в том, что в коде были еще условия проверки и тип float сравнивался как 1.00 и 1.0 (показания температуры) Отсюда и неправильная работа. А код для того, чтобы в каждом цикле не подавалась команда на включение реле, вот и все)