• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ESP32 i użycie kilku wejść dotykowych
#1
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ę.
 
Odpowiedź
#2
Na Elektrodzie pomogli https://www.elektroda.pl/rtvforum/topic3532788.html
 
Odpowiedź
#3
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
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości