TVZ2022 / Mbed 2 deprecated AntonioPetrovic_konstrukcijski_Spremnik

Dependencies:   BuzzLib SegDispLib mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "segdisp.h"
00003 #include "buzzer.h"
00004 
00005 #define vrijeme_cekanja 500
00006 #define vrijeme_test_moda 3000
00007  
00008 
00009 AnalogIn Ain(PA_0); //potenciometar
00010 DigitalOut Zelena (PB_8); //Zelena LEDica
00011 DigitalOut Zuta (PB_5); //Zuta LEDica
00012 DigitalOut Crvena (PA_10); //Crvena LEdica
00013 InterruptIn Tipkalo (PB_9); //Tipkalo za Interrupt
00014 Buzz buzzer(PA_4); //DO za buzzer
00015 
00016 Ticker treptanje; //ticker za blink LEDice
00017 Timer debouncing_timer; //Timer za debouncing
00018 
00019 int stanje=1, testmod_stanje=0, SegDisp_prikaz=0; // definiranje i inicijalizacija 
00020 float razina=0;  // definiranje i inicijalizacija 
00021 
00022 void toggle (void); //inicijaliazcija funkcije toggle (HW interrupt)
00023 
00024 
00025 void trenutno_stanje (float razina) //postavljanje trenutnog stanja 1-prazan;2-ima tekućine;3-pun.
00026 { 
00027 if (razina < 1.00) //osiguranje zbog mogućeg variranja vrijednosti AI , postavi stanje 1
00028     { stanje=1;}
00029 
00030 if (razina >=1.00 && razina <99 ) //ukoliko se spremnik puni ili prazni (odnosno između praznog i potpuno punog) postavi stanje 2
00031     {stanje=2;}
00032 
00033 if (razina >=99 )  //ukoliko je pun, postavi stanje 3
00034     { stanje=3;}
00035 
00036 }
00037 
00038   void crvena_treptanje (){  //funkcija za treptanje crvene LEDice
00039     Crvena=!Crvena; 
00040     }
00041 
00042 
00043 void stanja_signalizacije (float razina) {//ovisno o stanju prazan, pun, medustanje - postavi signalizaciju
00044 
00045 
00046     if (razina < 1.00) //varira vrijednost AI, ukoliko je mjerenje manje od 1% onda je signalizacija da je spremnik prazan
00047     {
00048         
00049         Crvena = 0; //crvena LED isk
00050         Zuta = 0;  //zuta isk
00051         Zelena = 1; //crvena uklj
00052         buzzer.buzzOff(); //buzzer ugašen (klasa)
00053         Segmentni = Segmentniprikaz(SegDisp_prikaz/10); //int od 0-100 se skalira /10 kako bi dobio broj za prikaz na segmentnom
00054 
00055        
00056     }
00057 
00058     if (razina >=1.00 && razina <99) //ukoliko se spremnik puni ili prazni (odnosno između praznog i potpuno punog signalizacija zuta)
00059     {
00060        
00061         Crvena = 0;
00062         Zuta = 1;
00063         Zelena = 0;
00064         treptanje.detach();
00065         buzzer.buzzOff();
00066         stanje=2;
00067         Segmentni = Segmentniprikaz(SegDisp_prikaz/10);
00068       
00069     }
00070     if (razina >=99) 
00071     {
00072         
00073         Zuta = 0;
00074         Zelena = 0;
00075         treptanje.attach(&crvena_treptanje, 0.5); //ticker - treptanje crvene LEDice - funkcija, period
00076         buzzer.buzz();
00077         Segmentni = Segmentniprikaz(SegDisp_prikaz/10);
00078         
00079     }
00080 
00081 }
00082 
00083     int main() {
00084 
00085     Tipkalo.mode(PullUp); //PullUp otpornik za tipkalo
00086     Tipkalo.rise(&toggle); //ukoliko se pritisne tipaklo ide u toggle funkciju
00087     debouncing_timer.start();//start timera za debouncing
00088 
00089   
00090 
00091     while (1)
00092     {
00093         
00094         razina = Ain*100; //skaliranje razine - %
00095         SegDisp_prikaz=razina;//prikaz razine
00096   
00097   
00098   if(testmod_stanje==1) //pritiskom na tipkalo aktivira se test mode. U test modeu trebaju sve ledice svijetliti, biti upaljeni sve segmenti na display-u (i točka) te buzzer raditi.
00099     {                          //vrijeme test modea je trenutno podešeno na 3 sekude (u zaglavlju)
00100         treptanje.detach(); //detach treptanje(iskljuci)
00101         Zelena=1; //uklj zelenu
00102         Zuta=1; //uklj zutu
00103         Crvena=1; //ukljuci crvenu
00104         buzzer.buzz(); //upali buzzer
00105         printf("Test mod ukljucen!"); //prikazi da je test mod ukljuce
00106         Segmentni = Segmentniprikaz(12); //prikazi ono što je na case 12 (svi segmenti uklj)
00107         wait (vrijeme_test_moda); //čekaj 3 sekunde (trajanje test moda)
00108         testmod_stanje=0; //postavi test mod u 0, ugasi ga
00109         
00110     }
00111     
00112 
00113     trenutno_stanje(stanje); //pozivanje funkcije za trenutno stanje
00114     
00115       if(stanje==1) {  
00116              
00117                 printf("Trenutna razina u spremniku = %f \n",  razina); //ispis razine
00118                 wait(vrijeme_cekanja); //čekanje
00119                 stanja_signalizacije(razina); //postavi signalizaciju prema funkciji
00120               
00121     }
00122     
00123       if(stanje==2) {  
00124 
00125                 printf("Trenutna razina u spremniku = %f \n",  razina);
00126                 wait(vrijeme_cekanja);//čekanje 500ms 
00127                 stanja_signalizacije(razina);
00128               
00129     }
00130 
00131       if(stanje==3) {  
00132 
00133                 printf("Trenutna razina u spremniku = %f \n",  razina);
00134                 wait(vrijeme_cekanja);//čekanje 500ms 
00135                 stanja_signalizacije(razina);
00136                 
00137     }
00138    
00139  }
00140 
00141 }
00142 
00143 void toggle() { //funkcija za toggle tipkala
00144 
00145     if (debouncing_timer.read_ms()>200){ // timer za debounce 200ms
00146                   
00147          testmod_stanje=1; //postavi test mod u 1
00148         }
00149 debouncing_timer.reset(); // reset timera za debounce
00150 }
00151