Arduino Polska Forum

Pełna wersja: ESP32 i użycie kilku wejść dotykowych
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.

bullseye

Hej, mam pewien problem z wejściami TOUCH w ESP32, mianowicie losowo wykrywa mi na nich dotknięcia, ale tylko i wyłącznie gdy dodam 3 dotykowce w programie. Jak odczytuje tylko jeden to nie ma żadnego problemu. Podsyłam program poniżej. 

Dodam że wykryte wartości w momencie wyzwolenia są powyżej 70 (wysyłam je do Serial) gdzie w IFie zadeklarowałem że ma reagować tylko gdy jest poniżej 40, może ktoś z was poradzi co nagmatwałem ?? 


Kod:
//TFT
#include <TFT_eSPI.h> // TFT ST7735 sterownik
#include <SPI.h>
// SCK    - D18
// SDA    - D23
// A0     - D2
// RESET  - D4
// CS     - D15
TFT_eSPI tft = TFT_eSPI();


//czujnik 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) < 10){
Serial.println("Menu");
   Serial.println(touchRead(T5));
   delay(1000);
 }
 
 if (touchRead(T6) < 10){
Serial.println(touchRead(T6));
   Serial.println("dodaj");
   delay(1000);
 }
 
 if (10 > touchRead(T4)){
Serial.println(touchRead(T4));
   Serial.println("Odjemij");
   delay(1000);
 }
}
Gdy skasuje dwa ify, to pojedynczy działa OK, reaguje idealnie na dotyk, gdy dodam choć jeszcze jeden, to co chwila się aktywują oba losowo na zmianę.

bullseye

Dokładnie, roblem rozwiazal touchAttachInterrupt(pin, funkcja, wartość) wszystko już działa jak należy ! Smile

Oczywiście delay wywalony Smile
Choć może ktoś ma jakieś sugestie Smile