Ik zoek een programmeur die sketch wil maken voor een trein perron scherm, ik heb een sketch, deze moet naar wens worden aangepast.
De huidige sketch is een voorbeeld die op internet staat, maar ik wil enkele eigen onderdelen in hebben, 2 stuks.
- De klok moet vervangen worden worden een real-time cijfer klok (12:44)
- De eerste regel nu staat eerst de klok, dan intercity en dan niks, ik wil dat er logo symbool van de NS, Arriva, thalys enz word toegevoeg.
Ik zoek dus iemand die dit tegen een vergoeding wil uitvoeren
hier de sketsch die aangepast moet worden
// OLED Model railway Station Platform Display - Rudy B, August 2019
// 6 different messages can be shown, based on 6 inputs
// OLED SSD1306 - I2C wires: SDA or A4, SCL or A5
#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 COLOR_PIN 8
#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 <RTClib.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
RTC_DS3231 rtc;
char t[32];
// setup oled
Adafruit_SSD1306 oled(4);
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
byte hour, minute, second;
byte bg, fg, msgnr, msgnr_old, msgflag, msghour, msgminute;
unsigned long time_to_update;
float angle;
void calc_msg_time() {
msgminute = minute + random(TMIN, TMAX); //?????????
msghour = hour;
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);
pinMode(COLOR_PIN, INPUT_PULLUP);
Serial.begin(9600);
Wire.begin();
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C
rtc.begin();
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
// generate random startup time ?????????
randomSeed(analogRead(A0));
hour = random(7, 20);
minute = random(0, 60);
}
void loop() {
DateTime now = rtc.now();
sprintf(t, "%02d:%02d:%02d %02d/%02d/%02d", now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year());
Serial.print(F("Date/Time: "));
Serial.println(t);
delay(1000);
// determine background- and foreground color based on COLOR_PIN
if(digitalRead(COLOR_PIN) == HIGH) {bg = WHITE; fg = BLACK;}
else {bg = BLACK; fg = WHITE;}
// update time
if(millis() > time_to_update) {
time_to_update = millis() + 1000UL;
second = second + 1;
if(second == 60) {
second = 0;
minute = minute + 1;
}
if (minute == 60) {
minute = 0;
hour = (hour + 1) % 24;
}
}
// clear oled
oled.clearDisplay();
oled.fillRect(0,0,127,31,bg);
// draw clock ticks
for(int z=0; z<360;z=z+30){
angle = (float)z / 57.3;
int x1=(16+(sin(angle)*15));
int y1=(15-(cos(angle)*15));
int x2=(16+(sin(angle)*(12)));
int y2=(15-(cos(angle)*(12)));
oled.drawLine(x1,y1,x2,y2,fg);
}
// draw clock second
angle=((float)second * 6 / 57.3) ; //Convert degrees to radians
int x2=(16+(sin(angle)*(14)));
int y2=(15-(cos(angle)*(14)));
oled.drawLine(16,15,x2,y2,fg);
// draw clock minute
angle=((float)minute * 6 / 57.3) ; //Convert degrees to radians
x2=(16+(sin(angle)*(12)));
y2=(15-(cos(angle)*(12)));
oled.drawLine(16,15,x2,y2,fg);
// draw clock hour
angle=((float)hour * 30 + (float)minute / 2) / 57.3 ; //Convert degrees to radians
x2=(16+(sin(angle)*(10)));
y2=(15-(cos(angle)*(10)));
oled.drawLine(16,15,x2,y2,fg);
/*
// platform number
oled.fillRect(107, 5, 19, 22, fg);
oled.setTextSize(2);
oled.setTextColor(bg);
oled.setCursor(111,9);
oled.print("3");
*/
// display 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("Intercity"); // max 10 characters
oled.setCursor(40,12); oled.print("Eindhoven"); // max 14 characters
oled.setCursor(40,22); oled.print("via Strijp-S"); // max 14 characters
break;
case 2:
oled.setCursor(72,2); oled.print("Sprinter");
oled.setCursor(40,12); oled.print("sHertogenbosch");
oled.setCursor(40,22); oled.print("via Boxtel");
break;
case 3:
oled.setCursor(72,2); oled.print("Stoptrein");
oled.setCursor(40,12); oled.print("Maliebaan");
oled.setCursor(40,22); oled.print("via Eindhoven");
break;
case 4:
oled.setCursor(72,2); oled.print("Intercity");
oled.setCursor(40,12); oled.print("Venlo");
oled.setCursor(40,22); oled.print("via Deurne");
break;
case 5:
oled.setCursor(72,2); oled.print("Intercity");
oled.setCursor(40,12); oled.print("Maastricht");
oled.setCursor(40,22); oled.print("via Sittard");
break;
case 6:
oled.setCursor(72,2); oled.print("Intercity");
oled.setCursor(40,12); oled.print("Heerlen");
oled.setCursor(40,22); oled.print("via Weert");
break;
}
// refresh screen
oled.display();
}