Zadatak za ispit iz kolegija Mikroupravljači
Dependencies: TextLCD
Revision 0:a584b83122e6, committed 2019-03-22
- Comitter:
- dsambolek
- Date:
- Fri Mar 22 17:01:34 2019 +0000
- Commit message:
- fgff
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Fri Mar 22 17:01:34 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/simon/code/TextLCD/#308d188a2d3a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mikrovalna.cpp Fri Mar 22 17:01:34 2019 +0000
@@ -0,0 +1,97 @@
+#include "mbed.h"
+#include "TextLCD.h"
+#include "mikrovalna.h"
+
+ //inicijalizacija klase
+Mikrovalna::Mikrovalna(PinName startstopPin, PinName sekundePin, PinName snagaPin): startstop(startstopPin), sekunde(sekundePin), snaga(snagaPin), lcd(p19, p20, p21, p22, p23, p24){
+startstop.rise(this, &Mikrovalna::pali_gasi); //poziv funkcije za paljenje/gašenje mikrovalne pećnice
+sekunde.rise(this, &Mikrovalna::namjesti_vrijeme); //poziv funkcije povećvanje vremena aktivnosti mikrovalne
+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
+
+debounce_startstop.start(); //start timera za debounce
+debounce_sekunde.start(); //start timera za debounce
+debounce_snaga.start(); //start timera za debounce
+
+timer.start(); //start timera brojača
+
+uklj_isklj=0; //inicijalizacija pomoćnih varijabli
+vrijeme=0; //inicijalizacija pomoćnih varijabli
+snaga_mod=0; //inicijalizacija pomoćnih varijabli
+i=0; //inicijalizacija pomoćnih varijabli
+
+lcd.cls(); //čišćenje displeja
+lcd.locate(0,3); //pozicioniranje na displeju
+lcd.printf("\nNamjesti snagu/vrijeme i pokreni"); //ispis na displeju
+}
+
+
+void Mikrovalna::namjesti_snagu(){ //funkcija za računanje snage na pritisak tipkala
+ if(debounce_snaga.read_ms()>200){
+ if(snaga_mod<4){
+ snaga_mod=snaga_mod+1;
+ }else{
+ snaga_mod=0;
+ }
+ debounce_snaga.reset(); //reset debounce timera
+ lcd.cls(); //čišćenje displeja
+ lcd.locate(0,3); //pozicioniranje na displeju
+ lcd.printf("\nSnaga: %d posto",snaga_mod*25); //ispis na displeju
+ }
+}
+
+
+void Mikrovalna::namjesti_vrijeme(){ //funkcija za računanje vremena na pritisak tipkala
+ if(debounce_sekunde.read_ms()>200){
+ if(vrijeme<120){
+ vrijeme=vrijeme+10;
+ }else{
+ vrijeme=0;
+ }
+ debounce_sekunde.reset(); //reset debounce timera
+ lcd.cls(); //čišćenje displeja
+ lcd.locate(0,3); //pozicioniranje na displeju
+ lcd.printf("\nVrijeme: %d",vrijeme); //ispis na displeju
+ }
+}
+
+
+void Mikrovalna::pali_gasi(){ //funkcija za paljenje/gašenje mikrovalne pećnice na pritisak tipkala
+ if(debounce_startstop.read_ms() > 200){
+ if(uklj_isklj==0){
+ uklj_isklj=1;
+ timer.reset(); //reset timera brojača
+ }else if(uklj_isklj==1){
+ uklj_isklj=0;
+ }
+ debounce_startstop.reset(); //reset debounce timera
+ }
+ if(uklj_isklj==1 && vrijeme > 0 && snaga_mod > 0){ //ako mikrovalna radi i ima vrijeme i snagu
+ iskljuci.attach(this, &Mikrovalna::iskljucivanje, vrijeme); //inicijlizacija timeout timera tj. nakon vremena t pozovi funkciju iskljucivanje
+ lcd.cls(); //čišćenje displeja
+ lcd.locate(0,3); //pozicioniranje na displeju
+ lcd.printf("\nUkljucena na %d sekundi", vrijeme); //ispis na displeju
+
+ }else if(uklj_isklj==0 && vrijeme > 0 && snaga_mod > 0){ //ako mikrovalna je mikrovalna ugašena i ima vrijeme i snagu
+ iskljuci.detach(); //gašešenje timout timera
+ vrijeme=vrijeme - timer.read(); //oduzimanje od ukupno vremena vrijeme koje je odbrojio brojač
+ lcd.cls(); //čišćenje displeja
+ lcd.locate(0,3); //pozicioniranje na displeju
+ lcd.printf("\nIskljucena"); //ispis na displeju
+ timer.reset(); //reset timera brojača
+
+ }else{ //u bilo kojem drugo slučaju
+ iskljuci.attach(this, &Mikrovalna::iskljucivanje, 0); //inicijlizacija timeout timera tj. odmah poziva funkciju iskljucivanje
+ }
+
+}
+
+
+void Mikrovalna::iskljucivanje(){ //funkcija za resetiranje pomoćnih varijabli i vraćanje na početak odabira
+ snaga_mod=0; //resetiranje vrijednosti pomoćnih varijabi
+ vrijeme=0; //resetiranje vrijednosti pomoćnih varijabi
+ uklj_isklj=0; //resetiranje vrijednosti pomoćnih varijabi
+ lcd.cls(); //čišćenje displeja
+ lcd.locate(0,3); //pozicioniranje na displeju
+ lcd.printf("\nNamjesti snagu/vrijeme i pokreni"); //ispis na displeju
+
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mikrovalna.h Fri Mar 22 17:01:34 2019 +0000
@@ -0,0 +1,22 @@
+#ifndef MIKROVALNA_H
+#define MIKROVALNA_H
+
+#include "mbed.h"
+#include "TextLCD.h"
+
+class Mikrovalna { //klasa
+ public:
+ Mikrovalna(PinName startstopPin, PinName sekundePin, PinName snagaPin); //ime klase
+ private: //u klasi se nalazi
+ TextLCD lcd; //dislpej
+ InterruptIn startstop, sekunde, snaga; //interrupti preko tipkala
+ Timer debounce_startstop,debounce_sekunde, debounce_snaga, timer; //timeri za debounce tipkala i brojač za proteklo vrijeme
+ Timeout iskljuci; //obrnuti timer za odbrojavanje unaprid poznato vrijeme
+ int vrijeme, snaga_mod, uklj_isklj, i; //pomoćne varijable tipa integer
+
+ void iskljucivanje(); //prototip funkcije za isključivanje mikrovalne pečnice
+ void pali_gasi(); //prototip funkcije za paljenje/gašenje mikrovane pečnice
+ void namjesti_vrijeme(); //prototip funkcije za namještanje vremena
+ void namjesti_snagu(); //prototip funkcije za namještanje snage
+};
+#endif
\ No newline at end of file