Zadatak za ispit iz kolegija Mikroupravljači

Dependencies:   TextLCD

Committer:
dsambolek
Date:
Fri Mar 22 17:01:34 2019 +0000
Revision:
0:a584b83122e6
fgff

Who changed what in which revision?

UserRevisionLine numberNew 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 }