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 https://os.mbed.com/media/uploads/oh_snaep/izrezak.jpg

Shema https://os.mbed.com/media/uploads/oh_snaep/shema-1.png

Committer:
oh_snaep
Date:
Mon Jan 31 20:44:44 2022 +0000
Revision:
0:fa9ec70cc128
Predaja projekta

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oh_snaep 0:fa9ec70cc128 1 #include "mbed.h"
oh_snaep 0:fa9ec70cc128 2 #include "ikone.h"
oh_snaep 0:fa9ec70cc128 3 #include "SSD1306I2C.h"
oh_snaep 0:fa9ec70cc128 4
oh_snaep 0:fa9ec70cc128 5 Serial pc(USBTX, USBRX);
oh_snaep 0:fa9ec70cc128 6
oh_snaep 0:fa9ec70cc128 7 Timer debounce;
oh_snaep 0:fa9ec70cc128 8 Timer gasenje_zaslona;
oh_snaep 0:fa9ec70cc128 9
oh_snaep 0:fa9ec70cc128 10 InterruptIn desno(D7);
oh_snaep 0:fa9ec70cc128 11 InterruptIn potvrda(D5);
oh_snaep 0:fa9ec70cc128 12 InterruptIn otkaz(D6);
oh_snaep 0:fa9ec70cc128 13 InterruptIn lijevo(D4);
oh_snaep 0:fa9ec70cc128 14
oh_snaep 0:fa9ec70cc128 15 bool aktuator=false;
oh_snaep 0:fa9ec70cc128 16 bool potvrda_ulaska_u_izbornik=false;
oh_snaep 0:fa9ec70cc128 17 bool potvrda_ulaska_u_podizbornik=false;
oh_snaep 0:fa9ec70cc128 18 uint8_t postavka_gasenja_zaslona=15; //5, 15, 30 sekundi
oh_snaep 0:fa9ec70cc128 19 //bool postavka_izbornika=false;
oh_snaep 0:fa9ec70cc128 20
oh_snaep 0:fa9ec70cc128 21 void ispis_desno(void);
oh_snaep 0:fa9ec70cc128 22 void ispis_potvrda(void);
oh_snaep 0:fa9ec70cc128 23 void ispis_otkaz(void);
oh_snaep 0:fa9ec70cc128 24 void ispis_lijevo(void);
oh_snaep 0:fa9ec70cc128 25
oh_snaep 0:fa9ec70cc128 26 SSD1306I2C display(0x3c, D14, D15);
oh_snaep 0:fa9ec70cc128 27
oh_snaep 0:fa9ec70cc128 28 DigitalOut myled(LED1);
oh_snaep 0:fa9ec70cc128 29 void izbornik_tipke(void);
oh_snaep 0:fa9ec70cc128 30
oh_snaep 0:fa9ec70cc128 31 uint8_t izbornik=0;
oh_snaep 0:fa9ec70cc128 32 uint8_t pod_izbornik=0;
oh_snaep 0:fa9ec70cc128 33 uint8_t postavka_izbornika=0;
oh_snaep 0:fa9ec70cc128 34
oh_snaep 0:fa9ec70cc128 35 int main()
oh_snaep 0:fa9ec70cc128 36 {
oh_snaep 0:fa9ec70cc128 37
oh_snaep 0:fa9ec70cc128 38 desno.rise(ispis_desno);
oh_snaep 0:fa9ec70cc128 39 potvrda.rise(ispis_potvrda);
oh_snaep 0:fa9ec70cc128 40 otkaz.rise(ispis_otkaz);
oh_snaep 0:fa9ec70cc128 41 lijevo.rise(ispis_lijevo);
oh_snaep 0:fa9ec70cc128 42 display.init();
oh_snaep 0:fa9ec70cc128 43 display.resetDisplay();
oh_snaep 0:fa9ec70cc128 44 display.setFont(ArialMT_Plain_10);
oh_snaep 0:fa9ec70cc128 45 display.drawString(30,0,"Vanja Belosevic");
oh_snaep 0:fa9ec70cc128 46 display.drawString(35,20,"0246076901");
oh_snaep 0:fa9ec70cc128 47 display.drawString(38,40,"2021/2022");
oh_snaep 0:fa9ec70cc128 48 //display.drawStringMaxWidth(0,0,128,"Vanja Belosevic");
oh_snaep 0:fa9ec70cc128 49 //display.drawStringMaxWidth(0,20,128,"0246076901");
oh_snaep 0:fa9ec70cc128 50 //display.drawStringMaxWidth(0,40,128,"2021/2022");
oh_snaep 0:fa9ec70cc128 51 display.display();
oh_snaep 0:fa9ec70cc128 52 pc.printf("Mirko pokrenut!");
oh_snaep 0:fa9ec70cc128 53 wait(5);
oh_snaep 0:fa9ec70cc128 54 display.clear();
oh_snaep 0:fa9ec70cc128 55 gasenje_zaslona.start();
oh_snaep 0:fa9ec70cc128 56
oh_snaep 0:fa9ec70cc128 57 while(1) {
oh_snaep 0:fa9ec70cc128 58
oh_snaep 0:fa9ec70cc128 59 if(gasenje_zaslona >= postavka_gasenja_zaslona) {
oh_snaep 0:fa9ec70cc128 60 display.displayOff();
oh_snaep 0:fa9ec70cc128 61 } else {
oh_snaep 0:fa9ec70cc128 62 display.displayOn();
oh_snaep 0:fa9ec70cc128 63 }
oh_snaep 0:fa9ec70cc128 64
oh_snaep 0:fa9ec70cc128 65 if(izbornik == 0 && potvrda_ulaska_u_podizbornik == false && potvrda_ulaska_u_izbornik == false) {
oh_snaep 0:fa9ec70cc128 66 display.clear();
oh_snaep 0:fa9ec70cc128 67 display.setFont(ArialMT_Plain_10);
oh_snaep 0:fa9ec70cc128 68 display.drawString(0,0,"Stanje aktuatora:");
oh_snaep 0:fa9ec70cc128 69 display.setFont(ArialMT_Plain_16);
oh_snaep 0:fa9ec70cc128 70 if(aktuator == false) {
oh_snaep 0:fa9ec70cc128 71 display.drawString(0,20,"OFF");
oh_snaep 0:fa9ec70cc128 72 } else if(aktuator == true) {
oh_snaep 0:fa9ec70cc128 73 display.drawString(0,20,"ON");
oh_snaep 0:fa9ec70cc128 74 }
oh_snaep 0:fa9ec70cc128 75 } else if(izbornik == 1 || (potvrda_ulaska_u_izbornik == true || potvrda_ulaska_u_podizbornik == true)) {
oh_snaep 0:fa9ec70cc128 76 if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 77 display.clear();
oh_snaep 0:fa9ec70cc128 78 display.drawXbm(40,0,48,48,settings_48x48); //x početno, y početno, širina, visina, char polje od slike
oh_snaep 0:fa9ec70cc128 79 } else if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 80 if(pod_izbornik == 0) {
oh_snaep 0:fa9ec70cc128 81 display.clear();
oh_snaep 0:fa9ec70cc128 82 display.setFont(ArialMT_Plain_10);
oh_snaep 0:fa9ec70cc128 83 display.drawStringMaxWidth(0,0,128,"Odabir stanja aktuatora?");
oh_snaep 0:fa9ec70cc128 84 } else if(pod_izbornik == 1) {
oh_snaep 0:fa9ec70cc128 85 display.clear();
oh_snaep 0:fa9ec70cc128 86 display.setFont(ArialMT_Plain_10);
oh_snaep 0:fa9ec70cc128 87 display.drawStringMaxWidth(0,0,128,"Odabir perioda automatskog gasenja zaslona?");
oh_snaep 0:fa9ec70cc128 88 }
oh_snaep 0:fa9ec70cc128 89 } else if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == true) {
oh_snaep 0:fa9ec70cc128 90 display.clear();
oh_snaep 0:fa9ec70cc128 91 display.setFont(ArialMT_Plain_10);
oh_snaep 0:fa9ec70cc128 92 if(pod_izbornik == 0) {
oh_snaep 0:fa9ec70cc128 93 if(postavka_izbornika == 0) {
oh_snaep 0:fa9ec70cc128 94 display.drawStringMaxWidth(0,0,128,"Aktuator :");
oh_snaep 0:fa9ec70cc128 95 display.setFont(ArialMT_Plain_16);
oh_snaep 0:fa9ec70cc128 96 display.drawString(60,30,"OFF?");
oh_snaep 0:fa9ec70cc128 97 } else if(postavka_izbornika == 1) {
oh_snaep 0:fa9ec70cc128 98 display.drawStringMaxWidth(0,0,128,"Aktuator :");
oh_snaep 0:fa9ec70cc128 99 display.setFont(ArialMT_Plain_16);
oh_snaep 0:fa9ec70cc128 100 display.drawString(60,30,"ON?");
oh_snaep 0:fa9ec70cc128 101 }
oh_snaep 0:fa9ec70cc128 102 } else if(pod_izbornik == 1) {
oh_snaep 0:fa9ec70cc128 103 if(postavka_izbornika == 0) {
oh_snaep 0:fa9ec70cc128 104 display.drawStringMaxWidth(0,0,128,"Odabir :");
oh_snaep 0:fa9ec70cc128 105 display.drawStringMaxWidth(0,30,128,"5 sekundi?");
oh_snaep 0:fa9ec70cc128 106 } else if(postavka_izbornika == 1) {
oh_snaep 0:fa9ec70cc128 107 display.drawStringMaxWidth(0,0,128,"Odabir :");
oh_snaep 0:fa9ec70cc128 108 display.drawStringMaxWidth(0,30,128,"15 sekundi?");
oh_snaep 0:fa9ec70cc128 109 } else if(postavka_izbornika == 2) {
oh_snaep 0:fa9ec70cc128 110 display.drawStringMaxWidth(0,0,128,"Odabir :");
oh_snaep 0:fa9ec70cc128 111 display.drawStringMaxWidth(0,30,128,"30 sekundi?");
oh_snaep 0:fa9ec70cc128 112 }
oh_snaep 0:fa9ec70cc128 113 }
oh_snaep 0:fa9ec70cc128 114 }
oh_snaep 0:fa9ec70cc128 115
oh_snaep 0:fa9ec70cc128 116 }
oh_snaep 0:fa9ec70cc128 117 izbornik_tipke();
oh_snaep 0:fa9ec70cc128 118 display.display();
oh_snaep 0:fa9ec70cc128 119 }
oh_snaep 0:fa9ec70cc128 120 }
oh_snaep 0:fa9ec70cc128 121
oh_snaep 0:fa9ec70cc128 122 //wait(10.0);
oh_snaep 0:fa9ec70cc128 123
oh_snaep 0:fa9ec70cc128 124 //pc.printf("%d\n",x);
oh_snaep 0:fa9ec70cc128 125
oh_snaep 0:fa9ec70cc128 126
oh_snaep 0:fa9ec70cc128 127 void ispis_desno()
oh_snaep 0:fa9ec70cc128 128 {
oh_snaep 0:fa9ec70cc128 129 debounce.start();
oh_snaep 0:fa9ec70cc128 130 if(debounce.read_ms() >= 150) {
oh_snaep 0:fa9ec70cc128 131 pc.printf("desna tipka pritisnuta!\n");
oh_snaep 0:fa9ec70cc128 132 if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 133 --izbornik;
oh_snaep 0:fa9ec70cc128 134 if(izbornik >= 2) izbornik = 1;
oh_snaep 0:fa9ec70cc128 135 } else if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 136 //potvrda_ulaska_u_izbornik = false;
oh_snaep 0:fa9ec70cc128 137 --pod_izbornik;
oh_snaep 0:fa9ec70cc128 138 if(pod_izbornik >= 2) pod_izbornik = 1;
oh_snaep 0:fa9ec70cc128 139 } else if(potvrda_ulaska_u_podizbornik == true && potvrda_ulaska_u_izbornik == false) {
oh_snaep 0:fa9ec70cc128 140 --postavka_izbornika;
oh_snaep 0:fa9ec70cc128 141 if(pod_izbornik == 0) {
oh_snaep 0:fa9ec70cc128 142 if(postavka_izbornika >= 2) postavka_izbornika = 1;
oh_snaep 0:fa9ec70cc128 143 } else if (pod_izbornik==1) {
oh_snaep 0:fa9ec70cc128 144 if(postavka_izbornika >= 3) postavka_izbornika = 2;
oh_snaep 0:fa9ec70cc128 145 }
oh_snaep 0:fa9ec70cc128 146 }
oh_snaep 0:fa9ec70cc128 147 debounce.reset();
oh_snaep 0:fa9ec70cc128 148 display.displayOn();
oh_snaep 0:fa9ec70cc128 149 gasenje_zaslona.reset();
oh_snaep 0:fa9ec70cc128 150 pc.printf("Stanje varijable izbornik: %d\n",izbornik);
oh_snaep 0:fa9ec70cc128 151 pc.printf("Stanje varijable pod_izbornik: %d\n",pod_izbornik);
oh_snaep 0:fa9ec70cc128 152 pc.printf("Stanje varijable postavka_izbornika %d",postavka_izbornika);
oh_snaep 0:fa9ec70cc128 153 pc.printf("potvrda_ulaska_u_izbornik: %d\n",potvrda_ulaska_u_izbornik);
oh_snaep 0:fa9ec70cc128 154 pc.printf("potvrda_ulaska_u_podizbornik: %d\n",potvrda_ulaska_u_podizbornik);
oh_snaep 0:fa9ec70cc128 155 }
oh_snaep 0:fa9ec70cc128 156
oh_snaep 0:fa9ec70cc128 157 }
oh_snaep 0:fa9ec70cc128 158
oh_snaep 0:fa9ec70cc128 159 void ispis_potvrda()
oh_snaep 0:fa9ec70cc128 160 {
oh_snaep 0:fa9ec70cc128 161 debounce.start();
oh_snaep 0:fa9ec70cc128 162 if(debounce.read_ms() >= 150) {
oh_snaep 0:fa9ec70cc128 163 pc.printf("tipka potvda pritisnuta!\n");
oh_snaep 0:fa9ec70cc128 164 debounce.reset();
oh_snaep 0:fa9ec70cc128 165 display.displayOn();
oh_snaep 0:fa9ec70cc128 166 gasenje_zaslona.reset();
oh_snaep 0:fa9ec70cc128 167 if(izbornik == 1 && potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 168 potvrda_ulaska_u_izbornik = true;
oh_snaep 0:fa9ec70cc128 169 potvrda_ulaska_u_podizbornik = false;
oh_snaep 0:fa9ec70cc128 170 pod_izbornik = 0;
oh_snaep 0:fa9ec70cc128 171 postavka_izbornika = 0;
oh_snaep 0:fa9ec70cc128 172 } else if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 173 potvrda_ulaska_u_podizbornik = true;
oh_snaep 0:fa9ec70cc128 174 potvrda_ulaska_u_izbornik = false;
oh_snaep 0:fa9ec70cc128 175 } else if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == true) {
oh_snaep 0:fa9ec70cc128 176 if(pod_izbornik == 0 && postavka_izbornika == 0) {
oh_snaep 0:fa9ec70cc128 177 aktuator = false;
oh_snaep 0:fa9ec70cc128 178 } else if(pod_izbornik == 0 && postavka_izbornika == 1) {
oh_snaep 0:fa9ec70cc128 179 aktuator = true;
oh_snaep 0:fa9ec70cc128 180 } else if(pod_izbornik == 1 && postavka_izbornika == 0) {
oh_snaep 0:fa9ec70cc128 181 postavka_gasenja_zaslona=5;
oh_snaep 0:fa9ec70cc128 182 } else if(pod_izbornik == 1 && postavka_izbornika == 1) {
oh_snaep 0:fa9ec70cc128 183 postavka_gasenja_zaslona=15;
oh_snaep 0:fa9ec70cc128 184 } else if(pod_izbornik == 1 && postavka_izbornika == 2) {
oh_snaep 0:fa9ec70cc128 185 postavka_gasenja_zaslona=30;
oh_snaep 0:fa9ec70cc128 186 }
oh_snaep 0:fa9ec70cc128 187 potvrda_ulaska_u_podizbornik = false;
oh_snaep 0:fa9ec70cc128 188 potvrda_ulaska_u_izbornik = true;
oh_snaep 0:fa9ec70cc128 189 }
oh_snaep 0:fa9ec70cc128 190 pc.printf("potvrda_ulaska_u_izbornik: %d\n",potvrda_ulaska_u_izbornik);
oh_snaep 0:fa9ec70cc128 191 pc.printf("potvrda_ulaska_u_podizbornik: %d\n",potvrda_ulaska_u_podizbornik);
oh_snaep 0:fa9ec70cc128 192 }
oh_snaep 0:fa9ec70cc128 193 }
oh_snaep 0:fa9ec70cc128 194
oh_snaep 0:fa9ec70cc128 195 void ispis_otkaz()
oh_snaep 0:fa9ec70cc128 196 {
oh_snaep 0:fa9ec70cc128 197 debounce.start();
oh_snaep 0:fa9ec70cc128 198 if(debounce.read_ms() >= 150) {
oh_snaep 0:fa9ec70cc128 199 pc.printf("tipka otkaz pritisnuta!\n");
oh_snaep 0:fa9ec70cc128 200 debounce.reset();
oh_snaep 0:fa9ec70cc128 201 display.displayOn();
oh_snaep 0:fa9ec70cc128 202 gasenje_zaslona.reset();
oh_snaep 0:fa9ec70cc128 203
oh_snaep 0:fa9ec70cc128 204 if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 205 pod_izbornik=0;
oh_snaep 0:fa9ec70cc128 206 izbornik=1;
oh_snaep 0:fa9ec70cc128 207 potvrda_ulaska_u_izbornik = false;
oh_snaep 0:fa9ec70cc128 208 } else if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == true) {
oh_snaep 0:fa9ec70cc128 209 potvrda_ulaska_u_podizbornik = false;
oh_snaep 0:fa9ec70cc128 210 potvrda_ulaska_u_izbornik = true;
oh_snaep 0:fa9ec70cc128 211 pod_izbornik=0;
oh_snaep 0:fa9ec70cc128 212 postavka_izbornika=0;
oh_snaep 0:fa9ec70cc128 213 izbornik=1;
oh_snaep 0:fa9ec70cc128 214 }
oh_snaep 0:fa9ec70cc128 215 pc.printf("potvrda_ulaska_u_izbornik: %d\n",potvrda_ulaska_u_izbornik);
oh_snaep 0:fa9ec70cc128 216 pc.printf("potvrda_ulaska_u_podizbornik: %d\n",potvrda_ulaska_u_podizbornik);
oh_snaep 0:fa9ec70cc128 217 }
oh_snaep 0:fa9ec70cc128 218 }
oh_snaep 0:fa9ec70cc128 219
oh_snaep 0:fa9ec70cc128 220 void ispis_lijevo()
oh_snaep 0:fa9ec70cc128 221 {
oh_snaep 0:fa9ec70cc128 222 debounce.start();
oh_snaep 0:fa9ec70cc128 223 if(debounce.read_ms() >= 150) {
oh_snaep 0:fa9ec70cc128 224 pc.printf("lijeva tipka pritisnuta!\n");
oh_snaep 0:fa9ec70cc128 225
oh_snaep 0:fa9ec70cc128 226 if(potvrda_ulaska_u_izbornik == false && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 227 ++izbornik;
oh_snaep 0:fa9ec70cc128 228 if(izbornik >= 2) izbornik = 0;
oh_snaep 0:fa9ec70cc128 229 } else if(potvrda_ulaska_u_izbornik == true && potvrda_ulaska_u_podizbornik == false) {
oh_snaep 0:fa9ec70cc128 230 ++pod_izbornik;
oh_snaep 0:fa9ec70cc128 231 if(pod_izbornik >= 2) pod_izbornik = 0;
oh_snaep 0:fa9ec70cc128 232 } else if(potvrda_ulaska_u_podizbornik == true && potvrda_ulaska_u_izbornik == false) {
oh_snaep 0:fa9ec70cc128 233 ++postavka_izbornika;
oh_snaep 0:fa9ec70cc128 234 if(pod_izbornik == 0) {
oh_snaep 0:fa9ec70cc128 235 if(postavka_izbornika >= 2) postavka_izbornika = 0;
oh_snaep 0:fa9ec70cc128 236 } else if (pod_izbornik==1) {
oh_snaep 0:fa9ec70cc128 237 if(postavka_izbornika >= 3) postavka_izbornika = 0;
oh_snaep 0:fa9ec70cc128 238 }
oh_snaep 0:fa9ec70cc128 239 }
oh_snaep 0:fa9ec70cc128 240 debounce.reset();
oh_snaep 0:fa9ec70cc128 241 display.displayOn();
oh_snaep 0:fa9ec70cc128 242 gasenje_zaslona.reset();
oh_snaep 0:fa9ec70cc128 243 pc.printf("Stanje varijable izbornik: %d\n",izbornik);
oh_snaep 0:fa9ec70cc128 244 pc.printf("Stanje varijable pod_izbornik: %d\n",pod_izbornik);
oh_snaep 0:fa9ec70cc128 245 pc.printf("Stanje varijable postavka_izbornika: %d\n",postavka_izbornika);
oh_snaep 0:fa9ec70cc128 246 pc.printf("potvrda_ulaska_u_izbornik: %d\n",potvrda_ulaska_u_izbornik);
oh_snaep 0:fa9ec70cc128 247 pc.printf("potvrda_ulaska_u_podizbornik: %d\n",potvrda_ulaska_u_podizbornik);
oh_snaep 0:fa9ec70cc128 248 }
oh_snaep 0:fa9ec70cc128 249
oh_snaep 0:fa9ec70cc128 250 }
oh_snaep 0:fa9ec70cc128 251
oh_snaep 0:fa9ec70cc128 252 //trajni izbornik na dnu zaslona, sadrži ikone za korištenje tipki
oh_snaep 0:fa9ec70cc128 253 void izbornik_tipke()
oh_snaep 0:fa9ec70cc128 254 {
oh_snaep 0:fa9ec70cc128 255 display.drawHorizontalLine(0,52,128);
oh_snaep 0:fa9ec70cc128 256 display.drawXbm(0,55,12,9,strelica_lijevo_12x9);
oh_snaep 0:fa9ec70cc128 257 display.drawXbm(108,55,12,9,strelica_desno_12x9);
oh_snaep 0:fa9ec70cc128 258 display.drawXbm(42,55,9,9,x_9x9);
oh_snaep 0:fa9ec70cc128 259 display.drawXbm(75,55,11,9,check_11x9);
oh_snaep 0:fa9ec70cc128 260 //display.display();
oh_snaep 0:fa9ec70cc128 261 }