-
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv displej;
#include <TouchScreen.h>
#define MINTLAK 250
#define MAXTLAK 1000
int zadaneHesloPole[8];
byte indexPole = 0;
boolean zadavaniHeslaP;
// Promenne pro detekci a spravu tlacitek na displeji
int x_dotyk, y_dotyk; //=
byte stisknutoP, stiskP; //=
int x_souradnice, y_souradnice, pomocna; //=
// ===================================================
const int XP=8,XM=A2,YP=A3,YM=9; //320x480 ID=0x9486
const int TS_LEFT=122,TS_RT=899,TS_TOP=947,TS_BOT=93;
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#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 VRCHNI 0xFFD700
void setup(void)
{
Serial.begin(9600);
uint16_t ID = displej.readID();
if (ID == 0xD3D3) ID = 0x9486; // write-only shield
displej.begin(ID);
displej.setRotation(1); //LANDSCAPE
pinMode(YP, OUTPUT); //restore shared pins
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //because displej control pins
digitalWrite(XM, HIGH);
displej.fillRect(0,0,480,320,BLACK);
vrchniPanel();
zadavaniHesla();
}
void loop(void){
TSPoint p = ts.getPoint();
if (p.z > MINTLAK && p.z < MAXTLAK){
x_dotyk = round(map(p.y, 947, 93, 0, 480));
y_dotyk = round(map(p.x, 122, 899, 320, 0));
zadaneHeslo();
delay(350);
}
}
// Vrchní panel
void vrchniPanel(){
//displej.fillScreen(MAGENTA);
displej.fillRect(0, 0, 479, 25, BLACK);
displej.drawLine(0, 26, 479, 26, WHITE);
displej.drawLine(0, 27, 479, 27, WHITE);
displej.setCursor(65,1);
displej.setTextColor(CYAN);
displej.setTextSize(3);
displej.print("Zabezpecovaci system");
}
void zadavaniHesla(){
displej.fillRoundRect(80, 60, 320, 45, 10, CYAN);
displej.drawRoundRect(80, 60, 320, 45, 10, YELLOW);
displej.drawRoundRect(80-1, 60-1, 320+2, 47, 12, YELLOW);
displej.setCursor(80+24,60+9);
displej.setTextColor(BLACK);
displej.setTextSize(4);
displej.println("Zadej heslo");
zadavaniHeslaP = true;
x_souradnice = 250;
for (int i = 0; i < 3; i++){
y_souradnice = 140+(60*i);
pomocna = 9-(3*i);
Serial.print("i = ");Serial.println(i);
for (int y = 0; y < 3; y++){
Serial.print("y = ");Serial.println(y);
displej.fillRoundRect(x_souradnice-(110*y), y_souradnice, 90, 45, 10, GREEN);
displej.drawRoundRect(x_souradnice-(110*y), y_souradnice, 90, 45, 10, YELLOW);
displej.drawRoundRect((x_souradnice-(110*y))-1, y_souradnice-1, 92, 47, 12, YELLOW);
displej.setCursor((x_souradnice-(110*y))+36,y_souradnice+10);
displej.print(pomocna-y);
}}
// Tlacitko ENTER - x 360 - 470, y 260 - 305,
displej.fillRoundRect(360, 260, 110, 45, 10, CYAN);
displej.drawRoundRect(360, 260, 110, 45, 10, YELLOW);
displej.drawRoundRect(360-1, 259, 112, 47, 12, YELLOW);
displej.setCursor(360+12,270+2);
displej.setTextSize(3);
displej.print("Enter");
// Tlacitko CLEAR (Smazat posledni cislici) - x 360 - 470, y 140 - 185,
displej.fillRoundRect(360, 140, 110, 45, 10, RED);
displej.drawRoundRect(360, 140, 110, 45, 10, YELLOW);
displej.drawRoundRect(360-1, 140-1, 112, 47, 12, YELLOW);
displej.setCursor(360+11,150+2);
displej.print("Clear");
// Tlacitko X (Smazat posledni cislici) - x 360 - 470, y 200 - 245,
displej.fillRoundRect(360, 200, 110, 45, 10, MAGENTA);
displej.drawRoundRect(360, 200, 110, 45, 10, YELLOW);
displej.drawRoundRect(360-1, 200-1, 112, 47, 12, YELLOW);
displej.setCursor(360+1,210+4);
displej.setTextSize(2);
displej.print("Backspace");
}
boolean detekceKlavesyHeslo(){
for (int i = 0; i < 3; i++){
y_souradnice = 260 - (60*i);
pomocna = 1+(3*i);
for (int y = 0; y < 3; y++){
x_souradnice = 30+(110*y);
if (x_dotyk > (x_souradnice-1) and x_dotyk < (x_souradnice+111) and y_dotyk > (y_souradnice-1) and y_dotyk < (y_souradnice+46)){
stisknutoP = pomocna + y;
y = 3;
i = 3;
Serial.print("Stisknuto "); Serial.println(stisknutoP);
zobrazitHeslo();
}
if (x_dotyk > 360 and x_dotyk < 470 and y_dotyk > 260 and y_dotyk < 305){
Serial.println("Stistknuto ENTER");
delay(500);}
}}
}
void zobrazitHeslo(){
zadaneHesloPole[indexPole] = stisknutoP;
indexPole++;
// výpis x: 80 - 320, y: 60 - 105 (69 opt)
displej.fillScreen(BLACK);
vrchniPanel();
Serial.println("Zobrazit heslo");
displej.fillRoundRect(80, 60, 320, 45, 10, CYAN);
displej.drawRoundRect(80, 60, 320, 45, 10, YELLOW);
displej.drawRoundRect(80-1, 60-1, 320+2, 47, 12, YELLOW);
displej.setCursor(80+24,60+9);
displej.setTextColor(BLACK);
displej.setTextSize(4);
displej.println(stisknutoP);
}
boolean stisknuto(void)
{
TSPoint p = ts.getPoint();
bool stisk = (p.z > 300 && p.z < 1000);
if (stisk) {
x_dotyk = map(p.y, 947, 93, 0, 480); //.kbv makes sense to me
y_dotyk = map(p.x, 122, 899, 320, 0);
Serial.println("Detekovan stisk");
displej.fillScreen(GREEN);
}
return stisk;
}