I wanted to create a running schedule board that would list the destination and the time it would arrive at the station (no correlation with any train automation). I used the Lego train station currently available to buy and incorporated the OLED into the station in two locations.
I took what I know from coding a basic 12c OLED screen 128x32 pixel which gives you four lines of text at size 1 for the Adafruit GFX. I took a basic Arduino Nano board, a breadboard, and jumper wires to connect to the 12c OLED board. You can use an Uno as well for this, but I had an extra Nano board around to use, which makes it easier to mount the board directly to the breadboard. Normal setup of 12c OLED board with these connections: VCC to 3.3v (could be 5v for some screens), GND to GND, SCL to A5, SDA to A4. Important to make sure you have included libraries of: Adafruit BusIO, GFX Library, and SSD1306 (these could differ depending on the screen you buy). The code I provide is similar to the example that Arduino provides in the programmer. The intervals I used were shorter than real time, so adjust for your own use. I decided to have the intervals of 1 min = 20 secs in real time for program.
The code I used is below:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
// Declaration for SSD1306 display connected using I2C
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Declaration for SSD1306 display connected using software SPI:
//#define OLED_MOSI 9
//#define OLED_CLK 10
//#define OLED_DC 11
//#define OLED_CS 12
//#define OLED_RESET 13
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void setup()
{
Serial.begin(9600);
// initialize the OLED object
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
}
// Uncomment this if you are using SPI
//if(!display.begin(SSD1306_SWITCHCAPVCC)) {
// Serial.println(F("SSD1306 allocation failed"));
// for(;;); // Don't proceed, loop forever
//}
// Clear the buffer.
void loop() {
display.clearDisplay();
// Display Text
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("LCTA Blue Line");
display.setCursor(0,8);
display.println("Stay with baggage");
display.setTextColor(BLACK, WHITE);
display.setCursor(0,16);
display.println(" Report bad behavior ");
display.setTextColor(WHITE);
display.setCursor(0,24);
display.println("Our App @ lcta.gov");
display.display();
display.startscrollleft(0x00, 0x00);
delay(100000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Lego City");
display.setCursor(88,8);
display.println("5 mins");
display.setCursor(0,16);
display.println("Plateville");
display.setCursor(88,16);
display.println("10 mins");
display.setCursor(0,24);
display.println("West Tile");
display.setCursor(88,24);
display.println("13 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Lego City");
display.setCursor(88,8);
display.println("4 mins");
display.setCursor(0,16);
display.println("Plateville");
display.setCursor(88,16);
display.println("9 mins");
display.setCursor(0,24);
display.println("West Tile");
display.setCursor(88,24);
display.println("12 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Lego City");
display.setCursor(88,8);
display.println("3 mins");
display.setCursor(0,16);
display.println("Plateville");
display.setCursor(88,16);
display.println("8 mins");
display.setCursor(0,24);
display.println("West Tile");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("15 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Lego City");
display.setCursor(88,8);
display.println("2 mins");
display.setCursor(0,16);
display.println("Plateville");
display.setCursor(88,16);
display.println("7 mins");
display.setCursor(0,24);
display.println("West Tile");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("14 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Lego City");
display.setCursor(88,8);
display.println("1 min");
display.setCursor(0,16);
display.println("Plateville");
display.setCursor(88,16);
display.println("6 mins");
display.setCursor(0,24);
display.println("West Tile");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("13 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Lego City");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,8);
display.println("arr");
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("Plateville");
display.setCursor(88,16);
display.println("5 mins");
display.setCursor(0,24);
display.println("West Tile");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("12 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(10000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Lego City");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,8);
display.println("dep");
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("Plateville");
display.setCursor(88,16);
display.println("5 mins");
display.setCursor(0,24);
display.println("West Tile");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("12 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(10000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Plateville");
display.setCursor(88,8);
display.println("4 mins");
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("West Tile");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,16);
display.println("11 mins");
display.setTextColor(WHITE);
display.setCursor(0,24);
display.println("Lego City");
display.setCursor(88,24);
display.println("18 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Plateville");
display.setCursor(88,8);
display.println("3 mins");
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("West Tile");
display.setCursor(88,16);
display.println("9 mins");
display.setCursor(0,24);
display.println("Lego City");
display.setCursor(88,24);
display.println("17 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Plateville");
display.setCursor(88,8);
display.println("2 mins");
display.setCursor(0,16);
display.println("West Tile");
display.setCursor(88,16);
display.println("8 mins");
display.setCursor(0,24);
display.println("Lego City");
display.setCursor(88,24);
display.println("16 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Plateville");
display.setCursor(88,8);
display.println("1 min");
display.setCursor(0,16);
display.println("West Tile");
display.setCursor(88,16);
display.println("7 mins");
display.setCursor(0,24);
display.println("Lego City");
display.setCursor(88,24);
display.println("14 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Plateville");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,8);
display.println("arr");
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("West Tile");
display.setCursor(88,16);
display.println("6 mins");
display.setCursor(0,24);
display.println("Lego City");
display.setCursor(88,24);
display.println("13 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(10000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Plateville");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,8);
display.println("dep");
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("West Tile");
display.setCursor(88,16);
display.println("6 mins");
display.setCursor(0,24);
display.println("Lego City");
display.setCursor(88,24);
display.println("13 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(10000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("West Tile");
display.setCursor(88,8);
display.println("5 mins");
display.setCursor(0,16);
display.println("Lego City");
display.setCursor(88,16);
display.println("12 mins");
display.setCursor(0,24);
display.println("Duplo Heights");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("19 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("West Tile");
display.setCursor(88,8);
display.println("4 mins");
display.setCursor(0,16);
display.println("Lego City");
display.setCursor(88,16);
display.println("11 mins");
display.setCursor(0,24);
display.println("Duplo Heights");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("18 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("West Tile");
display.setCursor(88,8);
display.println("3 mins");
display.setCursor(0,16);
display.println("Lego City");
display.setCursor(88,16);
display.println("10 mins");
display.setCursor(0,24);
display.println("Duplo Heights");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("17 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("West Tile");
display.setCursor(88,8);
display.println("2 mins");
display.setCursor(0,16);
display.println("Lego City");
display.setCursor(88,16);
display.println("9 mins");
display.setCursor(0,24);
display.println("Duplo Heights");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,24);
display.println("16 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("West Tile");
display.setCursor(88,8);
display.println("1 min");
display.setCursor(0,16);
display.println("Lego City");
display.setCursor(88,16);
display.println("8 mins");
display.setCursor(0,24);
display.println("Duplo Heights");
display.setCursor(88,24);
display.println("14 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("West Tile");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,8);
display.println("arrived");
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("Lego City");
display.setCursor(88,16);
display.println("7 mins");
display.setCursor(0,24);
display.println("Duplo Heights");
display.setCursor(88,24);
display.println("13 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(10000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("West Tile");
display.setTextColor(BLACK, WHITE);
display.setCursor(88,8);
display.println("departed");
display.setTextColor(WHITE);
display.setCursor(0,16);
display.println("Lego City");
display.setCursor(88,16);
display.println("7 mins");
display.setCursor(0,24);
display.println("Duplo Heights");
display.setCursor(88,24);
display.println("13 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(10000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bricktown Station");
display.setCursor(0,8);
display.println("Lego City");
display.setCursor(88,8);
display.println("6 mins");
display.setCursor(0,16);
display.println("Duplo Heights");
display.setCursor(88,16);
display.println("12 mins");
display.setCursor(0,24);
display.println("Lego City");
display.setCursor(88,24);
display.println("18 mins");
display.display();
display.startscrollleft(0x00, 0x00);
delay(20000);
display.clearDisplay();
}