Hallo ich habe vor ein paar Tagen mit einem Uno angefangen zu programmieren. Wahrscheinlich ist mein Programm in euren Augen totaler Mist aber ich weiß es halt nicht besser. Ich habe außerhalb meines Loops 4 Funktionen geschrieben die eigentlich bis jetzt nur das Design auf meinem Touchscreen darstellen. Ich habe einen HomeScreen und 4 Untermenüs. Das hin und her schalten zwischen den Menüs klappt auch. In meinem loop gucke ich aktuell nur ob eine Eingabe erfolgt ist und wenn ja dann mache ich das mit zich If schleifen welcher Taster gedrückt worden ist. Jetzt habe ich aber in einer If Schleife folgendes stehen if (p.x > -5 && p.x < 45) { //Wird überprüft ob der Button Temp - gedrückt if (p.y > 117 && p.y < 155) { if(site==1){ tempbutton--; }}} Der Wert von tempbutton ändert sich natürlich auch aber auf meinem Display natürlich nicht weil die Funktion Temperatur wird ja nicht mehr aufgerufen im loop. Dann dachte ich eben das ich in die If schleife einfach noch Temperatur(); einfuge so das der Code wieder ausgeführt wird und der Wert tempbutton in der Funktion Temperatur dargestellt wird. Das klappt auch aber bei jedem Betätigen der Temperatür Buttons Flackert einmal das Bild. Das will ich natürlich nicht. Wie muss ich da jetzt vorgehen? Sorry wahrscheinlich ist das für Euch Kinderkram aber ich mach das esrt seit ein paar Tagen
Sebastian schrieb: > Wahrscheinlich ist mein Programm in euren Augen totaler > Mist aber ich weiß es halt nicht besser. Schwer zu sagen, du hast vergessen, es anzuhängen. Meinst du, der Typ des Displays ist völlig egal und dass man daher auch keinen Schaltplan braucht?
#include <stdint.h> #include "TouchScreen.h" #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_TFTLCD.h> // Hardware-specific library #define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 #define LCD_RD A0 // LCD Read goes to Analog 0 #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin // Colors LCD #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x152C #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); #define YP A2 // must be an analog pin, use "An" notation! #define XM A3 // must be an analog pin, use "An" notation! #define YM 8 // can be a digital pin #define XP 9 // can be a digital pin #define BOXSIZE 40 #define PENRADIUS 3 #define TS_MINX 940 #define TS_MINY 160 #define TS_MAXX 160 #define TS_MAXY 970 #define MINPRESSURE 10 #define MAXPRESSURE 1000 TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); //Globale Variabeln bool change = 0; bool touch = 0; bool site=0; int tempbutton=30; unsigned long starttime=0; void setup() { Serial.begin(9600); tft.reset(); uint16_t identifier = tft.readID(); if(identifier == 0x9325) { Serial.println(F("Found ILI9325 LCD driver")); } else if(identifier == 0x9328) { Serial.println(F("Found ILI9328 LCD driver")); } else if(identifier == 0x7575) { Serial.println(F("Found HX8347G LCD driver")); } else if(identifier == 0x9341) { Serial.println(F("Found ILI9341 LCD driver")); } else if(identifier == 0x8357) { Serial.println(F("Found HX8357D LCD driver")); } else { Serial.print(F("Unknown LCD driver chip: ")); Serial.println(identifier, HEX); Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:")); Serial.println(F(" #define USE_ADAFRUIT_SHIELD_PINOUT")); Serial.println(F("should appear in the library header (Adafruit_TFT.h).")); Serial.println(F("If using the breakout board, it should NOT be #defined!")); Serial.println(F("Also if using the breakout, double-check that all wiring")); Serial.println(F("matches the tutorial.")); return; } tft.begin(identifier); HomeScreen();//HomeScreen wird geladen } void loop() { TSPoint p = ts.getPoint(); pinMode(XM, OUTPUT); //Touchscreen wird gelesen und auf dem Serialmonitor ausgegeben pinMode(YP, OUTPUT); if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0); p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0); Serial.print("("); Serial.print(p.x); Serial.print(", "); Serial.print(p.y); Serial.println(")"); if (p.x > 52 && p.x < 274) { //Wird überprüft ob der Button Maische gedrückt worden ist if (p.y > 64 && p.y < 90) { if(site==0){ Maischen(); }} } if (p.x > 52 && p.x < 274) { //Wird überprüft ob der Button Rast.1 gedrückt worden ist if (p.y > 115 && p.y < 145) { if(site==0){ Rast1(); } } } if (p.x > 52 && p.x < 274) { //Wird überprüft ob der Button Rast.2 gedrückt worden ist if (p.y > 163 && p.y < 190) { if(site==0){ Rast2(); } } } if (p.x > 52 && p.x < 274) { //Wird überprüft ob der Button Abmaischen gedrückt worden ist if (p.y > 211 && p.y < 240) { if(site==0){ Abmaischen(); } } } if (p.x > -5 && p.x < 45) { //Wird überprüft ob der Button Temp - gedrückt worden ist if (p.y > 117 && p.y < 155) { if(site==1){ tempbutton--; Maischen(); } } } if (p.x > 286 && p.x < 326) { //Wird überprüft ob der Button Temp - gedrückt worden ist if (p.y > 118 && p.y < 159) { if(site==1){ tempbutton++; } } } if (p.x > 0 && p.x < 55) { //Wird überprüft ob der Button Back gedrückt worden ist if (p.y > 25 && p.y < 70) { if (site==1){ HomeScreen(); }} } } } void HomeScreen () { site=0; tft.setRotation(1); tft.fillScreen(BLACK); tft.drawRoundRect(0, 0, 319, 240, 8, WHITE); //Page border tft.setCursor(20, 10); tft.setTextColor(WHITE); tft.setTextSize(3); tft.println("BRAUMEISTER V1.0"); tft.drawLine(3,40,316,40,RED); tft.fillRoundRect(60, 50, 200, 35, 8,GREEN ); tft.drawRoundRect(60, 50, 200, 35, 8, WHITE) ; tft.fillRoundRect(60, 95, 200, 35, 8,GREEN ); tft.drawRoundRect(60, 95, 200, 35, 8, WHITE) ; tft.fillRoundRect(60, 140, 200, 35, 8,GREEN ); tft.drawRoundRect(60, 140, 200, 35, 8, WHITE) ; tft.fillRoundRect(60, 185, 200, 35, 8,GREEN ); tft.drawRoundRect(60, 185, 200, 35, 8, WHITE) ; tft.setTextColor(WHITE); tft.setTextSize(2); tft.setCursor(112, 60); tft.println("Maischen"); tft.setCursor(125, 105); tft.println("1.Rast"); tft.setCursor(125, 150); tft.println("2.Rast"); tft.setCursor(103,195); tft.println("Abmaischen"); } void Maischen () { site=1; int Time1=0; tft.setRotation(1); tft.fillScreen(BLACK); tft.fillRoundRect(10, 10, 50, 50, 8,GREEN ); //Back Button tft.drawRoundRect(10, 10, 50, 50, 8, WHITE) ; tft.setTextColor(WHITE); tft.setTextSize(3); tft.setCursor(110,25); tft.println("Maischen"); tft.drawLine(100,60,260,60,RED); tft.fillRoundRect(63, 100, 200, 40, 8,GREEN );//Temperatur & Time Button tft.drawRoundRect(63, 100, 200, 40, 8, WHITE) ; tft.fillRoundRect(63, 150, 200, 40, 8,GREEN ); tft.drawRoundRect(63, 150, 200, 40, 8, WHITE) ; tft.fillRoundRect(6, 100, 50, 40, 8,GREEN );// down Button tft.drawRoundRect(6, 100, 50, 40, 8, WHITE) ; tft.fillRoundRect(6, 150, 50, 40, 8,GREEN ); tft.drawRoundRect(6, 150, 50, 40, 8, WHITE) ; tft.fillRoundRect(270, 100, 50, 40, 8,GREEN );// Up Button tft.drawRoundRect(270, 100, 50, 40, 8, WHITE) ; tft.fillRoundRect(270, 150, 50, 40, 8,GREEN ); tft.drawRoundRect(270, 150, 50, 40, 8, WHITE) ; //Beschriftungen tft.setCursor(25,25); tft.println("<"); //Back tft.setCursor(20,110); tft.println("<"); //Down Temp tft.setCursor(20,160); tft.println("<");// Down Time tft.setCursor(290,110); tft.println(">");// Up Temp tft.setCursor(290,160); tft.println(">");// Up Time tft.setCursor(80,110); tft.println("Temperatur"); // Temp tft.setCursor(120,160); tft.println("Zeit"); // Time //Ausgabewerte tft.setCursor(10,70); tft.print(tempbutton); tft.print(" Grad"); tft.setCursor(180,70); tft.print(Time1); tft.print("Min"); }
> Dann dachte ich eben das ich in die If schleife > einfach noch Temperatur(); Wie sollen wir etwas hilfreiches zu einer Funktion sagen, die gar nicht existiert? Würdest du uns bitte den richtigen Quelltext zeigen und beim Einfügen in das Textfeld die fetten Hinweise zur Formatierung beachten? Es fehlt immer noch die Angabe, welches Display du verwendest und dein Schaltplan dazu.
Ich habe das 2,4 Tft Touchscreen von Az das wird einfach aufgesteckt und gut ist. Außerdem funktioniert doch das Display da muss nur was falsch programmiert sein. und die Funktion heißt void Maischen()
In der Funktion Maischen() füllst du das ganze Display mit schwarz aus und zeichnest dann den gesamtem Inhalt. Das kann man sehen, also flackert es. Um das Flackern zu verhindern, musst du deine Ausgabe auf das nötigste beschränken. Also nur die Zahlen überschreiben, die sich ändern sollen.
Das habe ich auch schon probiert aber dann ist das Problem das die Pixel die weiß geworden sind weiß bleiben.
Sebastian schrieb: > Das habe ich auch schon probiert aber dann ist das Problem das die Pixel > die weiß geworden sind weiß bleiben. Dann übermale halt den entsprechenden Bereich vorher mit einem schwarzen Rechteck, aber nicht das ganze Display.
DAS WAR AUCH GERADE MEINE IDEE ABER ICH KANN MIR NICHT VORSTELLEN DAS ES NICHT BESSER GELÖST WERDEN KANN
Stefan ⛄ F. schrieb: > Dann übermale halt den entsprechenden Bereich vorher mit einem schwarzen > Rechteck, aber nicht das ganze Display. kann man machen, für nur Test merke ich mir den alten Text und schreibe ihn neu in black und dann erst den neuen Text in Wunschfarbe (in der Hoffnung das keine überflüssigen Pixel gemalt werden) funktioniert bei mir ohne weitere Prüfung. Ob natürlich trotzdem überflüssige Pixel irgendwie gelöscht werden habe ich nicht geprüft! Ich mache auch nicht mehr als 4 TFT/LCD Updates pro Sekunde, weil das eh keiner lesen kann! 10ms Timer für Tastenentprellung, count 25 bis 0 -> in loop LCD Update wenn 0 und danach Count neu setzen.
Ok erstmal danke hat jetzt mit dem übermalen geklappt. Wenn ich etwas mehr geübt habe werde das irgendwann wohl auch eleganter hinbekommen.
Sebastian schrieb: > ABER ICH KANN MIR NICHT VORSTELLEN DAS ES > NICHT BESSER GELÖST WERDEN KANN Was wäre denn in deiner Vorstellung besser? Guck dir mal diese Doku an, besonders ab Seite 19 https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf da steht, dass der Hintergrund mit Absicht nicht automatisch gelöscht wird. Direkt darunter steht eine andere Lösung mit dem GFXcanvax1 Objekt. Vielleicht gefällt dir diese besser.
Sebastian schrieb: > Ok erstmal danke hat jetzt mit dem übermalen geklappt vor allem muss man nicht alle Pixel löschen und nicht alle Texte, nur die die sich wirklich ändern, die Position wo du schreibst kennst du doch!
Ja ich habe es ja geschafft hatte da gestern nicht genau drüber nachgedacht. Heute habe ich eh erstmal meinen Code übersichtlicher geschrieben einige Funktionen zusammen gefasst und so einiges an Code gespart usw. dafür das ich das es kurz machen bin ich mit meinem Erfolg bis jetzt zufrieden. Bin jetzt dabei meine Werte in den Eeprom zu schreiben
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.