Код (C++): #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #define RELE D7 #define RELE_2 D8 #define BUTTON D1 #define BUTTON_2 D2 bool rele; bool rele_2; char auth[] = "cjT2ydgF-CMKEJdWyjNzQ2H75Bp0FEAX"; char ssid[] = "tanalad"; char pass[] = "50511145051114"; void setup() { Serial.begin(115200); Blynk.begin(auth, ssid, pass); pinMode(RELE, OUTPUT); pinMode(BUTTON, INPUT); pinMode(RELE_2, OUTPUT); pinMode(BUTTON_2, INPUT); } BLYNK_WRITE(V0) { rele = param.asInt(); digitalWrite(RELE, rele); } BLYNK_WRITE(V1) { rele_2 = param.asInt(); digitalWrite(RELE_2, rele_2); } void loop() { if(digitalRead(BUTTON)) { rele = !rele; digitalWrite(RELE, rele); Blynk.virtualWrite(V0, rele); delay (1000);} if(digitalRead(BUTTON_2)) { rele_2 = !rele_2; digitalWrite(RELE_2, rele_2); Blynk.virtualWrite(V1, rele_2); delay (1000); } Blynk.run(); } Добрый день, очень простой вопрос но ответа я нигде не нашел. А сам уже голову сломал. Как сделать чтобы при нажатии кнопки сохранялось положение и не мешало блинку
Код (C++): #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #define RELE D7 #define RELE_2 D8 #define BUTTON D1 #define BUTTON_2 D2 bool rele; bool rele_2; char auth[] = "cjT2ydgF-CMKEJdWyjNzQ2FEAX"; char ssid[] = "tanalad"; char pass[] = "50511145051114"; void setup() { Serial.begin(115200); Blynk.begin(auth, ssid, pass); pinMode(RELE, OUTPUT); pinMode(BUTTON, INPUT); pinMode(RELE_2, OUTPUT); pinMode(BUTTON_2, INPUT); } BLYNK_WRITE(V0) { rele = param.asInt(); digitalWrite(RELE, rele); } BLYNK_WRITE(V1) { rele_2 = param.asInt(); digitalWrite(RELE_2, rele_2); } void loop() { if(digitalRead(BUTTON)) { rele = !rele; digitalWrite(RELE, rele); Blynk.virtualWrite(V0, rele); delay (1000);} if(digitalRead(BUTTON_2)) { rele_2 = !rele_2; digitalWrite(RELE_2, rele_2); Blynk.virtualWrite(V1, rele_2); delay (1000); } Blynk.run(); }
Чтобы не срабатывать на зажатую кнопку — второй флаг. Если кнопка нажата и не изменяли состояние пина — изменить. Изменяли — ничего не делать, пока кнопку не отпустят. Отпустили кнопку — опустили флаг на срабатывание.
Я сейчас пробовал с флагами поработать, но не вышло, кнопка просто перестала работать, может есть какой-то годный пример?
Попробуйте loop() взять отсюда : Код (C++): void loop() { uint32_t cur_ms = millis(); static uint32_t b1_millis = 0; static uint32_t b2_millis = 0; static uint8_t but1_prev_state = 0; static uint8_t but2_prev_state = 0; if(digitalRead(BUTTON)) { if((but1_prev_state == 0 ) && (cur_ms - b1_millis >= 300)) { b1_millis=cur_ms; rele = !rele; digitalWrite(RELE, rele); Blynk.virtualWrite(V0, rele); } but1_prev_state = 1; } else if((but1_prev_state == 1 ) && (cur_ms - b1_millis >= 300)) { b1_millis=cur_ms; but1_prev_state = 0; } if(digitalRead(BUTTON_2)) { if((but2_prev_state == 0 ) && (cur_ms - b2_millis >= 300)) { b2_millis=cur_ms; rele_2 = !rele_2; digitalWrite(RELE_2, rele_2); Blynk.virtualWrite(V1, rele_2); } but2_prev_state = 1; } else if((but2_prev_state == 1 ) && (cur_ms - b2_millis >= 300)) { b2_millis=cur_ms; but2_prev_state = 0; } Blynk.run(); } Если я конечно задачу понял правильно из Вашего объяснения.
Ну суть вы правильно поняли, большое спасибо. Но ещё один момент... Когда кнопка выключила виртуальную и осталась нажатой надо чтобы выключеной она оставалось. Даже когда её отпустишь.
И опять не понимаю. У вас любые изменения состояния реле и виртуальной кнопки только по нажатию на кнопку. Кнопка без фиксации - нажал состояние изменилось на противоположное. По отпусканию мы меняем флаг состояния кнопки и ничего никуда не отправляем. И виртуальная кнопка будет отображать состояние реле.
Я пробовал подправить код, но у меня не получилось (пока ещё профан в этом) Я делаю автоматические ворота и у меня концевики отключают реле. Когда направляющая косается концевика, то он отключает реле и остаётся в зафиксированом положении.
Сейчас кнопка работает так: При коротком нажатии она отключает реле все как положено. Но при долгом нажатии она сразу отключает, но когда проходит небольшое время при отпускании кнопки она опять включает реле