ESP-32 , BLYNK, вопрос в YouTube

Тема в разделе "ESP8266, ESP32", создана пользователем Den Kiva, 8 ноя 2018.

  1. Den Kiva

    Den Kiva Нерд

    Привет Гуру!

    Железо:
    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();
    }

    Прошу помочь!
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Гуру таки на связи.
    А шо надо?
     
  3. Daniil

    Daniil Гуру

    Попробуйте отправлять данные на блинк только тогда, когда кнопка отжата.
    Код (C++):
    if((ButtonFlag==1) && (digitalread(кнопка)==0)){//если флаг поднят,то включаем реле и включаем кнопку на юлинке
        digitalWrite(relay, HIGH);//включаем реле
        Blynk.virtualWrite(V1, HIGH); //включаем кнопку на блинке
       }else{//если опущен, то выключаем реле и кнопку на блинке
        digitalWrite(relay, LOW); //выключаем реле
        Blynk.virtualWrite(V1, LOW); //выключаем кнопку на блинке
       }
     
  4. Den Kiva

    Den Kiva Нерд

    Данил, привет!
    Внедри этот участок кода в основной код!
    ( исходный код дан в первом моём сообщении ).

    Пожалуйста!
     
  5. Daniil

    Daniil Гуру

    Проверить не на чем.
    Думаю, этот вопрос можно и вам решить, иначе так и будете просить и разбираться.
     
  6. Den Kiva

    Den Kiva Нерд

    Надо совет - Словам и кодом.
    Исходный код выше в первом сообщении.
    Задача изначально нажать на кнопку, включается светодиод на другом пине.
    По факту, как только мы нажимаем чуть дольше ( чем 1 цикл ), светодиод начинает просто моргать.
    Так как каждый следующий цикл изменяет состояние кнопки на противоположное ( при нажатой кнопке дольше 1 цикла ).
     
  7. Den Kiva

    Den Kiva Нерд

    Надо, изменить код программы, чтобы при удержании кнопки, светодиод не моргал, грубо говоря в цикл встроить
    while(button=0){
    delay(del);
    чтобы прога как бы ждала, отпуска кнопки, и потом цикл шёл далее.
    +7-775-935-55-55 Whatsap Меня Ден, можно платно, можно бесплатно.
    Сижу тут собираю платку, железом обвязываю. А программа ещё лагает.

    В видео более подробно, явно видно проблемку