ciao a tutti, ho un arduino con scermo+touch, ho gia creato vari tasti e quando premo uno dei tasti mi cambia funzione, fino qui tutto bene, peroora vorrei implementare un realclock e la temperatura quindi vorrei riassumere
tre pulsanti in uno, quindi premo una volta faccio partire una funzione che dura pochi secondi se ripremo lo stesso pulsante mi parte seconda ecc
spero di essermi spiegato bene
guardando in rete sicuramente ci vuole un counter che ogni click su touch aumenta il numero e mostra la schermata appropriata
grazie a tutti
Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
//CONTROLLO VALVOLE STALLA
#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <TouchScreen.h>
// Pines necesarios para los 4 pines del panel tactil
#define YP A1 // Pin analogico A1 para ADC
#define XM A2 // Pin analogico A2 para ADC
#define YM 7
#define XP 6
// Definimos la presion máxima y minima que podemos realizar sobre el panel
#define MINPRESSURE 1
#define MAXPRESSURE 1000
// Para mejor precision de la presion realizada, es necesario
// medir la resistencia entre los pines X+ y X-.
// En Shield TFT 2.4" LCD se mide entre los pines A2 y 6
// Instancia del panel tactil (Pin XP, YP, XM, YM, Resistencia del panel)
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 364);
short TS_MINX = 150; // Coordenadas del panel tactil para delimitar
short TS_MINY = 120; // el tamaño de la zona donde podemos presionar
short TS_MAXX = 850; // y que coincida con el tamaño del LCD
short TS_MAXY = 891;
#define LCD_CS A3 // Definimos los pines del LCD
#define LCD_CD A2 // para poder visualizar elementos graficos
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000 // Definimos los colores
#define BLUE 0x001F // que utilizaremos para
#define RED 0xF800 // el texto y los elementos graficos
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Instancia LCD
int X; // Variables que almacenaran la coordenada
int Y; // X, Y donde presionemos y la variable Z
int Z; // almacenara la presion realizada
int a = 0; // variable "flag" para control rebotes
int b = 0;
int c = 0;
int d = 0;
int val = 0; //pin di input
int valb = 0;
#define V1 16
#define V2 17
#define V3 18
#define VAA 19 //alimentazione valvole
void setup(void)
{
tft.begin(0x9341);
pinMode(16, OUTPUT); //V1
pinMode(17, OUTPUT); //V2
pinMode(18, OUTPUT); //V3
pinMode(19, OUTPUT); //VAA
digitalWrite(V1, LOW);
digitalWrite(V2, HIGH);
digitalWrite(V3, HIGH);
digitalWrite(VAA, LOW);
tft.fillScreen(WHITE);
tft.setRotation(0);
tft.setCursor(20,10);
tft.setTextSize(1);
tft.setTextColor(RED);
tft.println("BY DANIELE PASSINI 22/10/18 V 1");
tft.drawRect(40, 20, 160, 60, RED); // BOTTONE1
tft.setCursor(60,35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
tft.drawRect(40, 100, 160, 60,RED); // bottone 2
tft.setCursor(60,115);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 CHIUSA");
tft.drawRect(40, 180, 160, 60,RED); // bottone 3
tft.setCursor(60,195);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 CHIUSA");
tft.drawRect(40, 260, 160, 60,RED); // bottone 3
tft.setCursor(60,275);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("PROGVALVOLE");
delay(3000);
digitalWrite(VAA, HIGH);
}
void loop()
{
lecturaPanel(); // lettura del pannello
// V1
if((X > 40 && X < 200) && (Y > 20 && Y <60) && (Z > MINPRESSURE && Z < MAXPRESSURE))
{
if (d == 0)
{
tft.fillScreen(WHITE);
tft.setRotation(0);
tft.setCursor(20,10);
tft.setTextSize(1);
tft.setTextColor(RED);
tft.println("BY DANIELE PASSINI 22/10/18 V 1");
tft.drawRect(40, 20, 160, 60, RED); // BOTTONE1
tft.setCursor(60,35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
tft.drawRect(40, 100, 160, 60,RED); // bottone 2
tft.setCursor(60,115);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 CHIUSA");
tft.drawRect(40, 180, 160, 60,RED); // bottone 3
tft.setCursor(60,195);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 CHIUSA");
tft.drawRect(40, 260, 160, 60,RED); // bottone 3
tft.setCursor(60,275);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("PROGVALVOLE");
delay(150);
digitalWrite(VAA, LOW);
delay(150);
digitalWrite(V1, LOW); //V1
delay(3000); //ASPETTO LA APERTURA
digitalWrite(V2, HIGH); //CHIUDO TUTTO
digitalWrite(V3, HIGH);
delay(3000); //ASPETTO CHIUSURA
digitalWrite(VAA, HIGH); //TOLGO ALIMENTAZIONE ALLE ELETTROVALVOLE
delay(7000);
digitalWrite(VAA, HIGH);
}
}
// V2
if((X > 40 && X < 200) && (Y > 100 && Y <150) && (Z > MINPRESSURE && Z < MAXPRESSURE))
{
if (d == 0)
{
tft.fillScreen(WHITE);
tft.setRotation(0);
tft.setCursor(20,10);
tft.setTextSize(1);
tft.setTextColor(RED);
tft.println("BY DANIELE PASSINI 22/10/18 V 1");
tft.drawRect(40, 20, 160, 60, RED); // BOTTONE1
tft.setCursor(60,35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 CHIUSA");
tft.drawRect(40, 100, 160, 60,RED); // bottone 2
tft.setCursor(60,115);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 APERTA");
tft.drawRect(40, 180, 160, 60,RED); // bottone 3
tft.setCursor(60,195);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 CHIUSA");
tft.drawRect(40, 260, 160, 60,RED); // bottone 3
tft.setCursor(60,275);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("PROGVALVOLE");
delay(150);
digitalWrite(VAA, LOW);
delay(150);
digitalWrite(V2, LOW);
delay(3000);
digitalWrite(V1, HIGH); //V1
digitalWrite(V3, HIGH);
delay(3000); //ASPETTO CHIUSURA
digitalWrite(VAA, HIGH); //TOLGO ALIMENTAZIONE ALLE ELETTROVALVOLE
delay(3000);
digitalWrite(VAA, HIGH);
}
}
//V3
if((X > 40 && X < 200) && (Y > 180 && Y <230) && (Z > MINPRESSURE && Z < MAXPRESSURE))
{
if (d == 0)
{
tft.fillScreen(WHITE);
tft.setRotation(0);
tft.setCursor(20,10);
tft.setTextSize(1);
tft.setTextColor(RED);
tft.println("BY DANIELE PASSINI 22/10/18 V 1");
tft.drawRect(40, 20, 160, 60, RED); // BOTTONE1
tft.setCursor(60,35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 CHIUSA");
tft.drawRect(40, 100, 160, 60,RED); // bottone 2
tft.setCursor(60,115);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 CHIUSA");
tft.drawRect(40, 180, 160, 60,RED); // bottone 3
tft.setCursor(60,195);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 APERTA");
tft.drawRect(40, 260, 160, 60,RED); // bottone 3
tft.setCursor(60,275);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("PROGVALVOLE");
delay(150);
digitalWrite(VAA, LOW);
delay(150);
digitalWrite(V3, LOW);
delay(3000); //tempo
digitalWrite(V1, HIGH);
digitalWrite(V2, HIGH);
delay(3000); //ASPETTO CHIUSURA
digitalWrite(VAA, HIGH); //TOLGO ALIMENTAZIONE ALLE ELETTROVALVOLE
delay(3000);
digitalWrite(VAA, HIGH);
}
}
}
void lecturaPanel()
{
digitalWrite(13, HIGH);
TSPoint p = ts.getPoint(); // Realizamos lectura de las coordenadas
digitalWrite(13, LOW);
pinMode(XM, OUTPUT); // La librería utiliza estos pines como entrada y salida
pinMode(YP, OUTPUT); // por lo que es necesario declararlos como salida justo
// despues de realizar una lectura de coordenadas.
// Mapeamos los valores analogicos leidos del panel tactil (0-1023)
// y los convertimos en valor correspondiente a la medida del LCD 320x240
X = map(p.x, TS_MAXX, TS_MINX, tft.width(), 0);
Y = map(p.y, TS_MAXY, TS_MINY, tft.height(), 0);
Z = p.z;
}
--- il codice si racchiude nei tag CODE non nei tag quote, grazie - gpb01
passo88:
... sicuramente ci vuole un counter che ogni click su touch aumenta il numero e mostra la schermata appropriata
... si, direi che ti occorre un contatore che incrementi di uno ad ogni touch del bottono, sino al suo limite massimo (poi io ripartirei automaticamente da 1).
Nel loop() confronti il valore precedente del contatore con il valore attuale .. se cambiato fai quello che devi fare. Ovvamente tutto quello che fai NON deve essere bloccante se vuoi poter continuare a premere il bottone anche metre stai facendo qualche cosa d'altro.
Guglielmo
innanzitutto grazie della risposta, ha visto il mio sketch che ne pensa? e`molto semplice, va bene che nel setup() metto la prima schermata del display che voglio?e poi nel loop() inserisco le "if"
che ne pensa?
per tornare al topic, ora cerco il codice preciso online, e poi dovrò mettere dopo la "if" della pressione del touch un altra "if" che controlla a quanto è il contatore in questo modo if (val==1)
ciao a tutti, sono arrivato a questa conclusione ma comunque mi mancano delle parti,
innanzi tutto assegno
int valb = 0; //ho messo b perche ho un altro val
nel loop()
non so se all fine per incrementare valb devo fare cosi
(valb =+1);
mentre alla fine per riportare il valore a zero?
(valb ==0);
grazie
passo88:
mentre alla fine per riportare il valore a zero?(valb ==0);
NO, quello è un operatore "logico" di uguaglianza ! L'assegnazione si fa con un solo '='.
Ti consiglio di andare nel reference e studiarti gli operatori "Aritmetici", quelli di "Comparazione" ed infine quelli "Booleani" (logici).
Guglielmo
grazie mille!sia per la guida che per l'aiuto
ho modificato il mio skech per cercare di avere tre funzioni su un unico punto dello schermo ma non funzione a dovere, mi sono letto le istruzioni per i comandi int e if ma cè qualcosa che mi manca mi aiutate per favore
nello skech che posto ho messo la in di pressione dello schermo sempre ripetuta ma sono in dubbio che non serva, perche ragiondoci quando io premo in base alla mia int "e" dovrbbe eseguire quella giusta
void loop() {
lecturaPanel(); // lettura del pannello
// V1
if((X > 40 && X < 200) && (Y > 20 && Y <60) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
if (e == 0) {
// BOTTONE1
tft.setCursor(60,35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
delay(200);
e ++; //aumento il vale di uno
}
}
}
if((X > 40 && X < 200) && (Y > 20 && Y <60) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
if (e == 1) {
tft.setCursor(60,35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 APERTA");
delay(200);
e ++;//aumento il vale di uno
}
}
}
if((X > 40 && X < 200) && (Y > 20 && Y <60) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
if (e == 2) {
tft.setCursor(60,35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 APERTA");
delay(200);
e = 0;
}
}
}
se posti il programma completo si capisce di più
se poi prima di postarlo dall'ide premi ctrl +t il programma viene messo a posto in automatico ... e diventa più leggibile
qui l'ho fatto io eliminando anche tutte le righe vuote
void loop() {
lecturaPanel(); // lettura del pannello
// V1
if ((X > 40 && X < 200) && (Y > 20 && Y < 60) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
if (e == 0) {
// BOTTONE1
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
delay(200);
e ++; //aumento il vale di uno
}
}
}
if ((X > 40 && X < 200) && (Y > 20 && Y < 60) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
if (e == 1) {
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 APERTA");
delay(200);
e ++;//aumento il vale di uno
}
}
}
if ((X > 40 && X < 200) && (Y > 20 && Y < 60) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
if (e == 2) {
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 APERTA");
delay(200);
e = 0;
}
}
}
facendo questo si nota in primis che manca la graffa di chiusure del loop
poi ci sono 3 if completi ed identici
l'unica cosa che cambia è i'if e=0, =1,=2
quindi si possono buttare via e fare tutto dentro al primo if
così
void loop() {
lecturaPanel(); // lettura del pannello
// V1
if ((X > 40 && X < 200) && (Y > 20 && Y < 60) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
if (e == 0) {
// BOTTONE1
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
delay(200);
e ++; //aumento il vale di uno
} else if (e == 1) {
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 APERTA");
delay(200);
e ++;//aumento il vale di uno
} else if (e == 2) {
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 APERTA");
delay(200);
e = 0;
}
}
}
}
dal quale si capisce che siccome tu continui ad aumentare e (e++) in ogni if ed essendo questa la condizione per passare al prossimo... continuerà a girare li dentro senza sosta fino a quando non togli il dito dal pulsante
quindi
meglio usare switch()...case
in questo modo con l'istruzione break interrompi il ciclo e vai a rileggere il pannello
... tra l'altro io in fondo azzererei x è y così non corri il rischio che faccia più giri li dentro
void loop() {
lecturaPanel(); // lettura del pannello
// V1
if ((X > 40 && X < 200) && (Y > 20 && Y < 60) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
switch (e) {
case 0:
// BOTTONE1
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
delay(200);
e ++; //aumento il vale di uno
break;
case 1:
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 APERTA");
delay(200);
e ++; //aumento di uno
break;
case 2:
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 APERTA");
delay(200);
e = 0;
break;
}
}
}
x = 0;
y = 0;
}
grazie molte ho capito, nel programma ho inserito anche un realclok quindi io dopo questa funzione if ho un altra funzione else if e per finire else che ogni secondo deve leggere l'orologio e stampare la nuova ora, in questo modo pero devo tenere premuto per piu' tempo lo schermo per far si che dopo il secondo di loop mi legga la pressione
fatto cosi non funziona bene tra l'altro vorrei aggiungere anche un altro comando che ad una certa ora mi avvia il secondo if...
come potrei sistemare questo problema?
e possibile creare due loop il primo per la prima parte di schermo e il secondo per la restante?
grazie
altra cosa non mi legge questo comando
x = 0;
y = 0;
inserisco il programma completo per esattezza
//CONTROLLO VALVOLE STALLA
#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <TouchScreen.h>
#include <Wire.h>
#include <DS3231.h>
// Pines necesarios para los 4 pines del panel tactil
#define YP A1 // Pin analogico A1 para ADC
#define XM A2 // Pin analogico A2 para ADC
#define YM 7
#define XP 6
// Definimos la presion máxima y minima que podemos realizar sobre el panel
#define MINPRESSURE 1
#define MAXPRESSURE 1000
// Para mejor precision de la presion realizada, es necesario
// medir la resistencia entre los pines X+ y X-.
// En Shield TFT 2.4" LCD se mide entre los pines A2 y 6
// Instancia del panel tactil (Pin XP, YP, XM, YM, Resistencia del panel)
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 364);
short TS_MINX = 150; // Coordenadas del panel tactil para delimitar
short TS_MINY = 120; // el tamaño de la zona donde podemos presionar
short TS_MAXX = 850; // y que coincida con el tamaño del LCD
short TS_MAXY = 891;
#define LCD_CS A3 // Definimos los pines del LCD
#define LCD_CD A2 // para poder visualizar elementos graficos
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000 // Definimos los colores
#define BLUE 0x001F // que utilizaremos para
#define RED 0xF800 // el texto y los elementos graficos
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // Instancia LCD
int X; // Variables que almacenaran la coordenada
int Y; // X, Y donde presionemos y la variable Z
int Z; // almacenara la presion realizada
int a = 0; // variable "flag" para control rebotes
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int val = 0; //pin di input
int valb = 0;
#define V1 16
#define V2 17
#define V3 18
#define VAA 19 //alimentazione valvole
DS3231 clock;
RTCDateTime dt;
#define sclk 13 // Don't change
#define mosi 11 // Don't change
void setup(void) {
tft.begin(0x9341);
clock.begin();
pinMode(16, OUTPUT); //V1
pinMode(17, OUTPUT); //V2
pinMode(18, OUTPUT); //V3
pinMode(19, OUTPUT); //VAA
digitalWrite(V1, LOW);
digitalWrite(V2, HIGH);
digitalWrite(V3, HIGH);
digitalWrite(VAA, LOW); //valvole accese
delay(3000);
digitalWrite(VAA, HIGH); //valvole spente
tft.fillScreen(WHITE);
tft.setRotation(0);
}
void loop() {
lecturaPanel(); // lettura del pannello
// V1
if ((X > 40 && X < 200) && (Y > 40 && Y < 90) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
switch (e) {
case 0:
// BOTTONE1
tft.fillRect(42, 22, 162, 55, WHITE); //data
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
delay(200);
e ++; //aumento il vale di uno
break;
case 1:
tft.fillRect(42, 22, 162, 55, WHITE); //data
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V2 APERTA");
delay(200);
e ++; //aumento di uno
break;
case 2:
tft.fillRect(42, 22, 162, 55, WHITE); //data
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V3 APERTA");
delay(200);
e = 0;
break;
}
}
}
//PROG VALVOLE
else if ((X > 40 && X < 200) && (Y > 100 && Y < 150) && (Z > MINPRESSURE && Z < MAXPRESSURE)) {
if (d == 0) {
tft.fillRect(10, 10, 240, 360, GREEN);
tft.setCursor(20, 40);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("SCARICO Valvola 1");
tft.setCursor(20, 80);
tft.setTextSize(3);
tft.setTextColor(BLUE);
tft.println("ATTIVO");
tft.setCursor(20, 120);
tft.setTextSize(3);
tft.setTextColor(BLUE);
tft.println("PER FERMARE");
tft.setCursor(20, 160);
tft.setTextSize(3);
tft.setTextColor(BLUE);
tft.println("PREMERE");
tft.setCursor(20, 200);
tft.setTextSize(3);
tft.setTextColor(BLUE);
tft.println("RESET");
delay(150);
digitalWrite(VAA, LOW); //accendo
delay(150);
digitalWrite(V1, LOW); //V1
digitalWrite(V2, HIGH);
digitalWrite(V3, HIGH);
delay(3000);
digitalWrite(VAA, HIGH); //spengo
delay(1200000); //1200000 20 min
digitalWrite(VAA, LOW); //a ccendo
delay(150);
digitalWrite(V2, LOW);
delay(3000); //10000 10 sec
digitalWrite(V1, HIGH);
digitalWrite(V3, HIGH);
delay(3000);
digitalWrite(VAA, HIGH); //spengo
tft.setCursor(20, 40);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("SCARICO Valvola 2");
delay(150);
delay(1200000); //20min
digitalWrite(VAA, LOW); //accendo
delay(150);
digitalWrite(V3, LOW);
delay(3000); //3sec
digitalWrite(V2, HIGH);
digitalWrite(V1, HIGH);
delay(150);
digitalWrite(VAA, HIGH); //spengo
delay(150);
tft.setCursor(20, 40);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("SCARICO Valvola 3");
delay(150);
delay(1200000); //20min
digitalWrite(VAA, LOW); //accendo
delay(150);
digitalWrite(V1, LOW); //V1
delay(3000); //10 sec
digitalWrite(V2, HIGH);
digitalWrite(V3, HIGH);
//reset
tft.fillScreen(WHITE);
tft.setRotation(0);
tft.setCursor(20, 10);
tft.setTextSize(1);
tft.setTextColor(RED);
tft.println("BY DANIELE PASSINI 22/10/18 V 1");
tft.drawRect(40, 20, 160, 60, RED); // BOTTONE1
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
tft.drawRect(40, 100, 160, 60, RED); //prog
tft.setCursor(60, 115);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("PROG1");
tft.drawRect(40, 180, 160, 60, RED); //data
tft.setCursor(60, 195);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println();
tft.drawRect(40, 260, 160, 60, RED); // Temp
tft.setCursor(60, 275);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println();
delay(7000); //ASPETTO CHIUSURA
digitalWrite(VAA, HIGH); //TOLGO ALIMENTAZIONE ALLE ELETTROVALVOLE
}
}
else {
dt = clock.getDateTime();
tft.setCursor(20, 10);
tft.setTextSize(1);
tft.setTextColor(RED);
tft.println("BY DANIELE PASSINI 22/10/18 V 1");
tft.drawRect(40, 20, 160, 60, RED); // BOTTONE1
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
tft.drawRect(40, 100, 160, 60, RED); //prog
tft.setCursor(60, 115);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("PROG1");
tft.drawRect(40, 180, 160, 60, RED); //data
tft.fillRect(42, 182, 155, 55, WHITE); //CANCELLO LO SCHERMO data
tft.setCursor(60, 195);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println(clock.dateFormat("d-m-Y", dt));
tft.setCursor(60, 215);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println(clock.dateFormat("H:i:s", dt));
tft.drawRect(40, 260, 160, 60, RED); // Temp
tft.fillRect(42, 262, 155, 55, WHITE); //data
tft.setCursor(60, 275);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println(clock.readTemperature());
delay(200);
}
}
void lecturaPanel()
{
digitalWrite(13, HIGH);
TSPoint p = ts.getPoint(); // Realizamos lectura de las coordenadas
digitalWrite(13, LOW);
pinMode(XM, OUTPUT); // La librería utiliza estos pines como entrada y salida
pinMode(YP, OUTPUT); // por lo que es necesario declararlos como salida justo
// despues de realizar una lectura de coordenadas.
// Mapeamos los valores analogicos leidos del panel tactil (0-1023)
// y los convertimos en valor correspondiente a la medida del LCD 320x240
X = map(p.x, TS_MAXX, TS_MINX, tft.width(), 0);
Y = map(p.y, TS_MAXY, TS_MINY, tft.height(), 0);
Z = p.z;
}
pinMode(16, OUTPUT); //V1
pinMode(17, OUTPUT); //V2
pinMode(18, OUTPUT); //V3
pinMode(19, OUTPUT); //VAA
visto che hai messo i define...
pinMode(V1, OUTPUT);
pinMode(V2, OUTPUT);
pinMode(V3, OUTPUT);
pinMode(VAA, OUTPUT);
questo sicuramente assieme agli altri 2 posti dove c'è lo stesso delay, è un problema...
tft.println("SCARICO Valvola 3");
delay(150);
delay(1200000); //20min
digitalWrite(VAA, LOW); //accendo
in questo if il programma sta li ad aspettare per 1 ora senza avere la possibilità di fare niente altro...
perchè dici che se fa l'aggiornamento ora non esegue gli altri if?
altra cosa non mi legge questo comando
x = 0;
y = 0;
forse perchè li scrivi minuscoli???
e possibile creare due loop il primo per la prima parte di schermo e il secondo per la restante?
certo ma non si chiama loop, si chiama funzione, è come quella che fa la lettura dal tft
infatti vedo che questa parte è comune
tft.setCursor(20, 10);
tft.setTextSize(1);
tft.setTextColor(RED);
tft.println("BY DANIELE PASSINI 22/10/18 V 1");
tft.drawRect(40, 20, 160, 60, RED); // BOTTONE1
tft.setCursor(60, 35);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("V1 APERTA");
tft.drawRect(40, 100, 160, 60, RED); //prog
tft.setCursor(60, 115);
tft.setTextSize(2);
tft.setTextColor(BLUE);
tft.println("PROG1");
tft.drawRect(40, 180, 160, 60, RED); //data
fatto cosi non funziona bene tra l'altro vorrei aggiungere anche un altro comando che ad una certa ora mi avvia il secondo if.
si certo ma prima devi studiarti l'uso di millis() perchè come ti ho detto con quei delay lunghissimi.... non riuscirai a fare nulla del genere
per millis() vedere qui:
Per capire come funziona e come applicare la funzione millis(), puoi studiare prima QUI, poi QUI ed infine leggere anche QUI e QUI e questo post di Claudio_FF... vedrai che ti sarà tutto più chiaro