Zadatak za ispit iz kolegija Mikroupravljači

Dependencies:   TextLCD

Revision:
0:a584b83122e6
diff -r 000000000000 -r a584b83122e6 mikrovalna.cpp
--- /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