Buongiorno a tutti,
ho un problema software che mi servirebbe eliminare. Utilizzo un TFT01 con lo shield e arduino mega. Il problema è la visualizzazione sul display di un eventuale errore durante un procedimento che viene avviato tramite la pressione di un tasto che creo. Mi spiego meglio: non riesco a far comparire un errore (in questo caso appositamente voluto tramite un semplice analogRead) durante la seduta, perchè finisce prima la seduta e poi se il valore di A0 è maggiore di un tot valore mi segnala un pericolo. Non riesco a far interrompere la seduta se c'è questo errore. Vi posto il codice da me creato:
#if defined(__AVR__)
#define imagedatatype unsigned int
#elif defined(__PIC32MX__)
#define imagedatatype unsigned short
#elif defined(__arm__)
#define imagedatatype unsigned short
#endif
extern imagedatatype Icone_Attention[];
#include <UTFT.h>
#include <UTouch.h>
#include <UTFT_Buttons.h>
UTFT myGLCD(TFT01_32, 38, 39, 40, 41);
UTouch myTouch(6, 5, 4, 3, 2);
UTFT_Buttons myButtons(&myGLCD, &myTouch);
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t Dingbats1_XL[];
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
myGLCD.InitLCD(LANDSCAPE);
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myTouch.InitTouch(LANDSCAPE);
myTouch.setPrecision(PREC_MEDIUM);
myButtons.setTextFont(BigFont);
myButtons.setSymbolFont(Dingbats1_XL);
}
int avvia, pressed_button;
void MenuIniziale() {
avvia = myButtons.addButton(50, 50, 219, 139, "Avvia seduta");
myButtons.drawButton(avvia);
}
void Seduta() {
myButtons.disableButton(avvia);
myGLCD.clrScr();
myGLCD.fillScr(0, 0, 0);
delay(2000);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("0 0 0", LEFT, 10);
delay(2000);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("0 0 1", LEFT, 30);
delay(2000);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("0 1 0", LEFT, 50);
delay(2000);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("0 1 1", LEFT, 70);
delay(2000);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("1 0 0", LEFT, 90);
delay(2000);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("1 0 1", LEFT, 110);
delay(2000);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("1 1 0", LEFT, 130);
delay(2000);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("1 1 1", LEFT, 150);
delay(2000);
myGLCD.clrScr();
myGLCD.fillScr(0, 0, 0);
myGLCD.setColor(VGA_BLACK);
myGLCD.setBackColor(VGA_AQUA);
myGLCD.print(" Seduta finita ", CENTER, 120);
delay(2000);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
myGLCD.clrScr();
myGLCD.fillScr(0, 0, 0);
MenuIniziale();
}
void pericolo() {
myButtons.disableButton(avvia);
myGLCD.clrScr();
myGLCD.fillScr(0, 0, 0);
}
void loop() {
MenuIniziale();
while (1)
{
if (myTouch.dataAvailable() == true) {
delay(50);
myTouch.read();
pressed_button = myButtons.checkButtons();
if (pressed_button == avvia) {
Seduta();
}
}
if (analogRead(A0) > 600) {
break;
}
}
pericolo();
myGLCD.setColor(VGA_RED);
myGLCD.setBackColor(VGA_AQUA);
myGLCD.print(" PERICOLO!! PERICOLO!! ", CENTER, 170);
myGLCD.drawBitmap(130, 75 , 50, 50, Icone_Attention);
for (int i = 0; i < 10; i++) {
digitalWrite(8, HIGH);
delay(500);
digitalWrite(8, LOW);
delay(500);
}
delay(5000);
myGLCD.clrScr();
myGLCD.fillScr(0, 0, 0);
}
Qualcuno che mi aiuti, please!!