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