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
main.cpp
- Committer:
- oh_snaep
- Date:
- 2022-01-31
- Revision:
- 0:fa9ec70cc128
File content as of revision 0:fa9ec70cc128:
#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(); }