1,8 Zoll OLED - Display

Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

1,8 Zoll OLED - Display

Beitrag von e69-fan »

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.
Tanke_0.jpg
Tanke_0.jpg (16.17 KiB) 1302 mal betrachtet

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);
}
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
Dateianhänge
Tankejpg.jpg
Tankejpg.jpg (31.47 KiB) 1302 mal betrachtet
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: 1,8 Zoll OLED - Display

Beitrag von Admin »

Ja, morgen rücke ich ein in der Lungenklinik, im Schlaflabor mal wieder. Aber ich denke am Donnerstag Mittags fahre ich warscheinlich wieder Nachhause. Es werden wohl nur Einstellungen an der Atemmaske geändert. Die erste Nacht ist Schlafen im Schlaflabor mit Überprüfung und Optimierung der Einstellungen. Dann Mittwoch wird wohl wieder ein Untersuchungstag und dann eine Nacht im Patientenzimmer mit den neuen Enstellungen meines Gerätes. Dann am Donnertag nochmal Besprechung und hoffentlich wieder Entlassung.

Wegen der SPI Displays. Ich werde mir demnächst auch mal eines Holen. Aber lieber was größeres, denn kleine Oleds habe ich ja schon. Die Spritpreise am Display sind wohl Wunschpreise :(o): :(o):

Mal schauen. Jetzt bringe ich erst mal das Schlaflabor hinter mich.

Schöne Grüße an euch Beide
Franz
Benutzeravatar
Franz54
Beiträge: 56
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82441 Ohlstadt / Garmisch
Kontaktdaten:

Re: 1,8 Zoll OLED - Display

Beitrag von Franz54 »

Du, kannst du mir mal schreiben, wie der Buchtitel war, von deinen arduino buch, das du mir mal da gelassen hast. Muss mal schauen ob ich es mir besorge. Ich komme übrigens offenbar morgen schon wieder heim. :(oo):
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: 1,8 Zoll OLED - Display

Beitrag von e69-fan »

Hey super,

:(V):

der Schinken kostet ca. 30.-€ und war ein Geschenk. Du kannst das Buch gerne solange Du willst - ausleihen.

Wenn´s pressiert - morgen bei der Heimfahrt bei mir abholen. Ich bin zu Hause.

Kopf hoch und "Schlaf gut" - Kissen vom Zimmer mitnehmen. :lol: :lol:

Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: 1,8 Zoll OLED - Display

Beitrag von Admin »

Das hat Zeit. Ich bin heute seeeeeeehr müde, weil die Nacht eher Stress als Ausruhen war.
Aber were schon gut, wenn ich da vorher nochmal die Nase reinhalten kann, um genauer nachzusehen, welche Themen im Buch interessant sind, also ob es sich lohnt, es zu kaufen. Ich lese ja die Bücher nicht durch, sondern schlage nach, wenn ich was bestimmtes wissen will.

Ich denke am Wochenenende wäre ein gute Zeit :(oo):

Bis dann, danke
Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: 1,8 Zoll OLED - Display

Beitrag von Admin »

Morgen Nachmittag hat die Irmi das Auto, aber am Vormittag könnte ich noch zu dir düßen. So um 11:00 Uhr denke ich. Wäre das OK ?

Schönes Wochenende
Franz

Aber hat ja keine Eile, wenns Samstag nicht so toll ist, dann eben unter der Woche am späten Nachmittag. :(V):
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: 1,8 Zoll OLED - Display

Beitrag von e69-fan »

Hallo Franz,
Damit könnte man ein paar verrückte Sachen machen wie z.B. ein Servo beim niedrigsten Preis stellen.

Ist es möglich den Sketch so zu ändern:
dass beim niedrigsten Dieselpreis ein Servo geschalten wird. (LKW tankt immer am billigsten)

Code: Alles auswählen

/*
 * Steuerungsprogramm für die Tankanzeige der Aral-Tankstelle 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  (wenn aktiviert, Vorwiderstand nicht vergessen!! und Zeile 87 auch aktivieren
//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);
 
   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, 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; 
  tft.setCursor(abstandLinksPreis, y);
  tft.print(preis);
  
  //eine kleine 9 schreiben
  tft.setTextSize(1);
  int abstandLinks9 = 120; 
  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;     
                        
  // 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 Wochenende - Wolfgang
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: 1,8 Zoll OLED - Display

Beitrag von Admin »

Ich habe jetzt mal deine Änderung eingebaut. Es gibt jetzt oben in der Deklaration einen Punkt "MPG" steht für Mindest Grund Preis. Bei Diesel kommen auf den Preis noch Cent drauf. Und wenn der Grundpreis kleiner MPG ist, dann ist der Pin.7 HIGH wenn nicht, dann ist er wieder LOW

Code: Alles auswählen

/*
   Steuerungsprogramm für die Tankanzeige der Aral-Tankstelle 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

   SPI Display
   VCC - GND - CS - Reset - A0 - SDA - SCK - LED

*/
// 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
#define MinPreis       7
#define MGP           93
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// Pin fuer die LEDs in der Tankstelle  (wenn aktiviert, Vorwiderstand nicht vergessen!! und Zeile 87 auch aktivieren
//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"));
  pinMode(MinPreis, OUTPUT);       // Pin 7

  //Juergens Display
  tft.initR(INITR_BLACKTAB);

  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, 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;
  tft.setCursor(abstandLinksPreis, y);
  tft.print(preis);

  //eine kleine 9 schreiben
  tft.setTextSize(1);
  int abstandLinks9 = 120;
  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;

  // 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;
  Serial.println(F("#################"));
  Serial.println(F("Neuer Basispreis:"));
  Serial.println(neu);
  // Hier wird der Niedrigpreis ermittelt
  // Wenn günstig dann Pin. 7 auf "HIGH"
  if (neu < MGP) {
    digitalWrite (MinPreis, HIGH);
  }
  else {
    digitalWrite (MinPreis, LOW);
  }

  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);
}
Hier im Bild leuchtet die Grüne LED, weil Pin.7 HIGH ist. Also weil der Grundpreis niedrig (unter 93) ist.
.
Tankstellen Schild.jpg
Tankstellen Schild.jpg (210.22 KiB) 1287 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1196
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: 1,8 Zoll OLED - Display

Beitrag von Admin »

Ich habe mir die Krimpzange, die Stecker und das Buch bestellt. :(oo): Nur diese Displays habe ich noch nicht. 2-3 Stück möchte ich mir auch holen. So kleine farbige Displays sind nicht schlecht, wenn man da welche für alle Fälle in der Hinterhand hat. :(V):
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: 1,8 Zoll OLED - Display

Beitrag von e69-fan »

Hallo Franz,

dann hat sich ja Dein Besuch gelohnt.


Hast Du mal den Link im Programm angesehen ?

http://www.barth-dev.de/online/rgb565-color-picker/

Schönen Sonntag
Grüße aus der Heimat der E69
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 5 Gäste