Ciao a tutti, ho realizzato un sketch prendendo spunto su un tutorial semplice e ampliato da parte mia.
Ho un display touch screen, "UTFT myLCD(SSD1289,38,39,40,41);" ho realizzato due maschere con due pulsanti. maschera 1 pulsante 1 e maschera 2 pulsante 2.
Ora mi si crea questa situazione se premo il pulsate 1 su maschera 1 si sposta in maschera 2 però in maschera 2 mi rimane anche se non si vede il pulsante numero 1. Infatti se vado a cliccare in corrispondenza del pulsante 1 noto che mi ricarica la maschera 2. Come faccio ad azzerare la maschera 2 in modo che mi toglie il pulsante fantasma 1 ? Chi mi sa spiegare la funzione "waitForIt"
#include <UTFT.h>
#include <UTouch.h>
#include <dht11.h>
#define DHT11_PIN 10
dht11 DHT;
UTFT LCD(SSD1289,38,39,40,41);
UTouch TOUCH( 21, 20, 19, 18, 17);
extern uint8_t BigFont[];
extern uint8_t SmallFont[];
const int ledVerde=8;
const int ledRosso=9;
const int vcc=13;
int triggerPort = 6;
int echoPort = 7;
int r;
const int pinLux = 0;
int sensLux = 0;
void setup()
{
pinMode(triggerPort,OUTPUT);
pinMode(echoPort, INPUT);
Serial.begin(9600);
Serial.println(DHT11LIB_VERSION);
Serial.println();
Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
pinMode(vcc,OUTPUT);
digitalWrite(vcc,HIGH);
pinMode(ledRosso,OUTPUT);
pinMode(ledVerde,OUTPUT);
digitalWrite(ledRosso,LOW);
digitalWrite(ledVerde,LOW);
LCD.InitLCD(LANDSCAPE);
LCD.clrScr();
TOUCH.InitTouch(LANDSCAPE);
TOUCH.setPrecision(PREC_MEDIUM);
LCD.setFont(BigFont);
LCD.setBackColor (0,0,0);
LCD.setColor(255,255,155);
disegnaGraficaHomePage();
disegnaTasti();
//Cucina();
}
void waitForIt(int x1, int y1, int x2, int y2)
{
LCD.setColor(0, 168, 107);
LCD.drawRoundRect (x1, y1, x2, y2);
while (TOUCH.dataAvailable())
TOUCH.read();
LCD.setColor(0, 168, 107);
LCD.drawRoundRect (x1, y1, x2, y2);
}
void loop(){
int chk;
chk =DHT.read(DHT11_PIN);
int senLux = analogRead(pinLux);
{
//porta bassa l'uscita del trigger
digitalWrite( triggerPort, LOW );
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
long duration = pulseIn( echoPort, HIGH );
long r = 0.034 * duration / 2;
if(r <= 99 && r > 3){
LCD.setFont(BigFont);
LCD.print(String((int)r), 200, 60);
}
}
// DISPLAY DATA
LCD.setFont(BigFont);
LCD.print(String((int)senLux), 200, 120);
LCD.print(String((int)DHT.temperature), 200, 30);
LCD.print(String((int)DHT.humidity), 200, 90);
delay(500);
leggiTasti();
// TastiCucina();
}
//GRAFICA PAGINA INIZIALE
void disegnaGraficaHomePage()
{
LCD.print("VALORI ATTUALI", CENTER, 0);
LCD.print("Temperatura: ", 0, 30);
LCD.print("Distanza:", 0, 60);
LCD.print("Umidita': ", 0, 90);
LCD.print("Luminosita'",0,120);
LCD.print("C", 250, 30);
LCD.print("cm", 250, 60);
LCD.print("%", 250, 90);
LCD.print("db",250,120);
}
//METODO PER DISEGNARE I TASTI
void disegnaTasti()
{
//TASTO ON VERDE
//IMPOSTO IL COLORE DELLO SFONDO E IL COLORE DI SCRITTURA
LCD.setFont(SmallFont);
LCD.setBackColor(0,255,0);
LCD.setColor(0,255,0);
//DISEGNO E COLORO UN RETTANGOLO CON IL COLORE IMPOSTATO
//TASTO OFF VERDE
LCD.fillRoundRect (10,160,40,190);
LCD.setColor(0,0,0);
LCD.print("OFF",15,170);
LCD.setBackColor(0,0,0);
LCD.setColor(255,255,255);
//TASTO ON VERDE
LCD.setBackColor(0,255,0);
LCD.setColor(0,255,0);
LCD.fillRoundRect (10,200,40,230);
LCD.setColor(0,0,0);
LCD.print("ON",15,210);
LCD.setBackColor(0,0,0);
LCD.setColor(255,255,255);
//TASTO OFF ROSSO
LCD.setBackColor(255,0,0);
LCD.setColor(255,0,0);
LCD.fillRoundRect (50,160,80,190);
LCD.setColor(0,0,0);
LCD.print("OFF",55,170);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO ON ROSSO
LCD.setBackColor(255,0,0);
LCD.setColor(255,0,0);
LCD.fillRoundRect (50,200,80,230);
LCD.setColor(0,0,0);
LCD.print("ON",55,210);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
/*
//TASTO OFF BLU
LCD.setBackColor(0,127,255);
LCD.setColor(0,127,255);
LCD.fillRoundRect (90,160,120,190);
LCD.setColor(0,0,0);
LCD.print("OFF",95,170);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO ON BLU
LCD.setBackColor(0,127,255);
LCD.setColor(0,127,255);
LCD.fillRoundRect (90,200,120,230);
LCD.setColor(0,0,0);
LCD.print("ON",95,210);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO OFF GIALLO
LCD.setBackColor(255,255,0);
LCD.setColor(255,255,0);
LCD.fillRoundRect (130,160,160,190);
LCD.setColor(0,0,0);
LCD.print("OFF",135,170);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO ON GIALLO
LCD.setBackColor(255,255,0);
LCD.setColor(255,255,0);
LCD.fillRoundRect (130,200,160,230);
LCD.setColor(0,0,0);
LCD.print("ON",135,210);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO OFF GRIGIO
LCD.setBackColor(178,178,178);
LCD.setColor(178,178,178);
LCD.fillRoundRect (170,160,200,190);
LCD.setColor(0,0,0);
LCD.print("OFF",175,170);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO ON GRIGIO
LCD.setBackColor(178,178,178);
LCD.setColor(178,178,178);
LCD.fillRoundRect (170,200,200,230);
LCD.setColor(0,0,0);
LCD.print("ON",175,210);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO OFF CELESTE
LCD.setBackColor(0,204,204);
LCD.setColor(0,204,204);
LCD.fillRoundRect (210,160,240,190);
LCD.setColor(0,0,0);
LCD.print("OFF",215,170);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO ON CELESTE
LCD.setBackColor(0,204,204);
LCD.setColor(0,204,204);
LCD.fillRoundRect (210,200,240,230);
LCD.setColor(0,0,0);
LCD.print("ON",215,210);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO OFF ROSA
LCD.setBackColor(255,209,220);
LCD.setColor(255,209,220);
LCD.fillRoundRect (250,160,280,190);
LCD.setColor(0,0,0);
LCD.print("OFF",255,170);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
//TASTO ON ROSA
LCD.setBackColor(255,209,220);
LCD.setColor(255,209,220);
LCD.fillRoundRect (250,200,280,230);
LCD.setColor(0,0,0);
LCD.print("ON",255,210);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
*/
}
//METODO PER LEGGERE I TASTI PREMUTI
void leggiTasti()
{
if (TOUCH.dataAvailable())
{
TOUCH.read();
int x=TOUCH.getX();
int y=TOUCH.getY();
if((x>=10) && (x<=40))
{
if((y>=160) && (y<=190))
{
LED_verde(true);// led verde si accende
Cucina();
}
if((y>=200) && (y<=230))
{
LED_verde(false); // led verde si spegne
}
}
/* if((x>=50) && (x<=80))
{
if((y>=160) && (y<=190))
{
LED_rosso(true);
}
if((y>=200) && (y<=230))
{
LED_rosso(false);
}
}
}
*/
}
void LED_verde(boolean stato)
{
if(stato)
{
digitalWrite(ledVerde,HIGH);
}
else
{
digitalWrite(ledVerde,LOW);
}
}
void LED_rosso(boolean stato)
{
if(stato)
{
digitalWrite(ledRosso,HIGH);
}
else
{
digitalWrite(ledRosso,LOW);
}
}
void Cucina()
{
LCD.clrScr();
LCD.InitLCD();
LCD.setBackColor(255,209,220);
LCD.setColor(255,209,220);
LCD.fillRoundRect (250,210,280,230);
LCD.setColor(0,0,0);
LCD.print("ON",255,210);
LCD.setBackColor(0,0,0);
LCD.setColor(255,0,0);
if (TOUCH.dataAvailable())
{
TOUCH.read();
int x=TOUCH.getX();
int y=TOUCH.getY();
if((x>=250) && (x<=210))
{
if((y>=280) && (y<=230))
{
// LED_verde(true);// led verde si accende
waitForIt(250,210,280,230);
}
}
}
}