#include <LiquidCrystal.h>
int zastavka = 0;
int ciel = 0;
int diff = 0;
int rozd = 0;
float cena = 0.63;
float cost = 0.01;
int price = 0;
int priceoffset = 0;
int scroll = 0;
int tarifa = 0;
int tlac = 0;
int stranka = 0;
unsigned long past = 0;
unsigned long past2 = 0;
String stop = "Ambside Village";
String tarrif = "Normal ticket";
String dest = "Broadway Farm";
LiquidCrystal lcd1(2, 3, 4, 5, 6, 7);
LiquidCrystal lcd2(2, 9, 4, 5, 6, 7);
void setup() {
lcd1.begin(16, 2);
lcd2.begin(16, 2);
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
pinMode(A4, INPUT_PULLUP);
pinMode(A5, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
lcd2.print(stop);
Serial.begin(9600);
}
void loop() {
if (zastavka <= -1) {
zastavka = 8;
}
price = cena * 100;
switch (price) {
case 13:
priceoffset = 0;
break;
case 15:
priceoffset = 1;
break;
case 21:
priceoffset = 2;
break;
case 26:
priceoffset = 3;
break;
case 30:
priceoffset = 4;
break;
case 39:
priceoffset = 5;
break;
case 45:
priceoffset = 6;
break;
case 52:
priceoffset = 7;
break;
case 60:
priceoffset = 8;
break;
case 63:
priceoffset = 9;
break;
case 65:
priceoffset = 10;
break;
case 75:
priceoffset = 11;
break;
case 78:
priceoffset = 12;
break;
case 84:
priceoffset = 13;
break;
case 90:
priceoffset = 14;
break;
case 91:
priceoffset = 15;
break;
case 104:
priceoffset = 16;
break;
case 105:
priceoffset = 17;
break;
case 120:
priceoffset = 18;
break;
case 147:
priceoffset = 19;
break;
case 168:
priceoffset = 20;
break;
}
stranka = digitalRead(8);
if (digitalRead(A4) == LOW) {
delay(250);
scroll = scroll + 1;
}
if (digitalRead(A5) == LOW) {
delay(250);
scroll = scroll - 1;
}
if (digitalRead(A0) == LOW) {
delay(250);
zastavka = zastavka + 1;
scroll = zastavka;
}
if (digitalRead(A2) == LOW) {
delay(250);
zastavka = zastavka - 1;
scroll = zastavka;
}
if (digitalRead(A3) == LOW) {
delay(250);
tarifa = tarifa + 1;
}
if (tarifa == 0) {
tarrif = "Normal ticket";
cost = 0.21;
}
if (tarifa == 1) {
tarrif = "Student ticket";
cost = 0.13;
}
if (tarifa == 2) {
tarrif = "Senior ticket";
cost = 0.15;
}
if (tarifa >= 3) {
tarifa = 0;
}
if (scroll >= 9) {
scroll = 0;
}
if (scroll < 0) {
scroll = 8;
}
switch (scroll) {
case 0:
dest = "Bamburgh Term.";
ciel = 0;
break;
case 1:
dest = "Bamburgh City";
ciel = 1;
break;
case 2:
dest = "Edinburgh Lgths";
ciel = 2;
break;
case 3:
dest = "Edinburgh Trst";
ciel = 3;
break;
case 4:
dest = "Edinburgh Rdbt";
ciel = 4;
break;
case 5:
dest = "Broadway Rdbt";
ciel = 5;
break;
case 6:
dest = "Broadway Farm";
ciel = 6;
break;
case 7:
dest = "Broadway Village";
ciel = 7;
break;
case 8:
dest = "Ambside Village";
ciel = 8;
break;
}
switch (zastavka) {
case 0:
stop = "Bamburgh Term.";
break;
case 1:
stop = "Bamburgh City";
break;
case 2:
stop = "Edinburgh Lgths";
break;
case 3:
stop = "Edinburgh Trst";
break;
case 4:
stop = "Edinburgh Rdbt";
break;
case 5:
stop = "Broadway Rdbt";
break;
case 6:
stop = "Broadway Farm";
break;
case 7:
stop = "Broadway Village";
break;
case 8:
stop = "Ambside Village";
break;
case 9:
zastavka = 0;
break;
}
if (digitalRead(A1) == LOW) {
delay(250);
lcd1.clear();
lcd1.setCursor(0, 1);
lcd1.print("Printing...");
listok();
}
diff = zastavka - ciel;
rozd = abs(diff);
cena = rozd * cost;
if (millis() - past >= 200) {
lcd1.clear();
past = millis();
}
if (millis() - past2 >= 200) {
lcd2.clear();
past2 = millis();
}
if (digitalRead(A1) == HIGH && stranka == LOW) {
lcd1.setCursor(0, 0);
lcd2.setCursor(0, 0);
lcd2.print(stop);
lcd1.print(tarrif);
lcd1.setCursor(0, 1);
lcd1.print("Cost: ");
lcd1.print(cena);
lcd1.print(" EUR");
}
if ( digitalRead(A1) == HIGH && stranka == HIGH) {
lcd1.setCursor(0, 0);
lcd2.setCursor(0, 0);
lcd2.print(stop);
lcd1.print(stop);
lcd1.setCursor(0, 1);
lcd1.print(dest);
}
}
void listok() {
lcd2.clear();
lcd2.print(tarrif);
lcd2.setCursor(0, 1);
lcd2.print(cena);
lcd2.print(" EUR");
delay(500);
Serial.print("a ");
Serial.print(tarifa);
Serial.print(", ");
Serial.print(priceoffset);
Serial.print(", ");
Serial.print(zastavka);
Serial.print(", ");
Serial.println(ciel);
delay(1500);
}