Buonasera,
sto progettando una centrale di allarme che interessa più zone attivabili tutte insieme oppure singolamente.
Il tutto è protetto da psw iniziale tramite la quale si accede al menù di attivazione
Lo schermo è un TFT Touchscreen 320 x 480 montato su un Arduino Mega con libreria MCUFRIEND_kbv
Fino ad ora, aiutandomi anche con varie ricerche fatte in internet, sono riuscito a far apparire una tastiera iniziale dove inserisco la psw che se corretta mi porta alla nuova schermata menù di attivazione centrale.
Fino ad ora ho riscontrato due problemi ai quali non sono riuscito, nonostante i tentativi e prove tramite codice, a venirne a capo e per i quali chiedo un aiuto
1° problema: quando digito la psw i numeri vengono evidenziati nell’apposito campo tranne l’ultima cifra in quanto appena la inserisco il programma passa direttamente al menù successivo mentre vorrei che si vedesse l’ultime cifra prima di passare al menù successivo
2° problema: quando passa al menù successivo altrea ai tasti di attivazione che mi aspetto di vedere mi ritrovo anche disegnato l’ultimo tasto che ho digitato della psw mentre non dovrebbe esserci
Le ho provate tutte, almeno quelle di mia conoscenza, ma non riesco a venirne a capo.
Devo dire che è la prima volta che mi cimento con uno schermo TFT.
Se qualcuno può indirizzarmi sulla soluzione sarei grato
Allego codice interessato suddiviso su due post in quanto supera il limite ammesso
Grazie
//librerie
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
#include <TouchScreen.h>
//definizioni per TFT 3.2"
#define MINPRESSURE 200
#define MAXPRESSURE 1000
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define LTBL 0x6EFC
#define BG222 0x2104
#define BG333 0x3186
#define BG111 0x1082
MCUFRIEND_kbv tft; //definizione oggetto TFT
const int XP=8,XM=A2,YP=A3,YM=9; //320x480 ID=0x9486
const int TS_LEFT=153,TS_RT=878,TS_TOP=949,TS_BOT=102;
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
Adafruit_GFX_Button on_btn, off_btn, a1_btn, b2_btn, c3_btn, d4_btn, e5_btn, one_btn,
two_btn, three_btn, four_btn, five_btn, six_btn, seven_btn, eight_btn, nine_btn,
clear_btn, zero_btn, rtn_btn, return1_btn;//definizione bottoni
int pixel_x, pixel_y; //cordinate schermo premuto
//funzione che rileva la pressione dei tasti
bool getPoint(){
bool pressed = false;
TSPoint p = ts.getPoint();
pinMode(YP, OUTPUT); //restore shared pins
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //because TFT control pins
digitalWrite(XM, HIGH);
if ((p.z > MINPRESSURE) && (p.z < MAXPRESSURE)) {
pressed = true;
pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width());
pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
}
return pressed;
}
String pWord, pString;
int counter = 0;
boolean correctP = false;
//variabili di sistema
boolean keyScrn = true;
boolean callScrn = false;
/* Vengono definite le costanti PIN utilizzati*/
//funzione per reset arduino
void(* resetFunc)(void) = 0;
void setup() {
Serial.begin(9600);
//inizializza il TFT
int id = tft.readID(); //legge ID del TFT
tft.begin(id); //inizializza il TFT
tft.setRotation(0); //0=PORTRAIT, 1=LANDSCAPE
tft.fillScreen(BLACK); //sfondo schermo
tft.setTextSize(2);
tft.setTextColor(WHITE, BLACK);
pWord = String("54321");
pString = String("");
drawKeypad();
}
void loop() {
while (keyScrn) {
keypad();
}
}