zadatak iz koegija Mikroupravljači

Dependencies:   mbed Mikrovalna

Ovaj zadatak emulira rad mikrovalne pečnice. Korištena oprema je: Mbed, 3 tipkala, 4 mbed ledice, 4 plave ledice, 4 otpornika od 490 ohma, 1 PWM zvučnik i jedan LCD displej. Napon od 3,3 i 5 VDC-a korišten je od Mbed-a te je korištena zajednička masa(GND) od Mbed-a

Korišteni pinovi mbed-a:

4 ledice mbeda(LED1-LED4) 4 plave ledice(P5-P6-P7-P8) - sa 490 ohma otpronicima 3 tipkala sa po dvije adrese(P10/P16, P11/P15, P12/P14); 3 adrese se koriste u main programu, a 3 u klasi PWM buzzer(P25) LCD(1-GND, 2-5V, 4-P19, 5-GND,6-P20,11-P21,12-P22,13-P23,14-P24,15-5V,16-GND)

Emulacija je podijeljena u dva dijela. Prvi dio je klasa u kojoj se koriste četiri funkcije preko kojih se mijena prikaz na displeju. Prva funkcija je za promjenu snage, druga za promjenu vremena i treća za paljenje/gašenje simulacijskog rada. Također klasa je nadograđena sa timerima i timeout timerima pa se nakon isteka vremena timeout timera poziva četvrta funkcija. Drugi dio, main program, poziva prvi dio u neprekinutoj petlji te paralelno izvršava svoju radnju neovisno od klase. Zato se koriste različite adrese za istu radnju jednog tipkala jer jedna adresa nije dovoljna za glavni program i klasu. U main programu se pale vanjske ledice i ledice mbeda, te se pali i gasi pwm zvučnik u ovisnosti o stanju rada(radi/neradi). Pošto ove dva dijela rade neovisno jedan o drugome korišteni su dodatni timeri koji prate odbrojavanje zadanog vremena te u slučaju novog dodoavanja vrijeme nastvalja od zadnjeg izbrojanog. Također navedeni timeri su korišteni radi praćenja sinkronog rada klase i glavnog programa. Funkcije koje su dodatno napravljene u glavnom programu nisu identične onima korištenim u klasi. Detaljnije se može pogledati po komentarima u kodu jer sam tamo zakomentirao sve.

Za tipkala nisu korišteni otpotnici već je smetnja otklonjena programski sa debounce timerima. Prilikom testiranja primjećeno je da neki šumovi ipak prođu kroz debouncer, pa bi kao nadogradnja za početak moglo biti dodavanje pull-up otpornika da se eliminiraju šumovi u potpunosti. Također, ovaj program se može iskoristiti kao podloga za daljni rad dodavanjem drugih svojstava rada mikrovalne pečnice.

Slike rada:

/media/uploads/dsambolek/20190321_194844.jpg

/media/uploads/dsambolek/20190321_194848.jpg

/media/uploads/dsambolek/20190321_194809.jpg

/media/uploads/dsambolek/20190321_194748.jpg

