INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
wieder mal belebtes Haus
24.09.2017, 14:57
Beitrag #25
RE: wieder mal belebtes Haus
(24.09.2017 14:54)Ingo schrieb:  Großartig, Tommy, Danke,

werde berichten, wenn Display da ist.

Grüße Ingo
Tu das und lerne in der Zwischenzeit die Grundlagen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2017, 16:07
Beitrag #26
RE: wieder mal belebtes Haus
Hallo zusammen,

heute ist mein Display angekommen, natürlich sofort probiert.
Dabei festgestellt, irgendwo ist noch ein Fehler.
Eine Zeile aus dem Video falsch abgetippelt. Korrigierte Version anbei.

Das Bild zeigt noch den ursprünglichen Sketch aus dem Video, war für mich einfacher nach dem Fehler zu suchen.
Habe auch noch ein wenig mit den Abständen gespielt.
   
Grüße Ingo

Code:
#include <TFT.h>

//Pins zuweisen
int rst = 8;
int dc = 9;
int cs = 10;
TFT tftDisplay = TFT(cs, dc, rst);

void setup() {
    tftDisplay.begin();
    //Hintergrund schwarz füllen
    tftDisplay.background(0, 0, 0);
    //Schriftfarbe rot setzen
    tftDisplay.stroke(0, 0, 255);
    //Display ist hochkant
    tftDisplay.setRotation(0);
    
//schreib die Preise
int y = 5;
int zeilenHoehe = 28; //Pixel pro Zeile; durch Experimente ermittelt
schreibPreis(y, "LKW", "1.32");
y += zeilenHoehe;
schreibPreis(y, "Diesel", "1.33");
y += zeilenHoehe;
schreibPreis(y, "Benzin", "1.41");
y += zeilenHoehe;
schreibPreis(y, "Super", "1.41");
y += zeilenHoehe;
schreibPreis(y, "Super+", "1.47");
y += zeilenHoehe;
schreibPreis(y, "Erdgas", "0.75");
}

void schreibPreis(int y, char* beschriftung, char* preis) {
    int abstandLinksText = 5;
    
//Kraftstoffart klein schreiben
tftDisplay.setTextSize(1);
tftDisplay.text(beschriftung, abstandLinksText, y);

//Preis gross schreiben
tftDisplay.setTextSize(2);
int abstandLinksPreis = 50; //durch Experimente ermittelt
tftDisplay.text(preis, abstandLinksPreis, y);

//eine kleine 9 schreiben
tftDisplay.setTextSize(1);
int abstandLinks9 = 99; //durch Experimente ermittelt
tftDisplay.text("9", abstandLinks9, y);
}

