Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BuzzLib SegDispLib mbed
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
Generated on Tue Nov 29 2022 19:16:59 by
1.7.2