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

main.cpp

Committer:
dsambolek
Date:
2019-03-22
Revision:
1:24c1eb32132f
Parent:
0:2f27db66cb9e

File content as of revision 1:24c1eb32132f:

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