Hallo Franz,
ich habe den Sketch ein bisschen übersichtlicher formatiert und beim kompilieren wird mir folgende Warnung ausgegeben:
C:\Users\Internet\Documents\Arduino\Tankanzeige_mit_LED\Tankanzeige_mit_LED.ino: In function 'void loop()':
C:\Users\Internet\Documents\Arduino\Tankanzeige_mit_LED\Tankanzeige_mit_LED.ino:121:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if (offset < lauftext.length()) {
~~~~~~~^~~~~~~~~~~~~~~~~~~
Code: Alles auswählen
/* Tankanzeige mit LED
* Anpassungen für DC-Car "tanken wenn am billigsten" by e69-fan
*
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 ====================================================================== //
#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 // Kontakt bei Tiefpreis xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //
#define MGP 93 // tiefster Preis bei (93) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //
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 der Displayanzeige ========================================================== //
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
// ============================ setup ===================================================================================== //
// ============================ setup ===================================================================================== //
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();
}
// ============================ loop ====================================================================================== //
// ============================ loop ====================================================================================== //
void loop() {
//digitalWrite(3,HIGH); // LED`s in der Tankstelle
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) {
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");
}
// schreibe 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 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //
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 xxxxxxxxxxxxxxxxxxxxx //
// 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);
}
Im Sketch mit dem Du gearbeitet hast war auch noch ein Fehler vom Urheber:
void schreibPreis(int y, char* beschriftung, uint8_t preisZahl) {
ist abgeändert um const char auf:
void schreibPreis(int y, const char* beschriftung, uint8_t preisZahl) {
Ich mache mir mal ein paar krumme Gedanken, wie es mit der Tanke weitergeht - Servus