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

Committer:
dsambolek
Date:
Fri Mar 22 17:08:07 2019 +0000
Revision:
1:24c1eb32132f
Parent:
0:2f27db66cb9e
sdfsf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dsambolek 0:2f27db66cb9e 1 #include "mbed.h"
dsambolek 0:2f27db66cb9e 2 #include "mikrovalna.h"
dsambolek 0:2f27db66cb9e 3 #include "TextLCD.h"
dsambolek 0:2f27db66cb9e 4
dsambolek 0:2f27db66cb9e 5
dsambolek 0:2f27db66cb9e 6 PwmOut PWM1(p25); // zvučnik
dsambolek 0:2f27db66cb9e 7 InterruptIn start(p12), vrijeme_time(p11), power(p10); //interrupti preko tipkala
dsambolek 0:2f27db66cb9e 8 DigitalOut led_1(LED1), led_2(LED2), led_3(LED3), led_4(LED4); //led-ice na mbed-u
dsambolek 0:2f27db66cb9e 9 DigitalOut bled_1(p5), bled_2(p6), bled_3(p7), bled_4(p8); //plave ledice
dsambolek 0:2f27db66cb9e 10 Timer debounce_start, debounce_vrijeme_time, debounce_power, brojac; //timeri za debounce tipkala i brojač za proteklo vrijeme
dsambolek 0:2f27db66cb9e 11
dsambolek 0:2f27db66cb9e 12
dsambolek 0:2f27db66cb9e 13 Mikrovalna Mikrovalna(p14, p15, p16); //poziv klase
dsambolek 0:2f27db66cb9e 14
dsambolek 0:2f27db66cb9e 15
dsambolek 0:2f27db66cb9e 16 int i=0; //globalna varijalbla
dsambolek 0:2f27db66cb9e 17 int j=0; //globalna varijalbla
dsambolek 0:2f27db66cb9e 18 int t=0; //globalna varijalbla
dsambolek 0:2f27db66cb9e 19 int t1=0; //globalna varijalbla
dsambolek 0:2f27db66cb9e 20
dsambolek 0:2f27db66cb9e 21
dsambolek 0:2f27db66cb9e 22 void fsnaga(){ //funkcija za aktivaciju vanjskih lampica na pritisak tipkala
dsambolek 0:2f27db66cb9e 23 if(debounce_power.read_ms()>200){
dsambolek 0:2f27db66cb9e 24 if(i<4){
dsambolek 0:2f27db66cb9e 25 i++;
dsambolek 0:2f27db66cb9e 26 }else{
dsambolek 0:2f27db66cb9e 27 i=0;
dsambolek 0:2f27db66cb9e 28 }
dsambolek 0:2f27db66cb9e 29 debounce_power.reset(); // reset debounce timera
dsambolek 0:2f27db66cb9e 30
dsambolek 0:2f27db66cb9e 31 }
dsambolek 0:2f27db66cb9e 32 if (i==1){ // paljenje vanjskih lampica
dsambolek 0:2f27db66cb9e 33 bled_1=1;
dsambolek 0:2f27db66cb9e 34 bled_2=0;
dsambolek 0:2f27db66cb9e 35 bled_3=0;
dsambolek 0:2f27db66cb9e 36 bled_4=0;
dsambolek 0:2f27db66cb9e 37
dsambolek 0:2f27db66cb9e 38 } else if(i==2){ // paljenje vanjskih lampica
dsambolek 0:2f27db66cb9e 39 bled_1=1;
dsambolek 0:2f27db66cb9e 40 bled_2=1;
dsambolek 0:2f27db66cb9e 41 bled_3=0;
dsambolek 0:2f27db66cb9e 42 bled_4=0;
dsambolek 0:2f27db66cb9e 43
dsambolek 0:2f27db66cb9e 44 } else if(i==3){ // paljenje vanjskih lampica
dsambolek 0:2f27db66cb9e 45 bled_1=1;
dsambolek 0:2f27db66cb9e 46 bled_2=1;
dsambolek 0:2f27db66cb9e 47 bled_3=1;
dsambolek 0:2f27db66cb9e 48 bled_4=0;
dsambolek 0:2f27db66cb9e 49
dsambolek 0:2f27db66cb9e 50 } else if(i==4){ // paljenje vanjskih lampica
dsambolek 0:2f27db66cb9e 51 bled_1=1;
dsambolek 0:2f27db66cb9e 52 bled_2=1;
dsambolek 0:2f27db66cb9e 53 bled_3=1;
dsambolek 0:2f27db66cb9e 54 bled_4=1;
dsambolek 0:2f27db66cb9e 55
dsambolek 0:2f27db66cb9e 56 } else if(i==0){ // paljenje vanjskih lampica
dsambolek 0:2f27db66cb9e 57 bled_1=0;
dsambolek 0:2f27db66cb9e 58 bled_2=0;
dsambolek 0:2f27db66cb9e 59 bled_3=0;
dsambolek 0:2f27db66cb9e 60 bled_4=0;
dsambolek 0:2f27db66cb9e 61 }
dsambolek 0:2f27db66cb9e 62 }
dsambolek 0:2f27db66cb9e 63
dsambolek 0:2f27db66cb9e 64
dsambolek 0:2f27db66cb9e 65 void fvrijeme(){ //funkcija za dodavanje vremenskog intervala od 10 sekundi u ukupnu sumu - pomoću tipkala
dsambolek 0:2f27db66cb9e 66 if(debounce_vrijeme_time.read_ms()>200){
dsambolek 0:2f27db66cb9e 67 if(t<120){
dsambolek 0:2f27db66cb9e 68 t=t+10;
dsambolek 0:2f27db66cb9e 69 }else{
dsambolek 0:2f27db66cb9e 70 t=0;
dsambolek 0:2f27db66cb9e 71 }
dsambolek 0:2f27db66cb9e 72 debounce_vrijeme_time.reset(); // reset debounce timera
dsambolek 0:2f27db66cb9e 73 }
dsambolek 0:2f27db66cb9e 74 }
dsambolek 0:2f27db66cb9e 75
dsambolek 0:2f27db66cb9e 76
dsambolek 0:2f27db66cb9e 77 void fstart(){ //funkcija za pokretanje/gašenje mikrovalne pećnice
dsambolek 0:2f27db66cb9e 78 if(debounce_start.read_ms()>200){
dsambolek 0:2f27db66cb9e 79 if(j==0 && t>0 && i>0){
dsambolek 0:2f27db66cb9e 80 j=1;
dsambolek 0:2f27db66cb9e 81 brojac.reset();
dsambolek 0:2f27db66cb9e 82 }else if(j==1){
dsambolek 0:2f27db66cb9e 83 j=0;
dsambolek 0:2f27db66cb9e 84 }
dsambolek 0:2f27db66cb9e 85 debounce_vrijeme_time.reset(); // reset debounce timera
dsambolek 0:2f27db66cb9e 86 }
dsambolek 0:2f27db66cb9e 87 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
dsambolek 0:2f27db66cb9e 88 t=t - brojac.read(); // vrijednost se oduzima od ukupnog vremena t
dsambolek 0:2f27db66cb9e 89 brojac.reset(); // reset timera brojača
dsambolek 0:2f27db66cb9e 90 }
dsambolek 0:2f27db66cb9e 91
dsambolek 0:2f27db66cb9e 92
dsambolek 0:2f27db66cb9e 93 }
dsambolek 0:2f27db66cb9e 94
dsambolek 0:2f27db66cb9e 95
dsambolek 0:2f27db66cb9e 96 int main() { // glavna funkcija program
dsambolek 0:2f27db66cb9e 97
dsambolek 0:2f27db66cb9e 98 power.rise(&fsnaga); //poziv funkcije za paljenje vaskih lampica pritiskom na tipku, palu se više lampica ako je potrebna veća snaga
dsambolek 0:2f27db66cb9e 99 vrijeme_time.rise(&fvrijeme); //poziv funkcije povećvanje vremena aktivnosti mikrovalne
dsambolek 0:2f27db66cb9e 100 start.rise(&fstart); //poziv funkcije za paljenje/gašenje mikrovalne pećnice
dsambolek 0:2f27db66cb9e 101
dsambolek 0:2f27db66cb9e 102 debounce_power.start(); //start timera za debounce
dsambolek 0:2f27db66cb9e 103 debounce_vrijeme_time.start(); //start timera za debounce
dsambolek 0:2f27db66cb9e 104 debounce_start.start(); //start timera za debounce
dsambolek 0:2f27db66cb9e 105
dsambolek 0:2f27db66cb9e 106 t1=0; //resetiranje varijable
dsambolek 0:2f27db66cb9e 107 i=0; //resetiranje varijable
dsambolek 0:2f27db66cb9e 108 j=0; //resetiranje varijable
dsambolek 0:2f27db66cb9e 109 t=0; //resetiranje varijable
dsambolek 0:2f27db66cb9e 110
dsambolek 0:2f27db66cb9e 111 while(1){ //beskonačna petlja
dsambolek 0:2f27db66cb9e 112 if(j==0 || i==0 || t==0){ //'idle' tj. mikrovalna pečnica ne radi i spremna je prihvatiti nove vrijednosti
dsambolek 0:2f27db66cb9e 113 t1=t; //korištenje pomoćne varijable
dsambolek 0:2f27db66cb9e 114 PWM1.period(0.0); //reset zvučnika
dsambolek 0:2f27db66cb9e 115 PWM1=0.5;
dsambolek 0:2f27db66cb9e 116 wait(0);
dsambolek 0:2f27db66cb9e 117 if(i==0){ //reset lampica za indikaciju željene snage
dsambolek 0:2f27db66cb9e 118 bled_1=0;
dsambolek 0:2f27db66cb9e 119 bled_2=0;
dsambolek 0:2f27db66cb9e 120 bled_3=0;
dsambolek 0:2f27db66cb9e 121 bled_4=0;
dsambolek 0:2f27db66cb9e 122 }
dsambolek 0:2f27db66cb9e 123 led_1=!led_1; //lampice na mbed-u trepere u trakanju od 1 sekunde
dsambolek 0:2f27db66cb9e 124 led_2=!led_2;
dsambolek 0:2f27db66cb9e 125 led_3=!led_3;
dsambolek 0:2f27db66cb9e 126 led_4=!led_4;
dsambolek 0:2f27db66cb9e 127 wait(1);
dsambolek 0:2f27db66cb9e 128
dsambolek 0:2f27db66cb9e 129 }else if (j==1 && i>0 && t>0){ //mikrovalna je upaljena i izabrani su vrijeme i snaga
dsambolek 0:2f27db66cb9e 130 led_1=1; //lampice na mbed-u konstantno svijetle
dsambolek 0:2f27db66cb9e 131 led_2=1;
dsambolek 0:2f27db66cb9e 132 led_3=1;
dsambolek 0:2f27db66cb9e 133 led_4=1;
dsambolek 0:2f27db66cb9e 134
dsambolek 0:2f27db66cb9e 135 PWM1.period(0.001); //zvučnik je aktiviran
dsambolek 0:2f27db66cb9e 136 PWM1=0.5;
dsambolek 0:2f27db66cb9e 137 wait(0.5);
dsambolek 0:2f27db66cb9e 138 brojac.start(); //akrivacija timera brojača
dsambolek 0:2f27db66cb9e 139 if(brojac.read()>t1){ //uvijet za završetak tj. za resetiranje
dsambolek 0:2f27db66cb9e 140 t=0; //resetiranje vrijednosti globalnih varijabi
dsambolek 0:2f27db66cb9e 141 j=0; //resetiranje vrijednosti globalnih varijabi
dsambolek 0:2f27db66cb9e 142 i=0; //resetiranje vrijednosti globalnih varijabi
dsambolek 0:2f27db66cb9e 143 t1=0; //resetiranje vrijednosti globalnih varijabi
dsambolek 0:2f27db66cb9e 144 brojac.reset(); //resetiranje vrijednosti timera brojač
dsambolek 0:2f27db66cb9e 145 }
dsambolek 0:2f27db66cb9e 146 }
dsambolek 0:2f27db66cb9e 147 }
dsambolek 0:2f27db66cb9e 148 }