ich habe diese Woche 3 Stück von diesen Displays für weniger als 10.- € als Tagesangebot bekommen.
https://www.az-delivery.de/collections/ ... ft-display
DC - Car Kollegen haben damit eine Preistafel für Tankstellen mit Preisschwankungen im Sketch aufgebaut.
Code: Alles auswählen
/*
 * Steuerungsprogramm für die Tankanzeige der Araltankstelle von Juergen
 * Idee und erster Entwurf: Juergen
 * Anpassungen fuer Lauftext: Dominik
 * © Juergen und Dominik 2021
 * 
 * Pinout Nano:
 * VCC = 5v GND = GND CS = D10
 * RST = D8 DC = D9 SDA = D11 SCK = D13 LED = 3,3V
 * 
 * Pinout Mega:
 * DC = 8   RST = 9   SDA = 51   SCK = 52
 * CS = 10  VCC = 5V  LED = 3,3V
 * 
 * 
 */
// Laden der notwendigen Bibliotheken
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
// Definieren der PINs fuer das Display
#define TFT_CS        10
#define TFT_RST        8 // Or set to -1 and connect to Arduino RESET pin
#define TFT_DC         9
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// Pin fuer die LEDs in der Tankstelle
int led = 3;
// Definition der Texte und Werte
const String lauftext = "  Angebote:  Bockwurst im Brot 3,20   ***   Kaffee + Kuchen 2,20   ***   Wagenpflege 5,60   ***   Handpolitur 18,95   ***"; // Scrolltext
const uint8_t width = 24;  //Länge des Ausschnittes
int offset = 0;
// wir arbeiten mit byte und tun bei der Anzeige nur so, als wären es Kommazahlen. Das spart Speicher.
uint8_t preisBasis = 93;  // = LKW
uint8_t grenzeUnten = 85, grenzeOben = 132;
uint8_t diesel = 2, benzin = 4, super = 6, superplus = 12, gas = -52; // Differenz der Kraftstoffe 
/*
 *  Definieren der Farbe fuer den Hintergund und den Vordergrund 
 *  Onlinetool zum umrechnen der Farbwerte
 *  http://www.barth-dev.de/online/rgb565-color-picker/
 *  
 */
//uint16_t TFT_BLUE = 0210; // Hintergrundfarbe
//Zum verwenden die nachfolgenden Zeilen aktivieren.
word RGBtoColor( byte R, byte G, byte B)
{
  return ( ((R & 0xF8) << 8) | ((G & 0xFC) << 3) | (B >> 3) );
}
uint16_t TFT_BLUE = RGBtoColor(65, 105, 225);
// Zeitsteuerung
uint32_t aktMillis, lastUpdatePreise, lastUpdateScrollText;
//const uint32_t INTERVALL = 12 * 15000UL;  // das wären 3  Minuten
const uint32_t INTERVALL = 60000;           // das waere 1  Minute
const uint32_t SCROLLINTERVALL = 250;       // Scrollabstand in Milli-Sekunden 1000 = 1 Sekunde
void setup(void) {
    
  Serial.begin(9600);
  Serial.println(F("Hello. I´m the display of your gasstation"));
  //Juergens Display
  tft.initR(INITR_BLACKTAB);
  //Mein Testdisplay:
  //tft.initR(INITR_144GREENTAB);
  tft.setRotation(2);                   //DREHEN DES DISPLAYS um 180° mit (0) oder (2)
  tft.setSPISpeed(40000000);
  tft.setTextWrap(false);
  
  
  tft.fillScreen(TFT_BLUE);
  
  Serial.println(F("Display started"));
  Serial.print("Text: >");Serial.print(lauftext);Serial.print("< Laenge: ");Serial.println(width);
  randomSeed(analogRead(A0));  // unbenutzter Analogeingang  
  schreibeNeu();
}
void loop() {
  digitalWrite(3,HIGH);
  aktMillis = millis();
  if (aktMillis - lastUpdatePreise >= INTERVALL) {
    lastUpdatePreise = aktMillis;
    schreibeNeu();
  }
  // Zeichnen des Rahmens um den Lauftext
  tft.drawRect(0,116,tft.width(),13,ST7735_WHITE); // x, y, weite, hoehe, Farbe
  //Lauftext ausgeben
  if (aktMillis - lastUpdateScrollText >= SCROLLINTERVALL) {             
    lastUpdateScrollText = aktMillis;
    //Serial.println(scroll());
    if(offset<lauftext.length()){
      offset++;
      scrollText(offset);
    }else{
      offset = 0;
    }
  }
  // Gute Fahrt
  tft.setTextSize(2);
  tft.setCursor(0, 140);
  tft.print("Gute Fahrt!");
}
//Scrolltext erstellen und ausgeben
void scrollText(int offset){
    String t = "";
      t = lauftext.substring(offset, offset + width-1);
      // Print the string for this iteration
      tft.setCursor(3, 119);
      tft.fillRect(1,118,tft.width()-2,10,TFT_BLUE);  // x, y, weite, hoehe, Farbe
      tft.setTextSize(1);
      tft.print(t);
      //delay(0.1);
  
}
// 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, const char* beschriftung, uint8_t preisZahl) {                                         // 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
  tft.setTextSize(1);
  tft.setCursor(abstandLinksText, y);
  tft.print(beschriftung);
  
  //Preis gross schreiben
  tft.setTextSize(2);
  int abstandLinksPreis = 70; //durch Experimente ermittelt
  tft.setCursor(abstandLinksPreis, y);
  tft.print(preis);
  
  //eine kleine 9 schreiben
  tft.setTextSize(1);
  int abstandLinks9 = 120; //durch Experimente ermittelt
  tft.setCursor(abstandLinks9,y);
  tft.print("9");
}
//schreib die Preise
void schreibeNeu() {
//Hintergrund schwarz füllen
  tft.fillScreen(TFT_BLUE);
  tft.setTextColor(ST7735_WHITE);
  int y = 10;
  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);
}
Schönes Restwochenende und ich drücke Dir die Daumen für nächste Woche
Servus - Wolfgang
