#include "ulozisko.h"
byte count = 0;
byte dot = 0;
byte line = 0; // pixel line
byte val1 = 0;
byte val2 = 0;
byte val3 = 0;
byte val4 = 0;
byte val5 = 0;
int price = 0;
int tarrif = 0;
int stop = 0;
int dest = 0;
float bod = 0;
byte image = 0;
byte offset1 = 0; // image offset for stops
byte offset2 = 0; // image offset for destinations
byte offset3 = 0; // image offset for costs
byte offset4 = 0; // image offset for tarrifs
byte row = 0; // text line
byte toprint = 0;
byte ready = 0;
unsigned long present = 0;
unsigned long past = 0;
void setup() {
pinMode(2, INPUT_PULLUP); // reed switch
pinMode(3, INPUT_PULLUP); // tacho generator
pinMode(4, OUTPUT); // motor control pin
pinMode(5, OUTPUT); // left most pin (pin A)
pinMode(6, OUTPUT); // Pin B
pinMode(7, OUTPUT); // Pin C
pinMode(8, OUTPUT); // Pin D
pinMode(9, OUTPUT); // Pin E (right most pin if you use the M185)
attachInterrupt(digitalPinToInterrupt(2), skuska, FALLING);
attachInterrupt(digitalPinToInterrupt(3), skuska2, CHANGE);
Serial.begin(9600);
Serial.println();
}
void skuska() {
if(ready == 1) {
line = line + 1;
}
if(ready == 0) {
ready = 1;
}
count = 0;
dot = 0;
}
void skuska2() {
if(dot < 23 && ready == 1) {
count = count + 1;
}
if(dot >= 23) {
dot = 23;
}
}
void loop() {
while(toprint == 0) {
if(millis() - past >= 2000) {
digitalWrite(4, LOW);
count = 0;
dot = 0;
line = 0;
ready = 0;
row = 0;
past = millis();
}
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
if(Serial.available()) {
while (Serial.read() != 'a') {}
tarrif = Serial.parseInt();
price = Serial.parseInt();
stop = Serial.parseInt();
dest = Serial.parseInt();
toprint = 1;
//ready = 1;
offset1 = 34 - stop;
offset2 = 34 - dest;
offset3 = 5 + price;
offset4 = 40 + tarrif;
}
}
while(toprint == 1) {
present = millis();
dot = count / 3;
bod = count / 3.00;
if(dot >= 23) {
dot = 0;
}
if(line >= 8) {
row = row + 1;
line = 0;
}
digitalWrite(4, HIGH);
if(ready == 0) {
line = 0;
count = 0;
dot = 0;
row = 0;
}
if(tarrif <= 200) {
switch(row) {
case 0:
image = 36;
break;
case 1:
image = 3;
break;
case 2:
image = 0;
break;
case 3:
image = 4;
break;
case 4:
image = offset4;
break;
case 5:
image = 4;
break;
case 6:
image = offset3;
break;
case 7:
image = 4;
break;
case 8:
image = 2;
break;
case 9:
image = offset1;
break;
case 10:
image = 4;
break;
case 11:
image = 1;
break;
case 12:
image = offset2;
break;
case 13:
image = 4;
break;
case 14:
image = 37;
break;
case 15:
image = 38;
break;
case 16:
image = 39;
break;
case 17:
image = 36;
break;
case 18:
image = 36;
break;
case 19:
toprint = 0;
break;
}
}
if(tarrif >= 210) {
ready = 1;
image = 36;
if(row >= 1) {
toprint = 0;
}
}
// Printing the ticket (prerendered on the computer)
switch(image) {
case 0:
val1 = pgm_read_byte(&(Arri[line][dot]));
val2 = pgm_read_byte(&(vaH[line][dot]));
val3 = pgm_read_byte(&(oriz[line][dot]));
val4 = pgm_read_byte(&(on[line][dot]));
val5 = pgm_read_byte(&(blank[line][dot]));
break;
case 1:
val1 = pgm_read_byte(&(to[line][dot]));
val2 = pgm_read_byte(&(blank[line][dot]));
val3 = val2;
val4 = val3;
val5 = val4;
break;
case 2:
val1 = pgm_read_byte(&(from[line][dot]));
val2 = pgm_read_byte(&(blank[line][dot]));
val3 = val2;
val4 = val3;
val5 = val4;
break;
case 3:
val1 = pgm_read_byte(&(thnb[line][dot]));
val2 = val1;
val3 = val2;
val4 = val3;
val5 = val4;
break;
case 4:
val1 = pgm_read_byte(&(dtb[line][dot]));
val2 = val1;
val3 = val2;
val4 = val3;
val5 = val4;
break;
case 5:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(thirteeneur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 6:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(fifteeneur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 7:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(twentyoneeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 8:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(twentysixeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 9:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(thirtyeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 10:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(thirtynineeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 11:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(fourtytwoeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 12:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(fourtyfiveeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 13:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(fiftytwoeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 14:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(sixtyeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 15:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(sixtythreeeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 16:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(sixtyfiveeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 17:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(seventyfiveeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 18:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(seventyeighteur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 19:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(eightyfoureur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 20:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(ninetyeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 21:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col0com[line][dot]));
val3 = pgm_read_byte(&(ninetyoneeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 22:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col1com[line][dot]));
val3 = pgm_read_byte(&(foureur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 23:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col1com[line][dot]));
val3 = pgm_read_byte(&(fiveeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 24:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col1com[line][dot]));
val3 = pgm_read_byte(&(twentyeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 25:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col1com[line][dot]));
val3 = pgm_read_byte(&(fourtyseveneur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 26:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col1com[line][dot]));
val3 = pgm_read_byte(&(sixtyeighteur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 27:
val1 = pgm_read_byte(&(Ambl[line][dot]));
val2 = pgm_read_byte(&(esid[line][dot]));
val3 = pgm_read_byte(&(eVi[line][dot]));
val4 = pgm_read_byte(&(llag[line][dot]));
val5 = pgm_read_byte(&(e[line][dot]));
break;
case 28:
val1 = pgm_read_byte(&(Broa[line][dot]));
val2 = pgm_read_byte(&(dway[line][dot]));
val3 = pgm_read_byte(&(Vil[line][dot]));
val4 = pgm_read_byte(&(lage[line][dot]));
val5 = pgm_read_byte(&(blank[line][dot]));
break;
case 29:
val1 = pgm_read_byte(&(Broa[line][dot]));
val2 = pgm_read_byte(&(dway[line][dot]));
val3 = pgm_read_byte(&(Far[line][dot]));
val4 = pgm_read_byte(&(m[line][dot]));
val5 = pgm_read_byte(&(blank[line][dot]));
break;
case 30:
val1 = pgm_read_byte(&(Edin[line][dot]));
val2 = pgm_read_byte(&(burg[line][dot]));
val3 = pgm_read_byte(&(hRo[line][dot]));
val4 = pgm_read_byte(&(unda[line][dot]));
val5 = pgm_read_byte(&(bout[line][dot]));
break;
case 31:
val1 = pgm_read_byte(&(Edin[line][dot]));
val2 = pgm_read_byte(&(burg[line][dot]));
val3 = pgm_read_byte(&(hTr[line][dot]));
val4 = pgm_read_byte(&(amst[line][dot]));
val5 = pgm_read_byte(&(op[line][dot]));
break;
case 32:
val1 = pgm_read_byte(&(Edin[line][dot]));
val2 = pgm_read_byte(&(burg[line][dot]));
val3 = pgm_read_byte(&(hLi[line][dot]));
val4 = pgm_read_byte(&(ghth[line][dot]));
val5 = pgm_read_byte(&(ouse[line][dot]));
break;
case 33:
val1 = pgm_read_byte(&(Bamb[line][dot]));
val2 = pgm_read_byte(&(urgh[line][dot]));
val3 = pgm_read_byte(&(Cit[line][dot]));
val4 = pgm_read_byte(&(y[line][dot]));
val5 = pgm_read_byte(&(blank[line][dot]));
break;
case 34:
val1 = pgm_read_byte(&(Bamb[line][dot]));
val2 = pgm_read_byte(&(urgh[line][dot]));
val3 = pgm_read_byte(&(Ter[line][dot]));
val4 = pgm_read_byte(&(minu[line][dot]));
val5 = pgm_read_byte(&(s[line][dot]));
break;
case 35:
val1 = pgm_read_byte(&(cost[line][dot]));
val2 = pgm_read_byte(&(col1com[line][dot]));
val3 = pgm_read_byte(&(twentysixeur[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 36:
val1 = pgm_read_byte(&(blank[line][dot]));
val2 = val1;
val3 = val2;
val4 = val3;
val5 = val4;
break;
case 37:
val1 = pgm_read_byte(&(arriva[line][dot]));
val2 = pgm_read_byte(&(horiz[line][dot]));
val3 = pgm_read_byte(&(ondri[line][dot]));
val4 = pgm_read_byte(&(ver1[line][dot]));
val5 = pgm_read_byte(&(thanks[line][dot]));
break;
case 38:
val1 = pgm_read_byte(&(foru[line][dot]));
val2 = pgm_read_byte(&(singt[line][dot]));
val3 = pgm_read_byte(&(heser[line][dot]));
val4 = pgm_read_byte(&(vices[line][dot]));
val5 = pgm_read_byte(&(brough[line][dot]));
break;
case 39:
val1 = pgm_read_byte(&(tupon[line][dot]));
val2 = pgm_read_byte(&(tento[line][dot]));
val3 = pgm_read_byte(&(place[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 40:
val1 = pgm_read_byte(&(normal[line][dot]));
val2 = pgm_read_byte(&(ticke[line][dot]));
val3 = pgm_read_byte(&(t[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 41:
val1 = pgm_read_byte(&(studen[line][dot]));
val2 = pgm_read_byte(&(ttick[line][dot]));
val3 = pgm_read_byte(&(et[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
case 42:
val1 = pgm_read_byte(&(senior[line][dot]));
val2 = pgm_read_byte(&(ticke[line][dot]));
val3 = pgm_read_byte(&(t[line][dot]));
val4 = pgm_read_byte(&(blank[line][dot]));
val5 = val4;
break;
}
if(bod - dot < 0.4 && ready == 1) {
digitalWrite(5, val1);
digitalWrite(6, val2);
digitalWrite(7, val3);
digitalWrite(8, val4);
digitalWrite(9, val5);
}
if(bod - dot > 0.4 || ready == 0) {
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
}
}