logo elektroda
logo elektroda
X
logo elektroda

ESP32 - random touch detection with 3 touch inputs

Bullseye 942 2
ADVERTISEMENT
Treść została przetłumaczona polish » english Zobacz oryginalną wersję tematu
  • #1 17647300
    Bullseye
    Level 27  
    Posts: 1454
    Help: 55
    Rate: 89
    Hey, I have a bit of a problem with the TOUCH inputs on the ESP32, namely it randomly detects touches on them, but only when I add 3 touches in the program. When it reads only one it doesn't have any problem. I am sending the program below.
    I will add that the detected values when triggered are above 70 where in the IF I declared that it should only react when it is below 40, maybe someone of you can advise what I messed up ??

    //TFT
    #include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
    #include <SPI.h>
    
    // SCK    - D18
    // SDA    - D23
    // A0     - D2
    // RESET  - D4
    // CS     - D15
    TFT_eSPI tft = TFT_eSPI();
    
    
    //DHT
    #include "DHTesp.h"
    DHTesp dht;
    
    
    // Blynk oraz WiFi
    #define BLYNK_PRINT Serial
    #include <WiFi.h>
    #include <WiFiClient.h>
    #include <BlynkSimpleEsp32.h>
    Skasowane dane dostepowe do Blynka !!
    
    //Zmienne
    byte StanPrzekaznik = 0;
    byte cisnienie;
    
    float Aktualny;
    byte Wilgotnosc;
    
    float INiza;
    float OUTiza;
    
    //Menu
    byte SETmenu;
    float SETtemp;
    float SEThist;
    
    
    // Timery
    BlynkTimer LCD;
    BlynkTimer INDHT;
    
    void INDHTupdate()
    {
      Aktualny = dht.getTemperature();
      Wilgotnosc = dht.getHumidity();
    }
    
    
    void LCDupdate()
    {
      //tft.drawString("Temperatura:", 0, 18, 2);
      //                            Lewa, od gory, cos
      tft.fillScreen(TFT_BLACK);
      
      // Stale
      tft.setTextColor(TFT_RED);  
      tft.setTextSize(2);  
      tft.drawString("Ustawienia Temperatury:", 0, 0, 1);
    
      tft.setTextSize(1);
      tft.setTextColor(TFT_GREEN);
      tft.drawString("Temperatura:", 0, 18, 2);
      tft.drawString("Wilgotnosc:", 0, 36, 2);
      
        if (StanPrzekaznik == 1){
        tft.setTextColor(TFT_ORANGE);
        tft.drawString("Grzanie", 84, 34, 2);
        }
        
        else if (StanPrzekaznik == 0){
        tft.setTextColor(TFT_CYAN);
        tft.drawString("Chlodzenie", 84, 34, 2);
        }
        
    
    }
    
    void setup()
    {
      Serial.begin(9600);
      Blynk.begin(auth, ssid, pass, DaneLogowania);
    
      //Timery
      LCD.setInterval(5000L, LCDupdate);
      INDHT.setInterval(1000L, INDHTupdate);
      
      tft.init();
      tft.setRotation(1);
      tft.fillScreen(TFT_BLACK);
      
      dht.setup(17, DHTesp::DHT11);
    
    }
    
    
    void loop()
    {
      Blynk.run();
      LCD.run();
      INDHT.run();
      
      if (touchRead(T5) < 1){
        Serial.println("Menu");
        delay(1000);
      }
      
      if (touchRead(T6) < 1){
        Serial.println("dodaj");
        delay(1000);
      }
      
      if (10 > touchRead(T4)){
        Serial.println("Odjemij");
        delay(1000);
      }
    }
    .
  • ADVERTISEMENT
  • #2 17648814
    kacpo1
    Level 33  
    Posts: 1698
    Help: 273
    Rate: 156
    On clean code without Blynk etc. same situation?
    Try throwing out delay() and replacing it with millis(), possibly setting an interrupt for the touch button touchAttachInterrupt(pin, function, value)
  • #3 17648987
    Bullseye
    Level 27  
    Posts: 1454
    Help: 55
    Rate: 89
    Delay only temporarily inserted for quick reference, no longer there :)

    The problem was solved by touchAttachInterrupt, everything works as expected ! :)
ADVERTISEMENT