I am working on a Train Station departure screen project, also called the CTA screens. So far I have a working analog version, when you can manually place the inside in the display messages 2-6, but this should eventually become digital and even linked to the sensor, but I want to do some small ones first and ten first I want the following
I want to remove the Analog clock from station display and replace it with a digital clock if possible. Is this possible without completely turning the sketch upside down?
the current sketch shows 6 different departure times, these now work analogously and manually.
and how he should become
`#include <RTClib.h> // Real Time Clock library
RTC_DS1307 RTC; // Creates a real time clock with the name RTC
#define MSG1_PIN 2
#define MSG2_PIN 3
#define MSG3_PIN 4
#define MSG4_PIN 5
#define MSG5_PIN 6
#define MSG6_PIN 7
#define TMIN 5 // departure time of next train, minimum of random time
#define TMAX 13 // departure time of next train, maximum of random time
#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// setup the OLED display]
Adafruit_SSD1306 oled(4);
byte bg = WHITE, fg = BLACK; // background- and foreground colors
byte hour, minute, second;
byte msgnr, msgnr_old, msgflag, msghour, msgminute;
float angle;
// Define the RTC
void calc_msg_time() {
msgminute = msgminute + random(TMIN, TMAX);
if (msgminute > 59) {
msghour = (msghour + 1) % 24;
msgminute = msgminute - 60;
}
}
void print_msg_time() {
oled.setTextColor(fg);
oled.setTextSize(1);
oled.setCursor(40,2);
if(msghour < 10) oled.print(" ");
oled.print(msghour);
oled.print(":");
if(msgminute < 10) oled.print("0");
oled.print(msgminute);
}
void setup() {
pinMode(MSG1_PIN, INPUT_PULLUP);
pinMode(MSG2_PIN, INPUT_PULLUP);
pinMode(MSG3_PIN, INPUT_PULLUP);
pinMode(MSG4_PIN, INPUT_PULLUP);
pinMode(MSG5_PIN, INPUT_PULLUP);
pinMode(MSG6_PIN, INPUT_PULLUP);
randomSeed(analogRead(A0));
Serial.begin(9600); // IS THIS NEEDED ????
Wire.begin();
RTC.begin();
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C
// To set the clock, uncomment one of the RTC.adjust() lines
// RTC.adjust(DateTime(F(__DATE__), F(__TIME__))); // set to PC time
// RTC.adjust(DateTime(2019,8,22,13,42,0)); // yyyy, mm, dd, hh, mm, ss
}
void loop() {
// RTC
DateTime now = RTC.now();
hour = now.hour();
minute = now.minute();
second = now.second();
// clear oled
oled.clearDisplay();
oled.fillRect(0,0,127,31,bg);
// clock ticks
for(int z=0; z < 360;z= z + 30){
angle = (float)z / 57.3;
int x2=(16+(sin(angle)*15));
int y2=(15-(cos(angle)*15));
int x3=(16+(sin(angle)*(12)));
int y3=(15-(cos(angle)*(12)));
oled.drawLine(x2,y2,x3,y3,fg);
}
// clock second
angle=((float)second * 6 / 57.3); // degrees to radians
int x3=(16+(sin(angle)*(14)));
int y3=(15-(cos(angle)*(14)));
oled.drawLine(16,15,x3,y3,fg);
// clock minute
angle=((float)minute * 6 / 57.3); // degrees to radians
x3=(16+(sin(angle)*(12)));
y3=(15-(cos(angle)*(12)));
oled.drawLine(16,15,x3,y3,fg);
// clock hour
angle=((float)hour * 30 + (float)minute / 2) / 57.3; //degrees to radians
x3=(16+(sin(angle)*(10)));
y3=(15-(cos(angle)*(10)));
oled.drawLine(16,15,x3,y3,fg);
// time and messages
if(!digitalRead(MSG1_PIN)) msgnr = 1;
if(!digitalRead(MSG2_PIN)) msgnr = 2;
if(!digitalRead(MSG3_PIN)) msgnr = 3;
if(!digitalRead(MSG4_PIN)) msgnr = 4;
if(!digitalRead(MSG5_PIN)) msgnr = 5;
if(!digitalRead(MSG6_PIN)) msgnr = 6;
if(msgnr != msgnr_old) {
calc_msg_time();
msgnr_old = msgnr;
}
print_msg_time();
switch (msgnr) {
case 1:
oled.setCursor(72,2); oled.print("Sprinter"); // max 10 characters
oled.setCursor(40,12); oled.print("Gronignen"); // max 14 characters
oled.setCursor(40,22); oled.print("via Assen"); // max 20 characters
break;
case 2:
oled.setCursor(72,2); oled.print("IC Direct");
oled.setCursor(40,12); oled.print("Den Haag");
oled.setCursor(40,22); oled.print("via Lelystad");
break;
case 3:
oled.setCursor(72,2); oled.print("Intercity");
oled.setCursor(40,12); oled.print("Amsterdam CS");
oled.setCursor(40,22); oled.print("via Lelystad");
break;
case 4:
oled.setCursor(72,2); oled.print("Sneltrein");
oled.setCursor(40,12); oled.print("Maastricht");
oled.setCursor(40,22); oled.print("via Arnhem");
break;
case 5:
oled.setCursor(72,2); oled.print("Nightjet");
oled.setCursor(40,12); oled.print("Zagreb");
oled.setCursor(40,22); oled.print("via Munchen");
break;
case 6:
oled.setCursor(72,2); oled.print("IC Benelux");
oled.setCursor(40,12); oled.print("Brussel");
oled.setCursor(40,22); oled.print("via Rotterdam");
break;
}
// refresh screen
oled.display();
}`

