/*
PapierOS v1.0
AntekElektronik 2024
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define UP 4
#define DOWN 5
#define SELECT 2
#define DISPLAY 3
#define BUZZ 9
#define MAXMENU 0
int position = 0;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(4);
Adafruit_SSD1306 mainDisplay(4);
String idleText = "Pesa Dart";
String stacje[6] = {"Lublin Gl.", "Lublin Zach.", "Naleczow", "pulawy miasto","pionki zach.", "radom gl."};
int stacje_number = 5;
int current_station = 0;
int number = 0;
bool changed = true;
bool procedura = false;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
mainDisplay.begin(SSD1306_SWITCHCAPVCC, 0x4C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(4,4);
display.println("booting");
display.display();
mainDisplay.clearDisplay();
mainDisplay.setTextSize(2);
mainDisplay.setTextColor(WHITE);
mainDisplay.setCursor(0,0);
mainDisplay.println(" >>PESA<<");
mainDisplay.setTextSize(1);
mainDisplay.println("\nAntoni Gzara 2024");
mainDisplay.display();
delay(3000);
mainDisplay.clearDisplay();
mainDisplay.setCursor(0,0);
mainDisplay.setTextSize(1);
mainDisplay.println("<Select UP>\n\n\n<Print DOWN>");
mainDisplay.display();
delay(5000);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(4,4);
display.println(idleText);
display.display();
pinMode(UP, INPUT_PULLUP);
pinMode(DOWN, INPUT_PULLUP);
pinMode(SELECT, INPUT_PULLUP);
pinMode(DISPLAY, INPUT_PULLUP);
}
void loop() {
for(int i = SELECT; i <= DOWN; i++){
if(!digitalRead(i)){
while(!digitalRead(i)){ delay(10); }
changed = true;
tone(BUZZ, 600);
delay(10);
noTone(BUZZ);
delay(10);
switch(i){
case DOWN:
if(position < MAXMENU + stacje_number){ position ++; } else{
tone(BUZZ, 500);
delay(50);
noTone(BUZZ);
delay(10);
}
break;
case UP:
if(position > 0){ position --; } else{
tone(BUZZ, 500);
delay(50);
noTone(BUZZ);
delay(10);
}
break;
case SELECT:
current_station = position;
tone(BUZZ, 600);
delay(10);
noTone(BUZZ);
delay(100);
tone(BUZZ, 600);
delay(10);
noTone(BUZZ);
delay(10);
break;
case DISPLAY:
procedura = true;
tone(BUZZ, 600);
delay(150);
noTone(BUZZ);
delay(10);
break;
}
}
delay(10);
}
//drawing menu
if(changed){
changed = false;
mainDisplay.clearDisplay();
mainDisplay.setCursor(0,0);
mainDisplay.setTextSize(1);
if(position != 0){ mainDisplay.println(stacje[position - 1]); }
mainDisplay.print(stacje[position]);
mainDisplay.println(" <");
if(position != stacje_number){ mainDisplay.println(stacje[position + 1]); }
if(position == 0 && stacje_number >= 2){ mainDisplay.println(stacje[position + 2]); }
mainDisplay.setCursor(0,25);
mainDisplay.print("current:");
mainDisplay.println(stacje[current_station]);
mainDisplay.display();
}
if(procedura == true){
procedura = false;
mainDisplay.clearDisplay();
mainDisplay.setCursor(0,0);
mainDisplay.println("displaying...");
mainDisplay.display();
display.clearDisplay();
display.setCursor(0,0);
display.println("Nastepna \nstacja:");
display.display();
delay(3000);
display.clearDisplay();
display.setCursor(0,0);
display.println(stacje[current_station]);
display.display();
delay(3000);
display.clearDisplay();
display.setCursor(0,0);
display.println("Nastepna \nstacja:");
display.display();
delay(3000);
mainDisplay.clearDisplay();
mainDisplay.setCursor(0,0);
mainDisplay.println("done!");
mainDisplay.display();
display.clearDisplay();
display.setCursor(0,0);
display.println(stacje[current_station]);
display.display();
delay(3000);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(4,4);
display.println(idleText);
display.display();
changed = true;
}
delay(10);
}