const String plutovar [] = {"Zlava: 1 cent", "Chlieb", "Rohlik", "Mlieko", "Kava mleta", "Nescaffee", "Sol", "Morska sol", "Cukor krystalovy", "Cukor praskovy", "Cukor vanilinovy", "Cukor skoricovy", "Kyp. pr. pec.", "Soda bikarbona", "Drozdie suche", "Kysel. citr.", "Puding vanilkovy", "Puding kakaovy", "Puding cokoladovy", "Puding karamelovy", "Puding kokosovy", "Puding jahodovy", "Puding malinovy", "Puding citronovy", "Zlaty klas", "Cier. kor. mlete", "Cier. kor. cele", "Nove kor. mlete", "Rasca mleta", "Rasca cela", "Bobkovy list", "Jar mydlo na riad", "CIF cist. pasta", "Pulirapid", "Spongia na riad", "Drotenka", "Kefa cistiaca", "Utierka na sklo", "Utierky papierove", "Servitky", "Sac. des. pap", "Sac. igel. male", "Sac. plas. stred.", "Sac. smet. str.", "Sac. smet. vel.", "Mucholapky zavesne", "Mucholapka lapana", "Biolit sprej", "Biolit lep na mole", "Biolit vank. v skrini", "Raid spr. pr. mravcom", "Bros sprej", "Bros prach na mravce", "Repelent na komare", "Alpa 1 liter", "Tranz. IRL540N", "Tranz. IRLZ34N", "Tranz. IRFP250NPbF", "kolofonia 30gr. pl.", "Tranz. LGEGW50N65F1A", "Tranz. WMJ028N10HGS", "Dioda HER156", "Dioda 1N5399", "Dioda 1N5819", "Kontakt70 lak", "Buzirky teplozmrstne", "Integr. obvod NE555", "Harok A4", "Eskapasky 100ks", "Slzy programatora", "Tranz. BD135-16", "Tranz. BD136-16", "Tranz. 2N3904", "Tranz. 2N3906", "Tavidlo 1.4ml", "Etanol 1l"}; // make sure to correctly line up items and costs, as there is no automation
const float plucena[] PROGMEM = {-0.01, 3.00, 0.27, 1.00, 6.9, 15.00, 5, 8, 2, 3, 3.5, 3.5, 0.2, 0.5, 2, 0.5, 2, 2, 3, 2.50, 3.2, 3, 3, 3, 0.5, 1, 0.9, 1.1, 1.1, 1, 6, 3, 3, 3, 2, 2, 2, 2, 5, 5, 3, 3, 3.5, 7, 8, 1, 1, 5, 5, 5, 5, 5, 5, 5, 2.5, 1.65, 1.65, 2.71, 3, 3, 3, 0.2, 0.08, 0.1, 15, 5, 1, 0.1, 5, 1000, 1, 1, 0.25, 0.25, 7, 7.5}; // the PLU ranges from 001 to 999
const PROGMEM float multprezdanenie = 1.23; // multiply the subtotal price by this value to get total
const PROGMEM float dph = 0.23;
const PROGMEM byte mnozstvoznakovnariadok = 30;
//↑↑ this is for constants ↑↑
//↓↓ this is for making space in RAM for actually variables ↓↓
float cenacelkom = 0;
float cenapolozka = 0;
float cenadane = 0;
float zadanacena = 0;
float percenta = 0;
long zadanieplu = 0;
long cisloplu = 0;
long zadanemnozstvo = 0;
unsigned long zadanecislo = 0;
unsigned long zadanecislo2 = 0;
int jehotovost = 2; // keď hodnota je 0, tak platba je kartou, nezaokrúhluj
float cenaplu = 0;
float cenariadok = 0;
float zaokruhlenie = 0;
byte jetranzakcia = 0; // keď hodnota je 1, tak tranzakcia je, keď 2, tak je výdaj z hotovosti
float hotovost = 0;
float vydavok = 0;
int a = 12;
int b = 13;
int c = 14;
int d = 15;
int e = 16;
int f = 17;
int g = 18;
int one = 24;
int ten = 23;
int hund = 22;
int thou = 21;
int tetho = 20;
int hutho = 19;
int zobraz = 0;
unsigned long num = 0;
unsigned int cislo = 0;
unsigned int cislodesat = 0;
unsigned int cislodesat2 = 0;
unsigned int cislosto = 0;
unsigned int cislosto2 = 0;
unsigned int cislotisic = 0;
unsigned int cislotisic2 = 0;
unsigned int cislodesattisic = 0;
unsigned int cislodesattisic2 = 0;
unsigned int cislostotisic = 0;
unsigned int zobrazCislo = 0;
unsigned int intermid = 0;
unsigned int intermid2 = 0;
unsigned int intermid3 = 0;
unsigned int intermid4 = 0;
unsigned int intermid5 = 0;
unsigned long present2 = 0;
unsigned long past2 = 0;
unsigned int cislo2 = 0;
unsigned int cislo2desat = 0;
unsigned int cislo2desat2 = 0;
unsigned int cislo2sto = 0;
unsigned int zobraz2cislo = 0;
int zobraz2 = 0;
int one2 = 27;
int ten2 = 26;
int hun2 = 25;
int a2 = 31;
int b2 = 32;
int c2 = 33;
int d2 = 34;
int e2 = 35;
int f2 = 36;
int g2 = 37;
unsigned int num2 = 0;
byte step = 0;
byte isbtnpsd = 0;
byte isbtnack = 0;
byte zadaniekusov = 0; // zadáva sa počet kusov, PLU, alebo cena?
byte pocetstlacenitlacidlaplu = 0; // počet stláčení tlačidla PLU
String psdbtn = "";
unsigned long pastms = 0;
unsigned long pastms2 = 0;
unsigned long pastms3 = 0;
unsigned long pastus = 0;
unsigned long noDetectTime = 0;
byte ison = 1;
void setup() {
zadanecislo = 0;
pinMode(2, OUTPUT); // row1
pinMode(3, OUTPUT); // row2
pinMode(4, OUTPUT); // row3
pinMode(5, OUTPUT); // row4
pinMode(6, INPUT_PULLUP); // col1
pinMode(7, INPUT_PULLUP); // col2
pinMode(8, INPUT_PULLUP); // col3
pinMode(9, INPUT_PULLUP); // col4
pinMode(10, INPUT_PULLUP); // col5
pinMode(11, INPUT_PULLUP); // col6
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(one, OUTPUT);
pinMode(ten, OUTPUT);
pinMode(hund, OUTPUT);
pinMode(thou, OUTPUT);
pinMode(tetho, OUTPUT);
pinMode(hutho, OUTPUT);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(one, HIGH);
digitalWrite(ten, HIGH);
digitalWrite(hund, HIGH);
digitalWrite(thou, HIGH);
digitalWrite(tetho, HIGH);
digitalWrite(hutho, HIGH);
digitalWrite(38, HIGH);
pinMode(38, OUTPUT);
for(int i = 25; i < 28; i = i + 1) {
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
for(int i = 31; i < 38; i = i + 1) {
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}
pinMode(29, OUTPUT); // battery indicator (one color, lights up when bat voltage < 3.2V)
pinMode(30, OUTPUT);
delay(100);
Serial.begin(2000000);
num = (analogRead(A0) / 0.2047f) * 100; // measures and shows batt voltage
if(num < 3200) {digitalWrite(29, HIGH);} else {digitalWrite(29, LOW);}
pastms = millis();
pastus = micros();
wait(1000);
}
void loop() {
if(zadanieplu >= 1) {
zadanecislo = zadanecislo % 1000000;
} else if((!zadanieplu)) {
zadanecislo = zadanecislo % 1000000000;
num2 = (zadanecislo / 1000000) % 1000;
}
if((!zadanieplu)) {
zadanacena = zadanecislo / 100.00f;
num = zadanecislo % 1000000;
} else if(zadanieplu == 1) {cisloplu = zadanecislo;} else if(zadanieplu == 2) {zadanemnozstvo = zadanecislo;}
else if (cenacelkom > 0.00f) {num = cenacelkom * 100.00f;}
if(zadanieplu == 1) {zadanecislo = zadanecislo % 1000; num2 = zadanecislo;}
if(zadanieplu == 2) {num = zadanecislo; num2 = cisloplu;}
if(jetranzakcia == 2 && (!vydavok)) {hotovost = zadanecislo / 100.0f; num = zadanecislo;}
if(jetranzakcia == 2 && (vydavok)) {num = vydavok * 100.0f;}
int ubat = analogRead(A0) / 0.2047f;
if(ubat < 3200 && ison) {digitalWrite(29, HIGH);} else if(ubat > 3800 && ison) {digitalWrite(29, LOW);}
if(!digitalRead(6) && !digitalRead(2)) {psdbtn = "c/ON"; isbtnpsd = 1;} // obvious: clear/on (short press/long press)
else if(!digitalRead(6) && !digitalRead(3)) {psdbtn = "#/OFF"; isbtnpsd = 1;} // no sale / off (short press/long press)
else if(!digitalRead(7) && !digitalRead(2)) {psdbtn = "7"; isbtnpsd = 1;}
else if(!digitalRead(7) && !digitalRead(3)) {psdbtn = "4"; isbtnpsd = 1;}
else if(!digitalRead(7) && !digitalRead(4)) {psdbtn = "1"; isbtnpsd = 1;}
else if(!digitalRead(8) && !digitalRead(2)) {psdbtn = "8"; isbtnpsd = 1;}
else if(!digitalRead(8) && !digitalRead(3)) {psdbtn = "5"; isbtnpsd = 1;}
else if(!digitalRead(8) && !digitalRead(4)) {psdbtn = "2"; isbtnpsd = 1;}
else if(!digitalRead(8) && !digitalRead(5)) {psdbtn = "0"; isbtnpsd = 1;}
else if(!digitalRead(9) && !digitalRead(2)) {psdbtn = "9"; isbtnpsd = 1;}
else if(!digitalRead(9) && !digitalRead(3)) {psdbtn = "6"; isbtnpsd = 1;}
else if(!digitalRead(9) && !digitalRead(4)) {psdbtn = "3"; isbtnpsd = 1;}
else if(!digitalRead(9) && !digitalRead(5)) {psdbtn = "00"; isbtnpsd = 1;} // two zeros (just like adding machines have it)
else if(!digitalRead(10) && !digitalRead(2)) {psdbtn = "x/↑"; isbtnpsd = 1;} // x report (+ something else?)
else if(!digitalRead(10) && !digitalRead(3)) {psdbtn = "plu"; isbtnpsd = 1;} // product look-up
else if(!digitalRead(10) && !digitalRead(4)) {psdbtn = "a2"; isbtnpsd = 1;} // idk, someone educate
else if(!digitalRead(10) && !digitalRead(5)) {psdbtn = "a1"; isbtnpsd = 1;} // idk
else if(!digitalRead(11) && !digitalRead(2)) {psdbtn = "s/-"; isbtnpsd = 1;} // sale void/return
else if(!digitalRead(11) && !digitalRead(3)) {psdbtn = "perc"; isbtnpsd = 1;} // percentage (press after inputted value, so 123, %, and it'll show 1.23)
else if(!digitalRead(11) && !digitalRead(4)) {psdbtn = "st"; isbtnpsd = 1;} // subtotal (before tax, discounts, or rounding to nearest 0,05€?)
else if(!digitalRead(11) && !digitalRead(5)) {psdbtn = "tl"; isbtnpsd = 1;} // total (after tax? We have tax baked into the price in Europe, no?)
else {isbtnpsd = 0;}
switch(step) {
case 0:
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
break;
case 1:
digitalWrite(3, LOW);
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
break;
case 2:
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(2, HIGH);
break;
case 3:
digitalWrite(5, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(2, HIGH);
break;
case 4:
step = 254;
break;
}
if(isbtnpsd && (! isbtnack)) {
if((!(ison)) && psdbtn != "c/ON") {return;}
isbtnack = 1;
buttonprocess();
} else if((! isbtnpsd) && isbtnack) {
// Only reset after 20ms of no detection (full scan cycles)
if(noDetectTime == 0) noDetectTime = millis();
if(millis() - noDetectTime > 20) {
isbtnack = 0;
noDetectTime = 0;
}
} else if(isbtnpsd && isbtnack) {
noDetectTime = 0; // Reset timer if button detected again
}
step = step + 1;
dodisp();
dodisp2();
if((! ison)) {
nezobraz();
zobraz = -2;
zobraz2 = -2;
digitalWrite(a2, HIGH);
digitalWrite(b2, HIGH);
digitalWrite(c2, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(e2, HIGH);
digitalWrite(f2, HIGH);
digitalWrite(g2, HIGH);
digitalWrite(29, LOW);
delay(1);
keepoff();
}
}
void buttonprocess() {
if(psdbtn == "1") {
numplace(1);
} else if(psdbtn == "2") {
numplace(2);
} else if(psdbtn == "3") {
numplace(3);
} else if(psdbtn == "4") {
numplace(4);
} else if(psdbtn == "5") {
numplace(5);
} else if(psdbtn == "6") {
numplace(6);
} else if(psdbtn == "7") {
numplace(7);
} else if(psdbtn == "8") {
numplace(8);
} else if(psdbtn == "9") {
numplace(9);
} else if(psdbtn == "0") {
numplace(0);
} else if(psdbtn == "00") {
numplace(0);
numplace(0);
} else if(psdbtn == "c/ON") {
if((! ison)) {ison = 1; turnon();} else if(jetranzakcia == 2 && (!zadanecislo)) {turnon();} else {zadanecislo = 0;}
} else if(psdbtn == "#/OFF") {
if(ison == 1) {ison = 0;}
} else if(psdbtn == "x/↑") { // prints items list in PLU indeces
for(int i = 0; i < 73; i = i + 1) {
Serial.print(i);
Serial.print(".,");
Serial.print(plutovar[i]);
Serial.print(" ");
Serial.println(pgm_read_float(&plucena[i]));
}
} else if(psdbtn == "plu") {
if(zadanieplu == 1) {zadanieplu = 2; zadajplu();} else if(zadanieplu == 0 && (!zadanecislo)) {zadanieplu = 1;} else if(zadanieplu == 2) {zadanieplu = 0; zadanecislo = 0;}
else if((zadanieplu == 0) && zadanecislo) {cisloplu = zadanecislo; zadajplu(); zadanieplu = 2;}
} else if(psdbtn == "a2") {
if(jehotovost) {
jehotovost = 0; // platba je kartou, nezaokrúhluj
return;
}
if((!(jehotovost))){
jehotovost = 2; // keď stláčiš 2-krat po sebe, zneplatni doklad, ako keby predaj bol stornovaný, systém bude vedieť.
nezobraz();
digitalWrite(hun2, HIGH);
digitalWrite(ten2, HIGH);
digitalWrite(one2, HIGH);
delay(125);
waitnz(125);
nezobraz();
digitalWrite(hun2, HIGH);
digitalWrite(ten2, HIGH);
digitalWrite(one2, HIGH);
delay(125);
waitnz(125);
nezobraz();
digitalWrite(hun2, HIGH);
digitalWrite(ten2, HIGH);
digitalWrite(one2, HIGH);
delay(125);
waitnz(125);
nezobraz();
digitalWrite(hun2, HIGH);
digitalWrite(ten2, HIGH);
digitalWrite(one2, HIGH);
}
if(vydavok) {cenacelkom = vydavok; vydavok = 0;}
} else if(psdbtn == "a1") {
jehotovost = 1; // platba je hotovosťou, zaokrúhluj
if(jetranzakcia == 2) {vydavok = abs((hotovost - cenacelkom)); zadanecislo = 0;}
long vydcenty = vydavok * 100.0f;
while(vydcenty % 5) {vydcenty = vydcenty + 1;}
vydavok = vydcenty / 100.0f;
} else if(psdbtn == "s/-") {
Serial.print("Storno polozky. ");
String msgc1 = String((0.00f - cenariadok));
Serial.print(msgc1);
Serial.write(10);
cenacelkom = cenacelkom - cenariadok;
cenariadok = 0;
} else if(psdbtn == "perc") {
} else if(psdbtn == "st") {
if((!jetranzakcia)) {jetranzakcia = 1;}
if((!zadanieplu)) {
cenacelkom = cenacelkom + zadanacena;
String msg = "Nekonkretne";
String msg2 = String(zadanacena);
while(((msg.length() + msg2.length())) < 30) {msg += " "; msg.length();}
Serial.print((msg += msg2));
Serial.write(10);
cenariadok = zadanacena;
zadanacena = 0;
} else if(zadanieplu) {
cenariadok = (cenapolozka * zadanemnozstvo);
cenacelkom = cenacelkom + cenariadok;
String polozka = plutovar[cisloplu];
String msgd1 = " ";
msgd1 = msgd1 += String(zadanemnozstvo);
String msgd2 = String((zadanemnozstvo * cenapolozka));
String msgd3 = polozka += msgd1 += "ks ";
while(polozka.length() < 18) {polozka = polozka += " ";}
while((msgd3.length() + msgd2.length()) < 30) {msgd3 = msgd3 += " ";}
Serial.print(msgd3 += msgd2);
Serial.write(10);
}
num = cenacelkom * 100;
if(zadanieplu == 2) {zadanieplu = 0;}
zadanecislo = 0;
} else if(psdbtn == "tl") {
// if(jetranzakcia == 2) {digitalWrite(38, LOW);}
String msgn1 = "Subtotal bez dane: ";
String msgn2 = String(cenacelkom);
String msgn3 = "Celkom: ";
String msgn4 = "Sadzba DPH: ";
String msgn7 = "Zaokruhlenie: ";
cenadane = cenacelkom * (pgm_read_float(&dph));
String msgn5 = String(cenadane);
cenacelkom = cenacelkom * (pgm_read_float(&multprezdanenie));
float cenapzaokr = cenacelkom;
if(jehotovost == 1) {
long centy = 100 * cenacelkom;
while(centy % 5) {centy = centy + 1;}
cenacelkom = centy / 100.00f;
}
zaokruhlenie = cenacelkom - cenapzaokr;
String msgn6 = String(cenacelkom);
String msgn8 = String(zaokruhlenie);
Serial.print("- - - - - - - - - -");
Serial.write(10);
num = cenacelkom * 100.00f;
Serial.print(((msgn1) += (msgn2)));
Serial.write(10);
Serial.print(((msgn4) += (msgn5)));
Serial.write(10);
Serial.print(((msgn7) += (msgn8)));
Serial.write(10);
Serial.print(((msgn3) += (msgn6)));
Serial.write(10);
if(jehotovost == 1) {
Serial.print("Platba bola realizovana hotovostou.");
} else if((!jehotovost)) {
Serial.print("Platba bola realizovana bezhotovostne.");
} else {
Serial.print(" NEPLATNY DOKLAD!");
}
Serial.write(10);
Serial.print("Dakujeme za Vas nakup, pridte zas.");
Serial.write(10);
Serial.print(" ");
Serial.write(10);
Serial.print(" ");
Serial.write(10);
Serial.print(" TOPAZ s. r. o.");
Serial.write(10);
Serial.print("Podnik: Mesto123456");
Serial.write(10);
Serial.print("IcDPH: 12345678901234");
Serial.write(10);
Serial.print("Tel. cislo: 0912345678");
Serial.write(10);
waitnz(3000);
if(jehotovost == 1 && jetranzakcia == 1) {
jetranzakcia = 2;
} else if((!jehotovost) || jehotovost == 2) {Serial.end(); digitalWrite(38, LOW);}
}
}
void wait(unsigned long time) {
pastms = millis();
pastus = micros();
while(millis() - pastms < time) {dodisp();} // shows one value
num = 0;
dodisp();
pastms = millis();
pastus = micros();
}
void waitnz(unsigned long time) {
pastms = millis();
pastus = micros();
while(millis() - pastms < time) {dodisp();} // doesn't zero
dodisp();
pastms = millis();
pastus = micros();
}
void dodisp2() {
cislo2sto = ((num2 / 100) % 10);
cislo2desat = ((num2 / 10) % 10);
cislo2 = num2 % 10;
if(micros() - pastus > 5000) {
zobraz2 = zobraz2 + 1;
pastus = micros();
digitalWrite(a2, HIGH);
digitalWrite(b2, HIGH);
digitalWrite(c2, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(e2, HIGH);
digitalWrite(f2, HIGH);
digitalWrite(g2, HIGH);
}
if(zobraz2 >= 3) {zobraz2 = -1;}
switch(zobraz2) {
case 0:
zobraz2cislo = cislo2sto;
digitalWrite(one2, HIGH);
digitalWrite(ten2, HIGH);
digitalWrite(hun2, LOW);
break;
case 1:
zobraz2cislo = cislo2desat;
digitalWrite(one2, HIGH);
digitalWrite(hun2, HIGH);
digitalWrite(ten2, LOW);
break;
case 2:
zobraz2cislo = cislo2;
digitalWrite(hun2, HIGH);
digitalWrite(ten2, HIGH);
digitalWrite(one2, LOW);
break;
case -1:
digitalWrite(hun2, HIGH);
digitalWrite(ten2, HIGH);
digitalWrite(one2, HIGH);
break;
}
switch(zobraz2cislo) {
case 0:
digitalWrite(a2, LOW);
digitalWrite(b2, LOW);
digitalWrite(c2, LOW);
digitalWrite(d2, LOW);
digitalWrite(e2, LOW);
digitalWrite(f2, LOW);
digitalWrite(g2, HIGH);
break;
case 1:
digitalWrite(a2, HIGH);
digitalWrite(b2, LOW);
digitalWrite(c2, LOW);
digitalWrite(d2, HIGH);
digitalWrite(e2, HIGH);
digitalWrite(f2, HIGH);
digitalWrite(g2, HIGH);
break;
case 2:
digitalWrite(a2, LOW);
digitalWrite(b2, LOW);
digitalWrite(c2, HIGH);
digitalWrite(d2, LOW);
digitalWrite(e2, LOW);
digitalWrite(f2, HIGH);
digitalWrite(g2, LOW);
break;
case 3:
digitalWrite(a2, LOW);
digitalWrite(b2, LOW);
digitalWrite(c2, LOW);
digitalWrite(d2, LOW);
digitalWrite(e2, HIGH);
digitalWrite(f2, HIGH);
digitalWrite(g2, LOW);
break;
case 4:
digitalWrite(a2, HIGH);
digitalWrite(b2, LOW);
digitalWrite(c2, LOW);
digitalWrite(d2, HIGH);
digitalWrite(e2, HIGH);
digitalWrite(f2, LOW);
digitalWrite(g2, LOW);
break;
case 5:
digitalWrite(a2, LOW);
digitalWrite(b2, HIGH);
digitalWrite(c2, LOW);
digitalWrite(d2, LOW);
digitalWrite(e2, HIGH);
digitalWrite(f2, LOW);
digitalWrite(g2, LOW);
break;
case 6:
digitalWrite(a2, LOW);
digitalWrite(b2, HIGH);
digitalWrite(c2, LOW);
digitalWrite(d2, LOW);
digitalWrite(e2, LOW);
digitalWrite(f2, LOW);
digitalWrite(g2, LOW);
break;
case 7:
digitalWrite(a2, LOW);
digitalWrite(b2, LOW);
digitalWrite(c2, LOW);
digitalWrite(d2, HIGH);
digitalWrite(e2, HIGH);
digitalWrite(f2, HIGH);
digitalWrite(g2, HIGH);
break;
case 8:
digitalWrite(a2, LOW);
digitalWrite(b2, LOW);
digitalWrite(c2, LOW);
digitalWrite(d2, LOW);
digitalWrite(e2, LOW);
digitalWrite(f2, LOW);
digitalWrite(g2, LOW);
break;
case 9:
digitalWrite(a2, LOW);
digitalWrite(b2, LOW);
digitalWrite(c2, LOW);
digitalWrite(d2, LOW);
digitalWrite(e2, HIGH);
digitalWrite(f2, LOW);
digitalWrite(g2, LOW);
break;
}
}
void dodisp() {
present2 = micros();
if (num <= 9) {
cislodesat = 0;
cislodesat2 = 0;
cislosto = 0;
cislosto2 = 0;
cislotisic = 0;
cislotisic2 = 0;
cislodesattisic = 0;
cislodesattisic2 = 0;
cislostotisic = 0;
cislo = num;
}
if (num > 9) {
cislodesat = num / 10;
cislosto = num / 100;
cislotisic = num / 1000;
cislodesattisic = num / 10000;
cislostotisic = num / 100000;
intermid = cislodesat * 10;
intermid2 = cislosto * 10;
intermid3 = cislotisic * 10;
intermid4 = cislodesattisic * 10;
intermid5 = cislostotisic * 10;
cislodesat2 = cislodesat - intermid2;
cislosto2 = cislosto - intermid3;
cislotisic2 = cislotisic - intermid4;
cislodesattisic2 = cislodesattisic - intermid5;
cislo = num - intermid;
}
if (present2 - past2 >= 2500) {
nezobraz();
zobraz = zobraz + 1;
switch (zobraz) {
case 0:
c = 14;
d = 15;
zobrazCislo = cislostotisic;
zsts();
break;
case 1:
zobrazCislo = cislodesattisic2;
zdts();
break;
case 2:
zobrazCislo = cislotisic2;
ztis();
break;
case 3:
zobrazCislo = cislosto2;
if((!zadanieplu)) {
digitalWrite(30, LOW);
} else {digitalWrite(30, HIGH);}
zsto();
break;
case 4:
zobrazCislo = cislodesat2;
digitalWrite(30, HIGH);
// c = 15;
// d = 14; // do not forget to uncomment dynamic rewiring if you need it irl
zdst();
break;
case 5:
zobrazCislo = cislo;
// c = 15;
// d = 14;
zjdn();
break;
}
if (zobraz >= 6) {
zobraz = -1;
}
past2 = present2;
}
switch (zobrazCislo) {
case 0:
z0();
break;
case 1:
z1();
break;
case 2:
z2();
break;
case 3:
z3();
break;
case 4:
z4();
break;
case 5:
z5();
break;
case 6:
z6();
break;
case 7:
z7();
break;
case 8:
z8();
break;
case 9:
z9();
break;
}
}
void z1() {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void z2() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
void z3() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
void z4() {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void z5() {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void z6() {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void z7() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void z8() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void z9() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void z0() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void zjdn() {
digitalWrite(one, LOW);
digitalWrite(ten, HIGH);
digitalWrite(hund, HIGH);
digitalWrite(thou, HIGH);
digitalWrite(tetho, HIGH);
digitalWrite(hutho, HIGH);
}
void zdst() {
digitalWrite(one, HIGH);
digitalWrite(ten, LOW);
digitalWrite(hund, HIGH);
digitalWrite(thou, HIGH);
digitalWrite(tetho, HIGH);
digitalWrite(hutho, HIGH);
}
void zsto() {
digitalWrite(one, HIGH);
digitalWrite(ten, HIGH);
digitalWrite(hund, LOW);
digitalWrite(thou, HIGH);
digitalWrite(tetho, HIGH);
digitalWrite(hutho, HIGH);
}
void ztis() {
digitalWrite(one, HIGH);
digitalWrite(ten, HIGH);
digitalWrite(hund, HIGH);
digitalWrite(thou, LOW);
digitalWrite(tetho, HIGH);
digitalWrite(hutho, HIGH);
}
void zdts() {
digitalWrite(one, HIGH);
digitalWrite(ten, HIGH);
digitalWrite(hund, HIGH);
digitalWrite(thou, HIGH);
digitalWrite(tetho, LOW);
digitalWrite(hutho, HIGH);
}
void zsts() {
digitalWrite(one, HIGH);
digitalWrite(ten, HIGH);
digitalWrite(hund, HIGH);
digitalWrite(thou, HIGH);
digitalWrite(tetho, HIGH);
digitalWrite(hutho, LOW);
}
void nezobraz() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(one, HIGH);
digitalWrite(ten, HIGH);
digitalWrite(hund, HIGH);
digitalWrite(thou, HIGH);
digitalWrite(tetho, HIGH);
digitalWrite(hutho, HIGH);
}
void keepoff() {
digitalWrite(one2, HIGH);
digitalWrite(ten2, HIGH);
digitalWrite(hun2, HIGH);
delay(1);
Serial.end();
}
void turnon() {pastms2 = millis();
Serial.end();
while(millis() - pastms2 < 100) {}
digitalWrite(38, LOW); // reset the 'duino
}
void numplace(byte cisloztlacitka) {
zadanecislo = zadanecislo * 10;
zadanecislo = zadanecislo + cisloztlacitka;
}
void zadajplu() {
cenapolozka = pgm_read_float(&plucena[cisloplu]);
zadanecislo = 0;
}