ARDUINO Bahnsteigsanzeige Prinzipschaltung für 2 Zuganzeigen
Auf
Gleis 2 fährt ein D64 nach Hamburg |
Erforderliche
Bauteile: ARDUINO UNO mit einem Steckbord (auch Breadboard genannt) OLED DISPLAY SSD1306 128x32 SPI 2 Mikrotaster, 2 x 1kOhm Widerstände, etwas Schaltdraht |
Wäre es nicht schön eine
kleine Anzeige auf Bahnsteigen zu haben, auf der zu Zuganzeige zu sehen ist? |
Für dieses Beispiel verwenden wir ein OLED-Display (OLED = Organic Light Emetting Diod, also organisch Licht emittierende Diode). Typ: SSD1386, 128x32 SPI, mit einer Anzeigegröße von nur 0,91", damit es gegebenenfalls auch an einem H0-Bahnsteig eingebaut werden kann. Ebenso kann eine solche Anzeige auch auf dem Stelltisch, z.B. innerhalb eines Gleisbildstellwerks, verbaut werden. Siehe beispielsweise unter https://www.adafruit.com/search?q=SSD1386%2C+128x32+SPI |
Beachte: es wird hier ein ein OLED-Display mit der Bezeichnung "SPI" verwendet! Es gibt dieses Display auch mit der Bezeichnung "I2C" (sprich: i Quadrat C); welches für dieses Programm hier nicht funktionieren würde! (anders anzuschließen). |
Abb. des Programms "Fritzing" |
Die
Schaltung Der Schaltungsaufbau ist denkbar einfach und kommt mit äußerst wenigen Bauteilen aus: - 1x SSD1386, 128x32 SPI 0,91" Die Software
es werden einige Libraries (=Bibliotheken)
benötigt. Die IDE vom ARDUINO beinhaltet bereits die wesentlichsten, sofern
nicht, können sie via Internet beschafft werden; wie beispielsweise: Weitere
Informationen zum Thema Library (Bibliothek) siehe unter: |
Die Bedienung Wenn der Sketch (das Programm) im ARDUINO geladen ist, startet das Programm automatisch. Ausschalten: einfach die Stromversorgung unterbrechen. Einschalten: einfach Stromversorgung anschließen. Display startet im Grundzustand mit der Anzeige: Gleis 2 ----------------------- Taster TaA: Anzeige für den Personenzug P23 nach Pasing; Anzeige: Gleis 2 P23 ----------------------- Pasing Taster TaB: Anzeige für den D-Zug D64 nach Hamburg; Anzeige: Gleis 2 D64 ------------------------ Hamburg Gleichzeitiges Betätigen der Taster TaA und TaB: Anzeige wird gelöscht; Anzeige: Gleis 2 ----------------------- Beachte auch die Hinweise "Serail-Monitor" und "Hyper-Terminal" unter ARDUINO => Grundlagen => Grundlagen der Programmierung auf diesen Seiten! |
Das Programm (Sketch)
//
HJB-Zuganzeige_OLED128x32SPI_UNO // Zuganzeige (Bahnsteigsanzeige) COM 11 <= je nach PC-Verbindung unterschiedlich // Taster Digital I/O Monitor mit OLED-Display // nach Programmstart bitte den Serail-Monitor zur Anzeige auf dem PC starten! // _________________________________________________________________ // DEFINITIONEN OLED-Display #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // Wenn SPI Software verwendet wird (ist der Standardfall): #define OLED_MOSI 9 // Pin-Nr. gilt fuer ARDUINO UNO! #define OLED_CLK 10 // Pin-Nr. gilt fuer ARDUINO UNO! #define OLED_DC 11 // Pin-Nr. gilt fuer ARDUINO UNO! #define OLED_CS 12 // Pin-Nr. gilt fuer ARDUINO UNO! #define OLED_RESET 13 // Pin-Nr. gilt fuer ARDUINO UNO! Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); /* dieser Block ist auskommentiert, wenn SPI-Hardware verwendet wird: #define OLED_DC 6 #define OLED_CS 7 #define OLED_RESET 8 Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS); */ #define NUMFLAKES 10 #define XPOS 0 #define YPOS 1 #define DELTAY 2 // Definiere Taster int A = 7; // definiert I/O-Eingang 2 als Ganzzahl fuer die Variable A int B = 8; // definiert I/O-Eingang 3 als Ganzzahl fuer die Variable B int TaA; // Variable zum Speichern des Eingangssignals als Ganzzahl (Taste A) int TaB; // Variable zum Speichern des Eingangssignals als Ganzzahl (Taste B) // Definiere Start int Start; // _________________________________________________________________ // SETUP-ROUTINE (wird nur einmal beim Programmstart durchlaufen) void setup() { // für OLED-Display Serial.begin(9600); // Vorgabewert ist +3,3V, erforderlich! display.begin(SSD1306_SWITCHCAPVCC); // Initialisierung beendet // Puffer loeschen. display.clearDisplay(); // für Taster pinMode(A, INPUT); // definiert den Pin fuer Taste A als Eingang pinMode(B, INPUT); // definiert den Pin fuer Taste B als Eingang Serial.begin(9600); // definiert die serielle Schnittstelle mit der Baudrate 9600 // Anfangsvariable für Start setzen Start=0; } // _________________________________________________________________ // HAUPTPROGRAMM (Programmablauf in einer Endlosschleife) // Schleifen-Start void loop() { // für Taster TaA=digitalRead(A); // Uebergibt den gemessenen Wert am Digitaleingang 2 der Variablen TaA TaB=digitalRead(B); // Uebergibt den gemessenen Wert am Digitaleingang 3 der Variablen TaB if(Start==0) { Serial.write(27); Serial.println("[01;40H"); Serial.println(" "); Serial.print(" "); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Gleis 2 "); // display.setTextColor(BLACK, WHITE); // invertierter Text display.println("------------------"); display.setTextSize(2); display.setTextColor(WHITE); display.setTextColor(BLACK, WHITE); // invertierter Text display.println(" "); display.display(); delay(500); display.clearDisplay(); } // Ende 1-maliger Durchlauf beim Start, setzt Display in den Anfangszustand Start=1; if(TaA==1 & TaB==0) { Serial.write(27); Serial.println("[01;40H"); Serial.print("Gleis 2"); // Text auf Monitor, wenn Ta A gedrueckt ist Serial.println(" P23"); Serial.print("Pasing"); // OLED-Display display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Gleis 2 P 23"); // display.setTextColor(BLACK, WHITE); // invertierter Text display.println("------------------"); display.setTextSize(2); display.setTextColor(WHITE); display.setTextColor(BLACK, WHITE); // invertierter Text display.println(" Pasing "); display.display(); delay(500); display.clearDisplay(); } if(TaA==0 & TaB==1) { Serial.write(27); Serial.println("[01;40H"); Serial.print("Gleis 2"); // Text auf Monitor, wenn Ta A gedrueckt ist Serial.println(" D64"); Serial.print("Hamburg"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Gleis 2 D 64"); // display.setTextColor(BLACK, WHITE); // invertierter Text display.println("------------------"); display.setTextSize(2); display.setTextColor(WHITE); display.setTextColor(BLACK, WHITE); // invertierter Text display.println(" Hamburg "); display.display(); delay(500); display.clearDisplay(); } if(TaA==1 & TaB==1) // loescht Anzeige auf dem Monitor { Serial.write(27); Serial.println("[01;40H"); Serial.println(" "); Serial.print(" "); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Gleis 2 "); // display.setTextColor(BLACK, WHITE); // invertierter Text display.println("------------------"); display.setTextSize(2); display.setTextColor(WHITE); display.setTextColor(BLACK, WHITE); // invertierter Text display.println(" "); display.display(); delay(500); display.clearDisplay(); } delay(500); // verzoegert, bis ein neuer Wert angezeigt werden kann Serial.print('\r'); } // Schleifen-Ende und Ruecksprung zum Schleifen-Start // _________________________________________________________________ |
einige zusätzliche Erklärungen
zu linken Listing Von mir hier grau hinterlegter Text sind Anweisungen, welche bei dem hier verwendeten Display nicht zur Anwendung kommen! Bemerkung: im links stehenden Listing sehen Sie Text in Farbe; dies wird so in einem Programm Namens "Fritzing" dargestellt. Auf diese Weise ist ein Listing übersichtlicher. Das Programm Fritzing wird an anderer Stelle vorgestellt. Bei ARDUINO IDE wird ein Listung ebenfalls farbig dargestellt, doch nicht so detailliert, wie bei Fritzing. Bemerkung: da Programmierungen i. A. in englischer Sprache erfolgt, kennen die meisten Editoren keine Umlaute; verwendet man sie dennoch, so werden Hieroglyphen dargestellt. Um dies zu vermeiden, habe ich hier in den Kommentarzeilen für "Ä" = "Ae", "ä" = "ae", "ö" = "oe", usw. gesetzt; ebenso "ß" = "ss". Wenn Start = 0, dann wird das Display in einen Anfangszustand gesetzt ("gelöscht"). die Anzahl der Leerzeichen (".......") ist abhängig von der Anzahl der Zeichen, welche im Display weiter unten im Listing zur Anzeige kommen sollen. "Gleis 2" [kann individuell geändert werden] Personenzug "P23" [kann individuell geändert werden] nach "Pasing" [kann individuell geändert werden] [kann individuell geändert werden] [kann individuell geändert werden] "Gleis 2" [kann individuell geändert werden] D-Zug "D64" [kann individuell geändert werden] nach "Hamburg" [kann individuell geändert werden] [kann individuell geändert werden] [kann individuell geändert werden] (".......") Leerzeichen eventuell anpassen, wenn Text im Listing geändert wird; "Pasing", "Hamburg"; Anzahl der Buchstaben! (".......") Leerzeichen eventuell anpassen, wenn Text im Listing geändert wird; "Pasing", "Hamburg"; Anzahl der Buchstaben! |
Anmerkung: |