Revision:
0:2f27db66cb9e
diff -r 000000000000 -r 2f27db66cb9e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Mar 22 17:01:43 2019 +0000
@@ -0,0 +1,148 @@
+#include "mbed.h"
+#include "mikrovalna.h"
+#include "TextLCD.h"
+
+
+PwmOut PWM1(p25); // zvučnik
+InterruptIn start(p12), vrijeme_time(p11), power(p10);                  //interrupti preko tipkala
+DigitalOut led_1(LED1), led_2(LED2), led_3(LED3), led_4(LED4);          //led-ice na mbed-u
+DigitalOut bled_1(p5), bled_2(p6), bled_3(p7), bled_4(p8);              //plave ledice
+Timer debounce_start, debounce_vrijeme_time, debounce_power, brojac;    //timeri za debounce tipkala i brojač za proteklo vrijeme
+
+
+Mikrovalna Mikrovalna(p14, p15, p16);                                   //poziv klase
+
+
+int i=0;                                                                //globalna varijalbla
+int j=0;                                                                //globalna varijalbla
+int t=0;                                                                //globalna varijalbla
+int t1=0;                                                               //globalna varijalbla
+
+
+void fsnaga(){                                                          //funkcija za aktivaciju vanjskih lampica na pritisak tipkala
+    if(debounce_power.read_ms()>200){
+        if(i<4){
+            i++;
+        }else{
+            i=0;
+        }
+        debounce_power.reset();                                         // reset debounce timera
+    
+    }
+        if (i==1){                                                      // paljenje vanjskih lampica
+            bled_1=1;
+            bled_2=0;            
+            bled_3=0;
+            bled_4=0;
+            
+        } else if(i==2){                                                // paljenje vanjskih lampica
+            bled_1=1;
+            bled_2=1;
+            bled_3=0;
+            bled_4=0;
+            
+        } else if(i==3){                                                // paljenje vanjskih lampica
+            bled_1=1;
+            bled_2=1;
+            bled_3=1;
+            bled_4=0;
+            
+        } else if(i==4){                                                // paljenje vanjskih lampica
+            bled_1=1;
+            bled_2=1;
+            bled_3=1;
+            bled_4=1;
+            
+        } else if(i==0){                                                // paljenje vanjskih lampica
+            bled_1=0;
+            bled_2=0;
+            bled_3=0;
+            bled_4=0;
+        }              
+}
+
+
+void fvrijeme(){                                                        //funkcija za dodavanje vremenskog intervala od 10 sekundi u ukupnu sumu - pomoću tipkala
+    if(debounce_vrijeme_time.read_ms()>200){
+       if(t<120){
+        t=t+10;
+        }else{
+            t=0;
+        }
+    debounce_vrijeme_time.reset();                                      // reset debounce timera
+    }
+}
+
+
+void fstart(){                                                          //funkcija za pokretanje/gašenje mikrovalne pećnice
+    if(debounce_start.read_ms()>200){
+       if(j==0 && t>0 && i>0){
+            j=1;
+            brojac.reset();
+        }else if(j==1){
+            j=0;
+        }
+    debounce_vrijeme_time.reset();                                      // reset debounce timera
+    }
+    if(j==0 && t>0 && i>0){                                             // kada se izvršava program i prekine se (pauzira) izvršavanje onda se zapamti vrijdnost brojača i on se resetira
+        t=t - brojac.read();                                            // vrijednost se oduzima od ukupnog vremena t
+        brojac.reset();                                                 // reset timera brojača
+    }
+
+
+}
+
+ 
+int main() {                                                            // glavna funkcija program
+
+    power.rise(&fsnaga);                                                //poziv funkcije za paljenje vaskih lampica pritiskom na tipku, palu se više lampica ako je potrebna veća snaga
+    vrijeme_time.rise(&fvrijeme);                                       //poziv funkcije povećvanje vremena aktivnosti mikrovalne
+    start.rise(&fstart);                                                //poziv funkcije za paljenje/gašenje mikrovalne pećnice
+    
+    debounce_power.start();                                             //start timera za debounce
+    debounce_vrijeme_time.start();                                      //start timera za debounce
+    debounce_start.start();                                             //start timera za debounce
+    
+    t1=0;                                                               //resetiranje varijable
+    i=0;                                                                //resetiranje varijable
+    j=0;                                                                //resetiranje varijable
+    t=0;                                                                //resetiranje varijable
+    
+    while(1){                                                           //beskonačna petlja
+        if(j==0 || i==0 || t==0){                                       //'idle' tj. mikrovalna pečnica ne radi i spremna je prihvatiti nove vrijednosti
+            t1=t;                                                       //korištenje pomoćne varijable
+            PWM1.period(0.0);                                           //reset zvučnika
+            PWM1=0.5;
+            wait(0);
+            if(i==0){                                                   //reset lampica za indikaciju željene snage
+                bled_1=0;
+                bled_2=0;
+                bled_3=0;
+                bled_4=0;
+                }
+            led_1=!led_1;                                               //lampice na mbed-u trepere u trakanju od 1 sekunde
+            led_2=!led_2;
+            led_3=!led_3;
+            led_4=!led_4;
+            wait(1);
+                    
+        }else if (j==1 && i>0 && t>0){                                  //mikrovalna je upaljena i izabrani su vrijeme i snaga
+            led_1=1;                                                    //lampice na mbed-u konstantno svijetle
+            led_2=1;
+            led_3=1;
+            led_4=1;
+            
+            PWM1.period(0.001);                                         //zvučnik je aktiviran
+            PWM1=0.5;
+            wait(0.5);
+            brojac.start();                                             //akrivacija timera brojača
+            if(brojac.read()>t1){                                       //uvijet za završetak tj. za resetiranje 
+                t=0;                                                    //resetiranje vrijednosti globalnih varijabi
+                j=0;                                                    //resetiranje vrijednosti globalnih varijabi
+                i=0;                                                    //resetiranje vrijednosti globalnih varijabi
+                t1=0;                                                   //resetiranje vrijednosti globalnih varijabi
+                brojac.reset();                                         //resetiranje vrijednosti timera brojač
+            }
+        } 
+    }
+}
\ No newline at end of file