Zadatak za ispit iz kolegija Mikroupravljači

Dependencies:   TextLCD

mikrovalna.cpp

Committer:
dsambolek
Date:
2019-03-22
Revision:
0:a584b83122e6

File content as of revision 0:a584b83122e6:

#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
                
}