Zadatak za ispit iz kolegija Mikroupravljači
Dependencies: TextLCD
mikrovalna.cpp@0:a584b83122e6, 2019-03-22 (annotated)
- Committer:
- dsambolek
- Date:
- Fri Mar 22 17:01:34 2019 +0000
- Revision:
- 0:a584b83122e6
fgff
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dsambolek | 0:a584b83122e6 | 1 | #include "mbed.h" |
dsambolek | 0:a584b83122e6 | 2 | #include "TextLCD.h" |
dsambolek | 0:a584b83122e6 | 3 | #include "mikrovalna.h" |
dsambolek | 0:a584b83122e6 | 4 | |
dsambolek | 0:a584b83122e6 | 5 | //inicijalizacija klase |
dsambolek | 0:a584b83122e6 | 6 | Mikrovalna::Mikrovalna(PinName startstopPin, PinName sekundePin, PinName snagaPin): startstop(startstopPin), sekunde(sekundePin), snaga(snagaPin), lcd(p19, p20, p21, p22, p23, p24){ |
dsambolek | 0:a584b83122e6 | 7 | startstop.rise(this, &Mikrovalna::pali_gasi); //poziv funkcije za paljenje/gašenje mikrovalne pećnice |
dsambolek | 0:a584b83122e6 | 8 | sekunde.rise(this, &Mikrovalna::namjesti_vrijeme); //poziv funkcije povećvanje vremena aktivnosti mikrovalne |
dsambolek | 0:a584b83122e6 | 9 | snaga.rise(this, &Mikrovalna::namjesti_snagu); //poziv funkcije za paljenje vaskih lampica pritiskom na tipku, palu se više lampica ako je potrebna veća snaga |
dsambolek | 0:a584b83122e6 | 10 | |
dsambolek | 0:a584b83122e6 | 11 | debounce_startstop.start(); //start timera za debounce |
dsambolek | 0:a584b83122e6 | 12 | debounce_sekunde.start(); //start timera za debounce |
dsambolek | 0:a584b83122e6 | 13 | debounce_snaga.start(); //start timera za debounce |
dsambolek | 0:a584b83122e6 | 14 | |
dsambolek | 0:a584b83122e6 | 15 | timer.start(); //start timera brojača |
dsambolek | 0:a584b83122e6 | 16 | |
dsambolek | 0:a584b83122e6 | 17 | uklj_isklj=0; //inicijalizacija pomoćnih varijabli |
dsambolek | 0:a584b83122e6 | 18 | vrijeme=0; //inicijalizacija pomoćnih varijabli |
dsambolek | 0:a584b83122e6 | 19 | snaga_mod=0; //inicijalizacija pomoćnih varijabli |
dsambolek | 0:a584b83122e6 | 20 | i=0; //inicijalizacija pomoćnih varijabli |
dsambolek | 0:a584b83122e6 | 21 | |
dsambolek | 0:a584b83122e6 | 22 | lcd.cls(); //čišćenje displeja |
dsambolek | 0:a584b83122e6 | 23 | lcd.locate(0,3); //pozicioniranje na displeju |
dsambolek | 0:a584b83122e6 | 24 | lcd.printf("\nNamjesti snagu/vrijeme i pokreni"); //ispis na displeju |
dsambolek | 0:a584b83122e6 | 25 | } |
dsambolek | 0:a584b83122e6 | 26 | |
dsambolek | 0:a584b83122e6 | 27 | |
dsambolek | 0:a584b83122e6 | 28 | void Mikrovalna::namjesti_snagu(){ //funkcija za računanje snage na pritisak tipkala |
dsambolek | 0:a584b83122e6 | 29 | if(debounce_snaga.read_ms()>200){ |
dsambolek | 0:a584b83122e6 | 30 | if(snaga_mod<4){ |
dsambolek | 0:a584b83122e6 | 31 | snaga_mod=snaga_mod+1; |
dsambolek | 0:a584b83122e6 | 32 | }else{ |
dsambolek | 0:a584b83122e6 | 33 | snaga_mod=0; |
dsambolek | 0:a584b83122e6 | 34 | } |
dsambolek | 0:a584b83122e6 | 35 | debounce_snaga.reset(); //reset debounce timera |
dsambolek | 0:a584b83122e6 | 36 | lcd.cls(); //čišćenje displeja |
dsambolek | 0:a584b83122e6 | 37 | lcd.locate(0,3); //pozicioniranje na displeju |
dsambolek | 0:a584b83122e6 | 38 | lcd.printf("\nSnaga: %d posto",snaga_mod*25); //ispis na displeju |
dsambolek | 0:a584b83122e6 | 39 | } |
dsambolek | 0:a584b83122e6 | 40 | } |
dsambolek | 0:a584b83122e6 | 41 | |
dsambolek | 0:a584b83122e6 | 42 | |
dsambolek | 0:a584b83122e6 | 43 | void Mikrovalna::namjesti_vrijeme(){ //funkcija za računanje vremena na pritisak tipkala |
dsambolek | 0:a584b83122e6 | 44 | if(debounce_sekunde.read_ms()>200){ |
dsambolek | 0:a584b83122e6 | 45 | if(vrijeme<120){ |
dsambolek | 0:a584b83122e6 | 46 | vrijeme=vrijeme+10; |
dsambolek | 0:a584b83122e6 | 47 | }else{ |
dsambolek | 0:a584b83122e6 | 48 | vrijeme=0; |
dsambolek | 0:a584b83122e6 | 49 | } |
dsambolek | 0:a584b83122e6 | 50 | debounce_sekunde.reset(); //reset debounce timera |
dsambolek | 0:a584b83122e6 | 51 | lcd.cls(); //čišćenje displeja |
dsambolek | 0:a584b83122e6 | 52 | lcd.locate(0,3); //pozicioniranje na displeju |
dsambolek | 0:a584b83122e6 | 53 | lcd.printf("\nVrijeme: %d",vrijeme); //ispis na displeju |
dsambolek | 0:a584b83122e6 | 54 | } |
dsambolek | 0:a584b83122e6 | 55 | } |
dsambolek | 0:a584b83122e6 | 56 | |
dsambolek | 0:a584b83122e6 | 57 | |
dsambolek | 0:a584b83122e6 | 58 | void Mikrovalna::pali_gasi(){ //funkcija za paljenje/gašenje mikrovalne pećnice na pritisak tipkala |
dsambolek | 0:a584b83122e6 | 59 | if(debounce_startstop.read_ms() > 200){ |
dsambolek | 0:a584b83122e6 | 60 | if(uklj_isklj==0){ |
dsambolek | 0:a584b83122e6 | 61 | uklj_isklj=1; |
dsambolek | 0:a584b83122e6 | 62 | timer.reset(); //reset timera brojača |
dsambolek | 0:a584b83122e6 | 63 | }else if(uklj_isklj==1){ |
dsambolek | 0:a584b83122e6 | 64 | uklj_isklj=0; |
dsambolek | 0:a584b83122e6 | 65 | } |
dsambolek | 0:a584b83122e6 | 66 | debounce_startstop.reset(); //reset debounce timera |
dsambolek | 0:a584b83122e6 | 67 | } |
dsambolek | 0:a584b83122e6 | 68 | if(uklj_isklj==1 && vrijeme > 0 && snaga_mod > 0){ //ako mikrovalna radi i ima vrijeme i snagu |
dsambolek | 0:a584b83122e6 | 69 | iskljuci.attach(this, &Mikrovalna::iskljucivanje, vrijeme); //inicijlizacija timeout timera tj. nakon vremena t pozovi funkciju iskljucivanje |
dsambolek | 0:a584b83122e6 | 70 | lcd.cls(); //čišćenje displeja |
dsambolek | 0:a584b83122e6 | 71 | lcd.locate(0,3); //pozicioniranje na displeju |
dsambolek | 0:a584b83122e6 | 72 | lcd.printf("\nUkljucena na %d sekundi", vrijeme); //ispis na displeju |
dsambolek | 0:a584b83122e6 | 73 | |
dsambolek | 0:a584b83122e6 | 74 | }else if(uklj_isklj==0 && vrijeme > 0 && snaga_mod > 0){ //ako mikrovalna je mikrovalna ugašena i ima vrijeme i snagu |
dsambolek | 0:a584b83122e6 | 75 | iskljuci.detach(); //gašešenje timout timera |
dsambolek | 0:a584b83122e6 | 76 | vrijeme=vrijeme - timer.read(); //oduzimanje od ukupno vremena vrijeme koje je odbrojio brojač |
dsambolek | 0:a584b83122e6 | 77 | lcd.cls(); //čišćenje displeja |
dsambolek | 0:a584b83122e6 | 78 | lcd.locate(0,3); //pozicioniranje na displeju |
dsambolek | 0:a584b83122e6 | 79 | lcd.printf("\nIskljucena"); //ispis na displeju |
dsambolek | 0:a584b83122e6 | 80 | timer.reset(); //reset timera brojača |
dsambolek | 0:a584b83122e6 | 81 | |
dsambolek | 0:a584b83122e6 | 82 | }else{ //u bilo kojem drugo slučaju |
dsambolek | 0:a584b83122e6 | 83 | iskljuci.attach(this, &Mikrovalna::iskljucivanje, 0); //inicijlizacija timeout timera tj. odmah poziva funkciju iskljucivanje |
dsambolek | 0:a584b83122e6 | 84 | } |
dsambolek | 0:a584b83122e6 | 85 | |
dsambolek | 0:a584b83122e6 | 86 | } |
dsambolek | 0:a584b83122e6 | 87 | |
dsambolek | 0:a584b83122e6 | 88 | |
dsambolek | 0:a584b83122e6 | 89 | void Mikrovalna::iskljucivanje(){ //funkcija za resetiranje pomoćnih varijabli i vraćanje na početak odabira |
dsambolek | 0:a584b83122e6 | 90 | snaga_mod=0; //resetiranje vrijednosti pomoćnih varijabi |
dsambolek | 0:a584b83122e6 | 91 | vrijeme=0; //resetiranje vrijednosti pomoćnih varijabi |
dsambolek | 0:a584b83122e6 | 92 | uklj_isklj=0; //resetiranje vrijednosti pomoćnih varijabi |
dsambolek | 0:a584b83122e6 | 93 | lcd.cls(); //čišćenje displeja |
dsambolek | 0:a584b83122e6 | 94 | lcd.locate(0,3); //pozicioniranje na displeju |
dsambolek | 0:a584b83122e6 | 95 | lcd.printf("\nNamjesti snagu/vrijeme i pokreni"); //ispis na displeju |
dsambolek | 0:a584b83122e6 | 96 | |
dsambolek | 0:a584b83122e6 | 97 | } |