Forum: Mikrocontroller und Digitale Elektronik LCD Claer part of output


von Martin M. (ats3788)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Martin M. (ats3788)


Lesenswert?

Und was machst das ?
tft.print("            ");

von HG (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Martin M. (ats3788)


Lesenswert?

Hallo
Ich habe zu dem Thema was gutes informatives gefunden
http://matthewcmcmillan.blogspot.de/2014/01/arduino-improving-refresh-rate-of-tft.html

von Martin M. (ats3788)


Lesenswert?

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
Noch kein Account? Hier anmelden.