void loop() {
    delay(10000);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2017, 16:11
Beitrag #27
RE: wieder mal belebtes Haus
Das sieht doch gut aus. Da kannst Du noch die Zufallssteuerung einbauen.
Es scheint aber kein Platz für eine Laufschrift zu sein.
Da kannst Du ja später ein anderes Display dafür nehmen an einem anderen Haus.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2017, 16:28
Beitrag #28
RE: wieder mal belebtes Haus
Hallo Tommy,

mal sehen, ob ich heute Abend noch dazu komme.
Auf jeden Fall muß zum Preiswechsel noch das Display gecleart werden, sonst wird der neue Preis über den alten geschrieben.
Für die Laufschrift verändere ich die Zeilenhöhe auf etwa 23 Pixel, dann müßte unten genug Platz sein.

Grüße Ingo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2017, 16:43
Beitrag #29
RE: wieder mal belebtes Haus
(27.09.2017 16:28)Ingo schrieb:  Hallo Tommy,

mal sehen, ob ich heute Abend noch dazu komme.
Auf jeden Fall muß zum Preiswechsel noch das Display gecleart werden, sonst wird der neue Preis über den alten geschrieben.
Für die Laufschrift verändere ich die Zeilenhöhe auf etwa 23 Pixel, dann müßte unten genug Platz sein.

Grüße Ingo
Wenn Du Laufschrift und Preisanzeige machen willst, dann solltest Du zur Änderung nicht Clear nehmen (das flackert), sondern die jeweiligen Bereiche fit fillRect mit der Hintergrundfarbe überschreiben.

Eine andere Variante ist, zuerst den alten Text nochmal mit der Hintergrundfarbe ausgeben und dann den neuen Text mit der Vordergrundfarbe schreiben.
Zumindest habe ich das am PC immer so gemacht.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2017, 17:02 (Dieser Beitrag wurde zuletzt bearbeitet: 27.09.2017 18:32 von Ingo.)
Beitrag #30
RE: wieder mal belebtes Haus
Guter Ratschlag, leider verstehe ich nur ..... Bahnhof.
Das übersteigt sicher meine Fähigkeiten.
Aber laß mich mal wursteln, hast ja sicher noch was anderes zu tun, so aktiv wie du hier bist.
Ansonsten melde ich mich noch mal.

Grüße Ingo

Hallo Tommy,

habe noch ein wenig rumgespielt. 2 Sorten Kraftstoff gelöscht, um nach unten hin Platz für die Laufschrift zu bekommen.
Leider wird diese gar nicht angezeigt. Könntest du bitte noch mal einen Blick drauf werfen ?

Code:
#include <TFT.h>
//Pins zuweisen
int rst = 8;
int dc = 9;
int cs = 10;
TFT tftDisplay = TFT(cs, dc, rst);

// wir arbeiten mit byte und tun bei der Anzeige nur so, als wären es Kommazahlen. Das spart Speicher.
uint8_t preisBasis = 132;  // = LKW
uint8_t grenzeUnten = 120, grenzeOben = 170;
uint8_t diesel = 2, benzin = 4, super = 6, superplus = 12, gas = -52; // Differenz der Kraftstoffe

char text[] = "+ Das ist der Scrolltext !"; // Scrolltext
const uint8_t laenge = 12;  //Länge des Ausschnittes

// Zeitsteuerung
uint32_t aktMillis, lastMillis;
uint32_t lastMillisScroll;
const uint32_t SCROLLINTERVALL = 1 * 1000; // Scrollabstand in Sekunden
const uint32_t INTERVALL = 3 * 60 * 1000; // das wären 3 Minuten

// uint8_t zu scheinbarem Floatstring
char *byteToFloat(uint8_t in) {
static char preisStr[5];
   preisStr[4] ='\0';
   preisStr[1] ='.';  // oder ','
   preisStr[3] = in % 10 +'0';
   in /= 10;
   preisStr[2] = in % 10 +'0';
   in /= 10;
   preisStr[0] = in % 10 +'0';
   // Serial.println(preisStr);
   return preisStr;
}
// Ausgabe eine Zeile
void schreibPreis(int y, char* beschriftung, uint8_t preisZahl) {
int abstandLinksText = 5;
char *preis = byteToFloat(preisZahl);
   Serial.print(beschriftung); Serial.print(": ");Serial.println(preis);    

   //Kraftstoffart klein schreiben
   tftDisplay.setTextSize(1);
   tftDisplay.text(beschriftung, abstandLinksText, y);

   //Preis gross schreiben
   tftDisplay.setTextSize(2);
   int abstandLinksPreis = 70; //durch Experimente ermittelt
   tftDisplay.text(preis, abstandLinksPreis, y);

   //eine kleine 9 schreiben
   tftDisplay.setTextSize(1);
   int abstandLinks9 = 120; //durch Experimente ermittelt
   tftDisplay.text("9", abstandLinks9, y);
}

//schreib die Preise
void schreibeNeu() {
int y = 5;
int zeilenHoehe = 28; //Pixel pro Zeile; durch Experimente ermittelt
// neuen Basispreis berechnen
uint8_t diff = random(6) - 3;  // 3 Cent +- Differenz
uint8_t neu = preisBasis + diff;
   if (neu < grenzeUnten || neu > grenzeOben) {
     neu = preisBasis - diff;
   }
   preisBasis = neu;
  
   schreibPreis(y, "Diesel", preisBasis + diesel);
   y += zeilenHoehe;
   schreibPreis(y, "Benzin", preisBasis + benzin);
   y += zeilenHoehe;
   schreibPreis(y, "Super", preisBasis + super);
   y += zeilenHoehe;
   schreibPreis(y, "Super+", preisBasis + superplus);
}

// Berechnen des Scrollstücks
char * scroll() {
static char stueck[laenge+1];
   uint8_t len = strlen(text);  
   char first=text[0];
   uint8_t idx = 0;
   while (text[idx++] = text[idx]);
   text[len-1]=first;
   Serial.print(">");Serial.print(text);Serial.println("<");
   strlcpy(stueck,text,laenge+1);
   return stueck;
}

void setup() {
   Serial.begin(115200);
   Serial.println("Start");

   tftDisplay.begin();
   //Hintergrund schwarz füllen
   tftDisplay.background(0, 0, 0);
   //Schriftfarbe rot setzen
   tftDisplay.stroke(0, 0, 255);
   //Display ist hochkant
   tftDisplay.setRotation(0);

   Serial.print("Text: >");Serial.print(text);Serial.print("< Laenge: ");Serial.println(laenge);

   randomSeed(analogRead(A0));  // unbenutzter Analogeingang  
   schreibeNeu();
}


void loop() {
   aktMillis = millis();
   if (aktMillis - lastMillis >= INTERVALL) {
     lastMillis = aktMillis;
     schreibeNeu();
   }
   if (aktMillis - lastMillisScroll >= SCROLLINTERVALL) {
     lastMillisScroll = aktMillis;
     Serial.println(scroll());
   }
}

Grüße und Danke
Ingo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2017, 20:31
Beitrag #31
RE: wieder mal belebtes Haus
Bei Serial.println(scroll()); am Ende vom Loop musst Du das natürlich auf Dein TFT ausgeben.
Also sowas:
Code:
// rechteck löschen
   tftDisplay.setStroke(0,0,0);
   tftDisplay.fillRectangle(...); // Hier musst Du mal in der Lib nach den Parametern schauen
   tftDisplay.setStroke(0,0,255);
   tftDisplay.setTextSize(1);
   tftDisplay.text(scroll(), abstandLinksText, y);
Nur grob, da ohne TFT.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2017, 10:00
Beitrag #32
RE: wieder mal belebtes Haus
Hallo Tommy,

bin ein wenig weiter.
Der Preiswechsel funktioniert jetzt sauber.

Zitat:Eine andere Variante ist, zuerst den alten Text nochmal mit der Hintergrundfarbe ausgeben und dann den neuen Text mit der Vordergrundfarbe schreiben.

Dies hat gut funktioniert.
Den Scrolltext habe ich auch auf dem Display, vor jedem Schriftwechsel wie oben den Bildschirm "gelöscht". Allerdings führt das zu einer blinkenden Laufschrift.
Schade, das man hier kein Video reinstellen kann.
Ich habe der Übersichtlichkeit halber immer erst mit den Codeschnipsel gearbeitet,
anbei mal der von der Laufschrift.

Code:
#include <TFT.h>

//Pins zuweisen
int rst = 8;
int dc = 9;
int cs = 10;
TFT tftDisplay = TFT(cs, dc, rst);

char text[] = "+ Das ist der Scrolltext !"; // Scrolltext
const uint8_t laenge = 12;  //L�nge des Ausschnittes
uint32_t aktMillis, lastMillis, SCROLLINTERVALL = 1 * 1000; // Scrollabstand in Sekunden

// Berechnen des Scrollst�cks
char * scroll() {
static char stueck[laenge+1];
   uint8_t len = strlen(text);  
   char first=text[0];
   uint8_t idx = 0;
   while (text[idx++] = text[idx]);
   text[len-1]=first;
   // Serial.print(">");Serial.print(text);Serial.println("<");
   strlcpy(stueck,text,laenge+1);
   return stueck;
}
void setup() {

tftDisplay.begin();
  //Hintergrund schwarz füllen
  tftDisplay.background(0, 0, 0);
  //Schriftfarbe rot setzen
  tftDisplay.stroke(0, 0, 255);
  //Display ist hochkant
  tftDisplay.setRotation(0);


  
   Serial.begin(115200);
   Serial.println("Start");
   Serial.print("Text: >");Serial.print(text);Serial.print("< Laenge: ");Serial.println(laenge);
}

void loop() {
   aktMillis = millis();
   if (aktMillis - lastMillis >= SCROLLINTERVALL) {
     lastMillis = aktMillis;
     Serial.println(scroll());

// Bildschirm löschen und neue Ausgabe

//Hintergrund schwarz füllen
  tftDisplay.background(0, 0, 0);
  //Schriftfarbe schwarz setzen
  tftDisplay.stroke(0, 0, 0);

//Hintergrund schwarz füllen
  tftDisplay.background(0, 0, 0);
  //Schriftfarbe rot setzen
  tftDisplay.stroke(0, 0, 255);

    tftDisplay.stroke(0,0,0);
    tftDisplay.stroke(0,0,255);
    tftDisplay.setTextSize(2);
    int abstandLinksText = 10;
    int y = 140;
    tftDisplay.text(scroll(), abstandLinksText, y);
    
   }
}

Kannst du da noch was optimieren oder hast eine andere Lösung ???

Grüße Ingo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  wieder mal serielle Kommunikation Rettungsmaus 12 5.246 15.10.2014 18:47
Letzter Beitrag: Rettungsmaus

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste