Koden virker på min Arduino Uno. Men jeg prøver lige igen i eftermiddag.
Har du hentet U8glib.h og installeret det?
Klaus
Koden virker på min Arduino Uno. Men jeg prøver lige igen i eftermiddag.
Kopierede alt ind fra det jeg har postet, det virker på min Arduino Uno.
Så skal det nok virke....
Kode: Vælg alt
// Zugzielanzeiger für Bahnsteige, KDM Version 14
//
//In Stummiforum (https://stummiforum.de/viewtopic.php?f=21&t=131472) hat Tobias siener Sketch teilt.
//
//Ich hab mehrere änderungen hingeführt und hier ist meiner version "Zugzielanzeiger für den Bahnsteig mit Arduino"
//
//Noten:
//
//
//Umlaute ersetzten laut folgender Chiffre:
//ä = \xE4
//ö = \xF6
//ü = \xFC
//ß = \xDF
//Ä = \xC4
//Ö = \xD6
//Ü = \xDC
//Würzburg ist daher W\xFCrzburg
//Verspätung ist daher Versp\xF4tung
//Dänisch:
//æ = \xE6
//ø = \xF8
//å = \xE5
//Æ = \xC6
//Ø = \xD8
//Å = \xC5
//Alle charakteren at: http://www.codetable.net/unicodecharacters
#include <U8glib.h>
U8GLIB_SSD1306_128X32_2X u8g(U8G_I2C_OPT_NONE);
int count = 0;
unsigned long previousMillis = 0; // Speichern letzte zeit der anziege hat sich geändert
const long interval = 31500; // interval zwischen änderungen (milliseconds)
int varianten = 7; // anzahl varianten
char gleis[5];
char uhrzeit[][6]{ // [6] ist anzahl ziffern
"09:34",
"10:04",
"12:53",
"15:21",
"17:02",
"18:30",
"21:45"
};
char zugnummer[][8]{// [8] ist anzahl charakteren
"RB 1521",
"RB 3237",
"EC 172",
"ICE 592",
"IC 602",
"RE 7",
"ICE 651",
};
char ziel[][17]{// [17] ist anzahl charakteren
"Aschaffenburg",
"Plattling",
"Hamburg - Altona",
"Berlin Ostbf",
"Puttgarden",
"Kiel / Flensburg",
"Leipzig Hbf",
};
char zuglauf1[][21]{ //[21] ist anzahl charakteren
"Grossauheim - Kahl,",
"Freising - Moosburg",
"Berlin Hbf - ",
"Fulda - Kassel -",
"Wuppertal - Dortmund",
"Elmshorn - ",
"Fulda - Eisenach"
};
char zuglauf2[][21]{ //[21] ist anzahl charakteren
"- Grosskrotzenburg",
"- Landshut",
"Hamburg Hbf",
"Braunschweig Hbf",
"Bremen - Hamburg",
"Ne\xFCmunster",
""
};
char wagenstand[][9]{//[9] ist anzahl charakteren
"",
"",
"-222211",
"11111",
" 22111",
" 2121",
"111211"
};
char lauftext[][85]{ //[85] ist anzahl charakteren, mindstens 20 leerzeichnen um die lauftext zu haben
"",
"",
" Versp\xF4tung ca 10 Min",
"",
"",
" Zugteilung in Ne\xFCmunster - Vorne zugteil fahrt bis Flensburg ",
""
};
const unsigned int lauftextlength = 21;
int offset = 0;
int subset = 0;
char ausgabe[lauftextlength];
char incomingByte = 0;
unsigned int incomingBytePosition = 0;
enum ReceiveState
{
ReceiveState_Idle,
ReceiveState_Hash,
ReceiveState_Lauftext,
ReceiveState_Gleis,
ReceiveState_Wagenstand,
ReceiveState_Zuglauf1,
ReceiveState_Zuglauf2,
ReceiveState_Ziel,
ReceiveState_Uhrzeit,
ReceiveState_Zugnummer
};
ReceiveState currentState = ReceiveState_Idle;
enum GleisSeite
{
GleisSeite_Links,
GleisSeite_Rechts
};
GleisSeite gleisSeite = GleisSeite_Rechts; // definiert der layout der zugzielanzieger
void draw()
{
u8g.setColorIndex(1);
static int zugdatenSaplte = 0;
if(gleisSeite == GleisSeite_Links)
{
zugdatenSaplte = 100;
}
else if(gleisSeite == GleisSeite_Rechts)
{
zugdatenSaplte = 0;
}
u8g.setFont(u8g_font_5x8); // 5x8
u8g.drawStr(zugdatenSaplte, u8g.getFontAscent(), uhrzeit[count]);
u8g.setFont(u8g_font_4x6); // 4x6
u8g.drawStr(zugdatenSaplte, 7 + u8g.getFontAscent(), zugnummer[count]);
if(strlen(wagenstand[count]) > 0)
{
u8g.setColorIndex(1);
u8g.setFont(u8g_font_4x6); // 4x6
u8g.drawStr(zugdatenSaplte, 15 + u8g.getFontAscent(), "ABCDEFG");
u8g.drawBox(zugdatenSaplte, 21 + u8g.getFontAscent() - 5, strlen(wagenstand[count]) * 4, 6);
u8g.setColorIndex(0);
u8g.drawStr(zugdatenSaplte, 21 + u8g.getFontAscent(), wagenstand[count]);
u8g.setColorIndex(1);
}
static int zuglaufSpalte = 30;
if(gleisSeite == GleisSeite_Links)
{
zuglaufSpalte = 20;
}
else if(gleisSeite == GleisSeite_Rechts)
{
zuglaufSpalte = 30;
}
//Verspätungsbox
if(lauftext[count][20] != '\0')
{
u8g.setColorIndex(1);
u8g.drawBox(zuglaufSpalte, 0, 78, 6);
u8g.setColorIndex(0);
u8g.setFont(u8g_font_4x6); // 4x6
int remaining = strlen(lauftext[count]) - offset;
if(remaining > (lauftextlength - 1))
{
remaining = lauftextlength - 1;
}
memcpy(ausgabe, &lauftext[count][offset], remaining);
ausgabe[remaining] = '\0';
u8g.drawStr(zuglaufSpalte-subset, 6, ausgabe);
u8g.setColorIndex(1);
}
u8g.drawStr(zuglaufSpalte, 12, zuglauf1[count]);
u8g.drawStr(zuglaufSpalte, 19, zuglauf2[count]);
u8g.setFont(u8g_font_tpss);
u8g.drawStr(zuglaufSpalte, 34 + u8g.getFontDescent(), ziel[count]);
u8g.setFont(u8g_font_6x13B);
if(gleisSeite == GleisSeite_Links)
{
u8g.drawStr(0, 13, gleis);
}
else if(gleisSeite == GleisSeite_Rechts)
{
u8g.drawStr(128 - (6 * strlen(gleis)), 13, gleis);
}
}
void initializeStrings()
{
String("9").toCharArray(gleis, 5); // Gleisnummer eigeben
}
void setup()
{
initializeStrings();
u8g.begin();
u8g.setContrast(150); // Kontrast eingeben
u8g.setRot180(); // anzeige 180 grad rotieren.
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Speichern letzte zeit der anziege hat sich geändert
count = (count+1);
}
if (count>(varianten-1)){
count = 0;
}
// delay(1500);
else{
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
subset += 1;
if(subset > 3)
{
offset += 1;
subset = 0;
}
if(offset > strlen(lauftext[count]))
{
offset = 0;
}
}
}
hejsa. klaus
Er den eller kan man lave så den skifter på en en knap eller en knap til hver "billede"
//Søren
Det tror jeg godt at man kan gøre.
Skal jeg prøve at lave det?
Klaus
:-)
Det kunne da værer godt.. og især hvis den kan blive på forskellige knapper,
i det, det så kan smides sammen med en dekoder, så man selv kan styre hvad der komme på displayet.
:-)
Jeg ved ikke hvor mange man kan have 8, 12 eller 16 mulige, vil jo gå op med dekoder systemet da der jo er 4 eller 8 normalt ,
Samtid med at man kan styre hvad der skal vises, vil man jo kunne kombiner det med højtaler udkald der passer til det på skærmen.
//Søren
Groft sagt, ville det smarteste nok være at bygge en DCC dekoder ind i programmet.
Meeeeeen, det går vidst over mine evner lige nu.
Jeg vil give det et skud med kontakter (ikke trykknapper).
Klaus
Det ser godt nok godt ud :-)
Tænk, hvad det kunne blive til med Railcom-tilbagemelding, så skiltet automatisk skiftede til det tog, der ankommer eller holder på perronen for afgang...
VH Kresten