Primjer kretanja kroz izbornike na SSD1306 OLED zaslonu uz pomoć 4 tipke.
Dependencies: mbed OLED_SSD1306
Video rada projekta : https://youtu.be/hMW1pZ-a_38
Logika kretanja kroz izbornike
Shema
Diff: main.cpp
- Revision:
- 0:fa9ec70cc128
diff -r 000000000000 -r fa9ec70cc128 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jan 31 20:44:44 2022 +0000 @@ -0,0 +1,261 @@ +#include "mbed.h" +#include "ikone.h" +#include "SSD1306I2C.h" + +Serial pc(USBTX, USBRX); + +Timer debounce; +Timer gasenje_zaslona; + +InterruptIn desno(D7); +InterruptIn potvrda(D5); +InterruptIn otkaz(D6); +InterruptIn lijevo(D4); + +bool aktuator=false; +bool potvrda_ulaska_u_izbornik=false; +bool potvrda_ulaska_u_podizbornik=false; +uint8_t postavka_gasenja_zaslona=15; //5, 15, 30 sekundi +//bool postavka_izbornika=false; + +void ispis_desno(void); +void ispis_potvrda(void); +void ispis_otkaz(void); +void ispis_lijevo(void); + +SSD1306I2C display(0x3c, D14, D15); + +DigitalOut myled(LED1); +void izbornik_tipke(void); + +uint8_t izbornik=0; +uint8_t pod_izbornik=0; +uint8_t postavka_izbornika=0; + +int main() +{ + + desno.rise(ispis_desno); + potvrda.rise(ispis_potvrda); + otkaz.rise(ispis_otkaz); + lijevo.rise(ispis_lijevo); + display.init(); + display.resetDisplay(); + display.setFont(ArialMT_Plain_10); + display.drawString(30,0,"Vanja Belosevic"); + display.drawString(35,20,"0246076901"); + display.drawString(38,40,"2021/2022"); + //display.drawStringMaxWidth(0,0,128,"Vanja Belosevic"); + //display.drawStringMaxWidth(0,20,128,"0246076901"); + //display.drawStringMaxWidth(0,40,128,"2021/2022"); + display.display(); + pc.printf("Mirko pokrenut!"); + wait(5); + display.clear(); + gasenje_zaslona.start(); + + while(1) { + + if(gasenje_zaslona >= postavka_gasenja_zaslona) { + display.displayOff(); + } else { + display.displayOn(); + } + + if(izbornik == 0 && potvrda_ulaska_u_podizbornik == false && potvrda_ulaska_u_izbornik == false) { + display.clear(); + display.setFont(ArialMT_Plain_10); + display.drawString(0,0,"Stanje aktuatora:"); + display.setFont(ArialMT_Plain_16); + if(aktuator == false) { + display.drawString(0,20,"OFF"); + } else if(aktuator == true) { + display.drawString(0,20,"ON"); + } + } else if(izbornik == 1 || (potvrda_ulaska_u_izbornik == true || potvrda_ulaska_u_podizbornik == true)) { + if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == false) { + display.clear(); + display.drawXbm(40,0,48,48,settings_48x48); //x početno, y početno, širina, visina, char polje od slike + } else if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) { + if(pod_izbornik == 0) { + display.clear(); + display.setFont(ArialMT_Plain_10); + display.drawStringMaxWidth(0,0,128,"Odabir stanja aktuatora?"); + } else if(pod_izbornik == 1) { + display.clear(); + display.setFont(ArialMT_Plain_10); + display.drawStringMaxWidth(0,0,128,"Odabir perioda automatskog gasenja zaslona?"); + } + } else if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == true) { + display.clear(); + display.setFont(ArialMT_Plain_10); + if(pod_izbornik == 0) { + if(postavka_izbornika == 0) { + display.drawStringMaxWidth(0,0,128,"Aktuator :"); + display.setFont(ArialMT_Plain_16); + display.drawString(60,30,"OFF?"); + } else if(postavka_izbornika == 1) { + display.drawStringMaxWidth(0,0,128,"Aktuator :"); + display.setFont(ArialMT_Plain_16); + display.drawString(60,30,"ON?"); + } + } else if(pod_izbornik == 1) { + if(postavka_izbornika == 0) { + display.drawStringMaxWidth(0,0,128,"Odabir :"); + display.drawStringMaxWidth(0,30,128,"5 sekundi?"); + } else if(postavka_izbornika == 1) { + display.drawStringMaxWidth(0,0,128,"Odabir :"); + display.drawStringMaxWidth(0,30,128,"15 sekundi?"); + } else if(postavka_izbornika == 2) { + display.drawStringMaxWidth(0,0,128,"Odabir :"); + display.drawStringMaxWidth(0,30,128,"30 sekundi?"); + } + } + } + + } + izbornik_tipke(); + display.display(); + } +} + +//wait(10.0); + +//pc.printf("%d\n",x); + + +void ispis_desno() +{ + debounce.start(); + if(debounce.read_ms() >= 150) { + pc.printf("desna tipka pritisnuta!\n"); + if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == false) { + --izbornik; + if(izbornik >= 2) izbornik = 1; + } else if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) { + //potvrda_ulaska_u_izbornik = false; + --pod_izbornik; + if(pod_izbornik >= 2) pod_izbornik = 1; + } else if(potvrda_ulaska_u_podizbornik == true && potvrda_ulaska_u_izbornik == false) { + --postavka_izbornika; + if(pod_izbornik == 0) { + if(postavka_izbornika >= 2) postavka_izbornika = 1; + } else if (pod_izbornik==1) { + if(postavka_izbornika >= 3) postavka_izbornika = 2; + } + } + debounce.reset(); + display.displayOn(); + gasenje_zaslona.reset(); + pc.printf("Stanje varijable izbornik: %d\n",izbornik); + pc.printf("Stanje varijable pod_izbornik: %d\n",pod_izbornik); + pc.printf("Stanje varijable postavka_izbornika %d",postavka_izbornika); + pc.printf("potvrda_ulaska_u_izbornik: %d\n",potvrda_ulaska_u_izbornik); + pc.printf("potvrda_ulaska_u_podizbornik: %d\n",potvrda_ulaska_u_podizbornik); + } + +} + +void ispis_potvrda() +{ + debounce.start(); + if(debounce.read_ms() >= 150) { + pc.printf("tipka potvda pritisnuta!\n"); + debounce.reset(); + display.displayOn(); + gasenje_zaslona.reset(); + if(izbornik == 1 && potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == false) { + potvrda_ulaska_u_izbornik = true; + potvrda_ulaska_u_podizbornik = false; + pod_izbornik = 0; + postavka_izbornika = 0; + } else if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) { + potvrda_ulaska_u_podizbornik = true; + potvrda_ulaska_u_izbornik = false; + } else if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == true) { + if(pod_izbornik == 0 && postavka_izbornika == 0) { + aktuator = false; + } else if(pod_izbornik == 0 && postavka_izbornika == 1) { + aktuator = true; + } else if(pod_izbornik == 1 && postavka_izbornika == 0) { + postavka_gasenja_zaslona=5; + } else if(pod_izbornik == 1 && postavka_izbornika == 1) { + postavka_gasenja_zaslona=15; + } else if(pod_izbornik == 1 && postavka_izbornika == 2) { + postavka_gasenja_zaslona=30; + } + potvrda_ulaska_u_podizbornik = false; + potvrda_ulaska_u_izbornik = true; + } + pc.printf("potvrda_ulaska_u_izbornik: %d\n",potvrda_ulaska_u_izbornik); + pc.printf("potvrda_ulaska_u_podizbornik: %d\n",potvrda_ulaska_u_podizbornik); + } +} + +void ispis_otkaz() +{ + debounce.start(); + if(debounce.read_ms() >= 150) { + pc.printf("tipka otkaz pritisnuta!\n"); + debounce.reset(); + display.displayOn(); + gasenje_zaslona.reset(); + + if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) { + pod_izbornik=0; + izbornik=1; + potvrda_ulaska_u_izbornik = false; + } else if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == true) { + potvrda_ulaska_u_podizbornik = false; + potvrda_ulaska_u_izbornik = true; + pod_izbornik=0; + postavka_izbornika=0; + izbornik=1; + } + pc.printf("potvrda_ulaska_u_izbornik: %d\n",potvrda_ulaska_u_izbornik); + pc.printf("potvrda_ulaska_u_podizbornik: %d\n",potvrda_ulaska_u_podizbornik); + } +} + +void ispis_lijevo() +{ + debounce.start(); + if(debounce.read_ms() >= 150) { + pc.printf("lijeva tipka pritisnuta!\n"); + + if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == false) { + ++izbornik; + if(izbornik >= 2) izbornik = 0; + } else if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) { + ++pod_izbornik; + if(pod_izbornik >= 2) pod_izbornik = 0; + } else if(potvrda_ulaska_u_podizbornik == true && potvrda_ulaska_u_izbornik == false) { + ++postavka_izbornika; + if(pod_izbornik == 0) { + if(postavka_izbornika >= 2) postavka_izbornika = 0; + } else if (pod_izbornik==1) { + if(postavka_izbornika >= 3) postavka_izbornika = 0; + } + } + debounce.reset(); + display.displayOn(); + gasenje_zaslona.reset(); + pc.printf("Stanje varijable izbornik: %d\n",izbornik); + pc.printf("Stanje varijable pod_izbornik: %d\n",pod_izbornik); + pc.printf("Stanje varijable postavka_izbornika: %d\n",postavka_izbornika); + pc.printf("potvrda_ulaska_u_izbornik: %d\n",potvrda_ulaska_u_izbornik); + pc.printf("potvrda_ulaska_u_podizbornik: %d\n",potvrda_ulaska_u_podizbornik); + } + +} + +//trajni izbornik na dnu zaslona, sadrži ikone za korištenje tipki +void izbornik_tipke() +{ + display.drawHorizontalLine(0,52,128); + display.drawXbm(0,55,12,9,strelica_lijevo_12x9); + display.drawXbm(108,55,12,9,strelica_desno_12x9); + display.drawXbm(42,55,9,9,x_9x9); + display.drawXbm(75,55,11,9,check_11x9); + //display.display(); +}