1,8 Zoll OLED - Display
Verfasst: So 7. Nov 2021, 09:13
Hallo Franz,
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.
Damit könnte man ein paar verrückte Sachen machen wie z.B. ein Servo beim niedrigsten Preis stellen.
Schönes Restwochenende und ich drücke Dir die Daumen für nächste Woche
Servus - Wolfgang
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