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:
main.cpp
- Committer:
- dsambolek
- Date:
- 2019-03-22
- Revision:
- 0:2f27db66cb9e
File content as of revision 0:2f27db66cb9e:
#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č } } } }