Привет Гуру! Железо: 1. ESP-32 на плате с кнопками и светодиодами ) 2. Телефон с Blynk Суть вопроса: Можно пройти по ссылке и посмотреть наглядно в ютубе: Код программы залитый в ESP-32 Код (C++): #define BLYNK_PRINT Serial #include <WiFi.h> #include <WiFiClient.h> #include <BlynkSimpleEsp32.h> char auth[] = "токен скрыт";//токен блинка char ssid[] = "скрыто";//SSID файфая char pass[] = "скрыто";//wifi пароль #define but 2 //пин кнопки #define relay 13 //пин реле unsigned long timing; int ButtonFlag; //флаг int button; //значение кнопки int buttonState; //значение кнопки блинка int del = 100; //задержка, необхожима для стабильной обработки нажатия кнопок void setup() { Serial.begin(9600); pinMode(but, INPUT); pinMode(relay, OUTPUT); Blynk.begin(auth, ssid, pass); delay(1000); } void loop() { if (millis() - timing > 1000){ Blynk.run();//запуск блинка } button = digitalRead(but);//считывание значений кнопки if( (ButtonFlag==0) && (button==1) ){ //если кнопка нажата, подымаем флаг ButtonFlag = 1; //подымаем флаг buttonState=1; //изменяем значение переменной кнопки блинка, т.к она еще не считывалась delay(del); //задержка Serial.println("1"); }else if( (ButtonFlag==1) && (button ==1) ){//если кнопка нажата 2 раз опускаем флаг ButtonFlag=0; //опускаем флаг buttonState=0; //изменяем значение переменной кнопки блинка, т.к она еще не считывалась delay(del); //задержка } if(ButtonFlag==1){//если флаг поднят,то включаем реле и включаем кнопку на юлинке digitalWrite(relay, HIGH);//включаем реле Blynk.virtualWrite(V1, HIGH); //включаем кнопку на блинке }else{//если опущен, то выключаем реле и кнопку на блинке digitalWrite(relay, LOW); //выключаем реле Blynk.virtualWrite(V1, LOW); //выключаем кнопку на блинке } if( (buttonState==0) && (ButtonFlag==1) ){//если выключается кнопка на блинке, то опускаем флаг ButtonFlag=0; //опускаем флаг } if( buttonState == 1 ){//если нажата кнопка на блинке, то подымаем флаг ButtonFlag=1;//подымаем флаг } } BLYNK_WRITE(V1) {//считывание значения кнопки блинка buttonState = param.asInt(); } Прошу помочь!
Попробуйте отправлять данные на блинк только тогда, когда кнопка отжата. Код (C++): if((ButtonFlag==1) && (digitalread(кнопка)==0)){//если флаг поднят,то включаем реле и включаем кнопку на юлинке digitalWrite(relay, HIGH);//включаем реле Blynk.virtualWrite(V1, HIGH); //включаем кнопку на блинке }else{//если опущен, то выключаем реле и кнопку на блинке digitalWrite(relay, LOW); //выключаем реле Blynk.virtualWrite(V1, LOW); //выключаем кнопку на блинке }
Данил, привет! Внедри этот участок кода в основной код! ( исходный код дан в первом моём сообщении ). Пожалуйста!
Проверить не на чем. Думаю, этот вопрос можно и вам решить, иначе так и будете просить и разбираться.
Надо совет - Словам и кодом. Исходный код выше в первом сообщении. Задача изначально нажать на кнопку, включается светодиод на другом пине. По факту, как только мы нажимаем чуть дольше ( чем 1 цикл ), светодиод начинает просто моргать. Так как каждый следующий цикл изменяет состояние кнопки на противоположное ( при нажатой кнопке дольше 1 цикла ).
Надо, изменить код программы, чтобы при удержании кнопки, светодиод не моргал, грубо говоря в цикл встроить while(button=0){ delay(del); чтобы прога как бы ждала, отпуска кнопки, и потом цикл шёл далее. +7-775-935-55-55 Whatsap Меня Ден, можно платно, можно бесплатно. Сижу тут собираю платку, железом обвязываю. А программа ещё лагает. В видео более подробно, явно видно проблемку