Zadatak za ispit iz kolegija Mikroupravljači

Dependencies:   TextLCD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers mikrovalna.cpp Source File

mikrovalna.cpp

00001 #include "mbed.h"
00002 #include "TextLCD.h"
00003 #include "mikrovalna.h"
00004 
00005                                                                                 //inicijalizacija klase
00006 Mikrovalna::Mikrovalna(PinName startstopPin, PinName sekundePin, PinName snagaPin): startstop(startstopPin), sekunde(sekundePin), snaga(snagaPin), lcd(p19, p20, p21, p22, p23, p24){ 
00007 startstop.rise(this, &Mikrovalna::pali_gasi);                                   //poziv funkcije za paljenje/gašenje mikrovalne pećnice
00008 sekunde.rise(this, &Mikrovalna::namjesti_vrijeme);                              //poziv funkcije povećvanje vremena aktivnosti mikrovalne
00009 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
00010 
00011 debounce_startstop.start();                                                     //start timera za debounce
00012 debounce_sekunde.start();                                                       //start timera za debounce
00013 debounce_snaga.start();                                                         //start timera za debounce
00014 
00015 timer.start();                                                                  //start timera brojača
00016 
00017 uklj_isklj=0;                                                                   //inicijalizacija pomoćnih varijabli
00018 vrijeme=0;                                                                      //inicijalizacija pomoćnih varijabli
00019 snaga_mod=0;                                                                    //inicijalizacija pomoćnih varijabli
00020 i=0;                                                                            //inicijalizacija pomoćnih varijabli
00021 
00022 lcd.cls();                                                                      //čišćenje displeja
00023 lcd.locate(0,3);                                                                //pozicioniranje na displeju
00024 lcd.printf("\nNamjesti snagu/vrijeme i pokreni");                               //ispis na displeju
00025 }
00026 
00027 
00028 void Mikrovalna::namjesti_snagu(){                                              //funkcija za računanje snage na pritisak tipkala
00029     if(debounce_snaga.read_ms()>200){
00030         if(snaga_mod<4){
00031         snaga_mod=snaga_mod+1;
00032         }else{
00033             snaga_mod=0;
00034         }
00035         debounce_snaga.reset();                                                 //reset debounce timera
00036         lcd.cls();                                                              //čišćenje displeja
00037         lcd.locate(0,3);                                                        //pozicioniranje na displeju
00038         lcd.printf("\nSnaga: %d posto",snaga_mod*25);                           //ispis na displeju
00039     }
00040 }
00041 
00042 
00043 void Mikrovalna::namjesti_vrijeme(){                                            //funkcija za računanje vremena na pritisak tipkala
00044     if(debounce_sekunde.read_ms()>200){
00045         if(vrijeme<120){
00046         vrijeme=vrijeme+10;
00047         }else{
00048             vrijeme=0;
00049         }
00050         debounce_sekunde.reset();                                               //reset debounce timera
00051         lcd.cls();                                                              //čišćenje displeja
00052         lcd.locate(0,3);                                                        //pozicioniranje na displeju
00053         lcd.printf("\nVrijeme: %d",vrijeme);                                    //ispis na displeju
00054     }
00055 }
00056 
00057 
00058 void Mikrovalna::pali_gasi(){                                                   //funkcija za paljenje/gašenje mikrovalne pećnice na pritisak tipkala
00059         if(debounce_startstop.read_ms() > 200){
00060             if(uklj_isklj==0){
00061                 uklj_isklj=1;
00062                 timer.reset();                                                  //reset timera brojača
00063             }else if(uklj_isklj==1){
00064                 uklj_isklj=0; 
00065             }
00066             debounce_startstop.reset();                                         //reset debounce timera
00067         }
00068             if(uklj_isklj==1 && vrijeme > 0 && snaga_mod > 0){                  //ako mikrovalna radi i ima vrijeme i snagu
00069                 iskljuci.attach(this, &Mikrovalna::iskljucivanje, vrijeme);     //inicijlizacija timeout timera tj. nakon vremena t pozovi funkciju iskljucivanje
00070                 lcd.cls();                                                      //čišćenje displeja
00071                 lcd.locate(0,3);                                                //pozicioniranje na displeju
00072                 lcd.printf("\nUkljucena na %d sekundi", vrijeme);               //ispis na displeju
00073                 
00074             }else if(uklj_isklj==0 && vrijeme > 0 && snaga_mod > 0){            //ako mikrovalna je mikrovalna ugašena i ima vrijeme i snagu
00075                 iskljuci.detach();                                              //gašešenje timout timera
00076                 vrijeme=vrijeme - timer.read();                                 //oduzimanje od ukupno vremena vrijeme koje je odbrojio brojač
00077                 lcd.cls();                                                      //čišćenje displeja
00078                 lcd.locate(0,3);                                                //pozicioniranje na displeju
00079                 lcd.printf("\nIskljucena");                                     //ispis na displeju
00080                 timer.reset();                                                  //reset timera brojača
00081                 
00082             }else{                                                              //u bilo kojem drugo slučaju
00083                 iskljuci.attach(this, &Mikrovalna::iskljucivanje, 0);           //inicijlizacija timeout timera tj. odmah poziva funkciju iskljucivanje
00084             }
00085                          
00086 }
00087 
00088 
00089 void Mikrovalna::iskljucivanje(){                                               //funkcija za resetiranje pomoćnih varijabli i vraćanje na početak odabira
00090                     snaga_mod=0;                                                //resetiranje vrijednosti pomoćnih varijabi
00091                     vrijeme=0;                                                  //resetiranje vrijednosti pomoćnih varijabi
00092                     uklj_isklj=0;                                               //resetiranje vrijednosti pomoćnih varijabi
00093                     lcd.cls();                                                  //čišćenje displeja
00094                     lcd.locate(0,3);                                            //pozicioniranje na displeju
00095                     lcd.printf("\nNamjesti snagu/vrijeme i pokreni");           //ispis na displeju
00096                 
00097 }