Hallo Wie kann man einzelne Zeichen löschen Ich benutze #include "Adafruit_GFX.h" #include "Adafruit_ILI9341.h" Ich dachte man kann das so lösen Ich wollt von dem array Buffer die letzten 8 Zeichen löschen tft.setCursor (MainBUTTON_X + 29, MainBUTTON_Y * i + 15); tft.print(" "); tft.setCursor (MainBUTTON_X + 15, MainBUTTON_Y * i + 15); tft.println(Buffer); Nur leider funktioniert das nicht. Wie kann man das lösen ? PS Bestimmt gibt es viele guten Forenbeiträge dazu, nur leider finde ich nicht die funktionierenden.
Martin M. schrieb: > Ich wollt von dem array Buffer die letzten 8 Zeichen löschen > tft.setCursor (MainBUTTON_X + 29, MainBUTTON_Y * i + 15); > tft.print(" "); > tft.setCursor (MainBUTTON_X + 15, MainBUTTON_Y * i + 15); > tft.println(Buffer); > > Nur leider funktioniert das nicht. Du veränderst das Array "Buffer" ja auch nicht. Jedenfalls nicht in dem Codefragmentschnipsel, den Du da gepostet hast.
Martin M. schrieb: > Und was machst das ? > tft.print(" "); Das hängt von der Graphik-Bibliothek ab, das wird aber keine Zeichen in Buffer löschen.
Wenn Du einen Teil eines ausgegebenen Textes auf dem Display überschreiben willst, musst Du das machen, nachdem Du den Text ausgegeben hast, und nicht davor. Dein Code aber macht das hier: Setze den Cursor auf Position irgendwas + 29 Gebe 8 Leerzeichen aus Setze den Cursor auf Position irgendwas + 15 Gebe einen Text aus Wenn der Text kürzer ist als 14 Zeichen, überschreibt der Text die vorher ausgegebenen Leerzeichen nicht. Ist er aber länger als diese 14 Zeichen, überschreibt er die ausgegebenen Leerzeichen wieder. Du musst also mindestens die Reihenfolge der Ausgaben vertauschen. Erst den Text ausgeben, dann den Text mit Leerzeichen überschreiben. Das ist natürlich ziemlich ineffizient. Einfacher wäre es, vom Text die letzten 8 Zeichen gar nicht erst auszugeben, denn dann musst Du sie auch nicht mit Leerzeichen überschreiben.
Hallo Ich habe zu dem Thema was gutes informatives gefunden http://matthewcmcmillan.blogspot.de/2014/01/arduino-improving-refresh-rate-of-tft.html
Also ich poste mal eine Anregung so funktioniert das bei mir wunderbar // Der Skript funktioniert auf einem ESP8266-12 // #define ESP8266 #include "SPI.h" #include "Adafruit_GFX.h" #include "Adafruit_ILI9341.h" #include "GfxUi.h" // For the Adafruit shield, these are the default. #define TFT_CS 4 #define TFT_DC 5 // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); GfxUi ui = GfxUi(&tft); // If using the breakout, change pins as desired //Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); #define MainBUTTON_X 15 #define MainBUTTON_Y 25 #define MainBUTTON_W 200 #define MainBUTTON_H 25 #define MainRound 15 #define ValAUSGABE 160 char Buffer[50]; char sFloating[7]; uint32_t ZahlPuffer[5]; void printButtonText(){ tft.setTextSize(4); tft.setCursor(50,180); tft.setTextColor(ILI9341_ORANGE); tft.println("Spring !"); ui.drawProgressBar(10, 220, 320 - 20, 20,0 , ILI9341_WHITE, ILI9341_BLUE); tft.setTextColor(ILI9341_DARKGREY); tft.setTextSize(2); for (int i=0; i<5; i++){ tft.setCursor(MainBUTTON_X + 25, MainBUTTON_Y * i + 7); //sprintf(Buffer, "Ausgabe : %d", i); tft.print("Ausgabe :"); } } void printButtonValueOn(int pos, uint32_t Value) { tft.setTextSize(2); tft.setTextColor(ILI9341_DARKGREY); tft.setCursor (MainBUTTON_X + ValAUSGABE, MainBUTTON_Y * pos + 15); tft.print(Value); } void printButtonValueAus(int pos, uint32_t Value) { tft.setTextSize(2); tft.setTextColor(ILI9341_BLUE); tft.setCursor (MainBUTTON_X + ValAUSGABE, MainBUTTON_Y * pos + 15); tft.print(Value); } void printButtonValueOff(uint32_t arr[], int count ){ tft.setTextSize(2); tft.setTextColor(ILI9341_BLUE); for (int i=0; i<count;i++) { tft.setCursor (MainBUTTON_X + ValAUSGABE, MainBUTTON_Y * i + 15); tft.print(arr[i]); }} void printButtonProgress(int Value){ Value = Value*10*2; //Serial.println(percentage); ui.drawProgressBar(10, 220, 320 - 20, 20, Value, ILI9341_WHITE, ILI9341_RED); } void setup() { Serial.begin(9600); Serial.println("ILI9341 Test!"); tft.begin(); tft.fillScreen(ILI9341_BLUE); tft.setRotation(ILI9341_SCREEN_270); printButtonText(); } void loop(void) { uint32_t Value; for (int Counter =0 ; Counter<5; Counter++) { Value = random(0xffffff); // Zufalls Zahl erstellen printButtonValueAus(Counter,ZahlPuffer[Counter]); // Löschen des vorigen Eintrags ZahlPuffer[Counter] = Value; // Zufalls Zahl speichern. printButtonValueOn(Counter,Value); //Ausgabe der aktuellnen Zahl printButtonProgress(Counter + 1 ); // Ausgabe Progress Bar delay(500); } printButtonProgress(0); // Progressbar auf Null zurücksetzen }
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.