/* Lokcontroller with Touchscreen shield V1 from Seeeduino on MEGA2560 MEGA2560 connected to Märklin Interface 6050 and Central Unit 6020 */ #include #include "TouchScreen.h" #include // These are the pins for the shield #define YP A2 // Y+ is A2 #define XM A1 // X- is A1 #define YM A0 // Y- is A0 #define XP A3 // X+ is A3 #define MINPRESSURE 10 #define MAXPRESSURE 1000 #define TS_MINX 140 #define TS_MAXX 900 #define TS_MINY 120 #define TS_MAXY 940 TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); int stelle_1 = 0; int stelle_2 = 0; int stelle_1_old = 0; int stelle_2_old = 0; char buffer [5]; // output string int lokAdresse = 0; // Lok Adress [01 .. 80] int lokAdresseOld = 0; int lokSpeed = 0; // Lok speed [0..14] int lokSpeedOld = 0; int lokSpeed2 = 0; // = lokSpeed plus lightON int lokSpeed3 = 0; // always speed 0 + lightON int lightON = 0; // if Function = OFF then lightON has value 0; if Function = ON then lightON has value 16 void setup(void) { Serial1.begin(2400); // Maerklin Interface 6050 connected to Serial 1 Tft.init(); //init TFT library Tft.fillRectangle(10,10, 220, 40, YELLOW); // output field Tft.fillRectangle(10, 55, 45, 45, WHITE); // Field for number 1 Tft.drawString("1", 22, 65, 3, BLACK); Tft.fillRectangle(60, 55, 45, 45, WHITE); // Field for number 2 Tft.drawString("2", 72, 65, 3, BLACK); Tft.fillRectangle(110,55, 45, 45, WHITE); // Field for number 3 Tft.drawString("3", 122, 65, 3, BLACK); Tft.fillRectangle(10, 105, 45, 45, WHITE); // Field for number 4 Tft.drawString("4", 22, 115, 3, BLACK); Tft.fillRectangle(60, 105, 45, 45, WHITE); // Field for number 5 Tft.drawString("5", 72, 115, 3, BLACK); Tft.fillRectangle(110, 105, 45, 45, WHITE); // Field for number 6 Tft.drawString("6", 122, 115, 3, BLACK); Tft.fillRectangle(10, 155, 45, 45, WHITE); // Field for number 7 Tft.drawString("7", 22, 165, 3, BLACK); Tft.fillRectangle(60,155, 45, 45, WHITE); // Field for number 8 Tft.drawString("8", 72, 165, 3, BLACK); Tft.fillRectangle(110, 155, 45, 45, WHITE); // Field for number 9 Tft.drawString("9", 122, 165, 3, BLACK); Tft.fillRectangle(10, 205, 45, 45, WHITE); // Field for number 0 Tft.drawString("0", 22, 215, 3, BLACK); Tft.fillRectangle(110,205, 45, 45, WHITE); // Speed = 0 / Halt Tft.drawString("H", 122, 215, 3, BLACK); Tft.fillRectangle(60,205, 45, 45, WHITE); // Function Tft.drawString("F", 72, 215, 3, BLACK); Tft.fillRectangle(10,255, 95, 50, WHITE); // change direction Tft.drawString("<>", 37, 268, 3, BLACK); Tft.fillRectangle(110,255, 45, 50, GREEN); // GO Tft.drawString("GO", 118, 270, 2, BLACK); Tft.fillRectangle(160,255, 70, 50, RED); // STOP Tft.drawString("STOP", 166, 270, 2, WHITE); Tft.fillRectangle(160, 55, 70, 195, WHITE); // Speed Tft.drawLine(195,60,195,240,RED); Tft.drawLine(194,60,194,240,RED); Tft.drawLine(195,60,165,95,RED); Tft.drawLine(194,60,164,95,RED); Tft.drawLine(195,60,225,95,RED); Tft.drawLine(196,60,226,95,RED); snprintf (buffer, sizeof (buffer), "LOK"); // Text "Lok" in output field Tft.drawString(buffer, 15, 20, 3, BLACK); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); snprintf (buffer, sizeof (buffer),"FS"); Tft.drawString(buffer, 140, 20, 3, BLACK); snprintf (buffer, sizeof (buffer), "%3d",lokSpeed ); Tft.drawString(buffer, 160, 20, 3, RED); } void loop(void) { TSPoint p = ts.getPoint(); // a point object holds x y and z coordinates if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { // pressure of < MINPRESSURE means no pressing! p.x = map(p.x, TS_MINX, TS_MAXX, 240, 0); // mapping of X and Y p.y = map(p.y, TS_MINY, TS_MAXY, 320, 0); // " if (p.x > 160 && p.x < 230 && p.y > 255 && p.y < 315){ // pressure is identified in the "STOP" field Serial1.write(97); delay (100); } else if (p.x > 110 && p.x < 155 && p.y > 255 && p.y < 315){ // pressure is identified in the "GO" field Serial1.write(96); delay (100); } else if (p.x > 10 && p.x < 100 && p.y > 255 && p.y < 315){ // pressure is identified in the "<>" field lokSpeedOld = lokSpeed; snprintf (buffer, sizeof (buffer), "%3d",lokSpeedOld ); Tft.drawString(buffer, 160, 20, 3, YELLOW); lokSpeed = 0; // send speed 0 prior to changing direction snprintf (buffer, sizeof (buffer), "%3d",lokSpeed ); Tft.drawString(buffer, 160, 20, 3, RED); lokSpeed2 = 0 + lightON; lokSpeed3 = 15 + lightON; //15 = change direction if (lokAdresse > 0 && lokAdresse < 81) { Serial1.write(lokSpeed2); // send speed 0 prior to changing direction delay (10); Serial1.write(lokAdresse); delay (1000); Serial1.write(lokSpeed3); // change direction ; keep light ON delay (10); Serial1.write(lokAdresse); delay (100); Serial1.write(lokSpeed2); // speed 0 again to ensure that lok does not move after the direction change delay (10); Serial1.write(lokAdresse); } delay (100); } else if (p.x > 160 && p.x < 230 && p.y > 55 && p.y < 250){ // pressure identified to be in the "speed" field snprintf (buffer, sizeof (buffer), "%3d",lokSpeed ); // overwrite old speed with Yellow numbers Tft.drawString(buffer, 160, 20, 3, YELLOW); if (p.x > 160 && p.x < 230 && p.y > 55 && p.y < 69){ lokSpeed = 14; } else if (p.x > 160 && p.x < 230 && p.y > 68 && p.y < 72){ lokSpeed = 13; } else if (p.x > 160 && p.x < 230 && p.y > 71 && p.y < 85){ lokSpeed = 12; } else if (p.x > 160 && p.x < 230 && p.y > 84 && p.y < 98){ lokSpeed = 11; } else if (p.x > 160 && p.x < 230 && p.y > 97 && p.y < 111){ lokSpeed = 10; } else if (p.x > 160 && p.x < 230 && p.y > 110 && p.y < 124){ lokSpeed = 9; } else if (p.x > 160 && p.x < 230 && p.y > 123 && p.y < 137){ lokSpeed = 8; } else if (p.x > 160 && p.x < 230 && p.y > 136 && p.y < 150){ lokSpeed = 7; } else if (p.x > 160 && p.x < 230 && p.y > 149 && p.y < 163){ lokSpeed = 6; } else if (p.x > 160 && p.x < 230 && p.y > 162 && p.y < 176){ lokSpeed = 5; } else if (p.x > 160 && p.x < 230 && p.y > 175 && p.y < 189){ lokSpeed = 4; } else if (p.x > 160 && p.x < 230 && p.y > 188 && p.y < 202){ lokSpeed = 3; } else if (p.x > 160 && p.x < 230 && p.y > 201 && p.y < 215){ lokSpeed = 2; } else if (p.x > 160 && p.x < 230 && p.y > 214 && p.y < 228){ lokSpeed = 1; } else { lokSpeed = 0; } snprintf (buffer, sizeof (buffer), "%3d",lokSpeed ); Tft.drawString(buffer, 160, 20, 3, RED); lokSpeed2 = lokSpeed + lightON; if (lokAdresse > 0 && lokAdresse < 81) { Serial1.write(lokSpeed2); delay (10); Serial1.write(lokAdresse); } } else if (p.x > 10 && p.x < 155 && p.y > 55 && p.y < 250){ // keys 0 ..9 , H, F if (p.x > 60 && p.x < 105 && p.y > 205 && p.y < 250){ // Function F if (lightON == 0) { lightON = 16; // Function ON lokSpeed2 = lokSpeed + lightON; Tft.fillRectangle(60,205, 45, 45, YELLOW); Tft.drawString("F", 72, 215, 3, BLACK); if (lokAdresse > 0 && lokAdresse < 81) { Serial1.write(lokSpeed2); delay (10); Serial1.write(lokAdresse); } delay (300); } else if (lightON == 16){ lightON = 0; // Function OFF lokSpeed2 = lokSpeed + lightON; Tft.fillRectangle(60,205, 45, 45, WHITE); Tft.drawString("F", 72, 215, 3, BLACK); if (lokAdresse > 0 && lokAdresse < 81) { Serial1.write(lokSpeed2); delay (10); Serial1.write(lokAdresse); } delay (300); } } else if (p.x > 110 && p.x < 155 && p.y > 205 && p.y < 250){ // H = speed 0 lokSpeedOld = lokSpeed; snprintf (buffer, sizeof (buffer), "%3d",lokSpeedOld ); Tft.drawString(buffer, 160, 20, 3, YELLOW); lokSpeed = 0; snprintf (buffer, sizeof (buffer), "%3d",lokSpeed ); Tft.drawString(buffer, 160, 20, 3, RED); lokSpeed2 = lokSpeed + lightON; if (lokAdresse > 0 && lokAdresse < 81) { Serial1.write(lokSpeed2); delay (10); Serial1.write(lokAdresse); } } else if (p.x > 10 && p.x < 55 && p.y > 55 && p.y < 100){ // Number 1 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 1; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else { // invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 60 && p.x < 105 && p.y > 55 && p.y < 100){ // Number 2 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 2; lokAdresseOld = lokAdresse; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 110 && p.x < 155 && p.y > 55 && p.y < 100){ // Number 3 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 3; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 10 && p.x < 55 && p.y > 105 && p.y < 150){ // Number 4 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 4; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 60 && p.x < 105 && p.y > 105 && p.y < 150){ // Number 5 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 5; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 110 && p.x < 155 && p.y > 105 && p.y < 150){ // Number 6 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 6; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 10 && p.x < 55 && p.y > 155 && p.y < 200){ // Number 7 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 7; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 60 && p.x < 105 && p.y > 155 && p.y < 200){ // Number 8 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 8; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 110 && p.x < 155 && p.y > 155 && p.y < 200){ // Number 9 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 9; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } else if (p.x > 10 && p.x < 55 && p.y > 205 && p.y < 250){ // Number 0 stelle_1_old = stelle_1; stelle_2_old = stelle_2; stelle_1 = stelle_2; stelle_2 = 0; lokAdresse = stelle_1*10 + stelle_2; if (lokAdresse > 0 && lokAdresse < 81) { snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, RED); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, RED); } else {// invalid address: numbers are shown white instead of red snprintf (buffer, sizeof (buffer), "%d",stelle_1_old); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_2_old); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, YELLOW); snprintf (buffer, sizeof (buffer), "%d",stelle_1); //First digit of Lokaddress Tft.drawString(buffer, 85, 20, 3, WHITE); snprintf (buffer, sizeof (buffer), "%d",stelle_2); // Second digit of Lokaddress Tft.drawString(buffer, 105, 20, 3, WHITE); lokAdresse = lokAdresseOld; } } } } delay (50); }