Zadatak za ispit iz kolegija Mikroupravljači
Dependencies: TextLCD
Diff: mikrovalna.cpp
- Revision:
- 0:a584b83122e6
--- /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