TVZ2020 / Mbed OS SpremnikVode
Committer:
miroslavjovanovic99
Date:
Mon Jul 12 19:27:09 2021 +0000
Revision:
0:aea33cabb0cc
SpremnikVode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miroslavjovanovic99 0:aea33cabb0cc 1 #include "mbed.h"
miroslavjovanovic99 0:aea33cabb0cc 2 #include "SegDisplay.h"
miroslavjovanovic99 0:aea33cabb0cc 3 InterruptIn button1(PA_5); //Interrupt pin
miroslavjovanovic99 0:aea33cabb0cc 4 InterruptIn button2(PA_6); //Interrupt pin
miroslavjovanovic99 0:aea33cabb0cc 5 Serial pc(USBTX, USBRX); //Serijska komunikacija s računalom
miroslavjovanovic99 0:aea33cabb0cc 6 DigitalOut greenLED(PA_10);
miroslavjovanovic99 0:aea33cabb0cc 7 DigitalOut yellowLED(PB_3);
miroslavjovanovic99 0:aea33cabb0cc 8 DigitalOut redLED(PB_5);
miroslavjovanovic99 0:aea33cabb0cc 9 PwmOut buzzer(PA_4);
miroslavjovanovic99 0:aea33cabb0cc 10 Ticker blink; //Ticker za blinkanje ledice
miroslavjovanovic99 0:aea33cabb0cc 11 Timer debounce; //Timer za micanje debouncinga
miroslavjovanovic99 0:aea33cabb0cc 12 void toggle(void); //inicijalizacija funkcije
miroslavjovanovic99 0:aea33cabb0cc 13 void toggle2(void); //inicijalizacija funkcije
miroslavjovanovic99 0:aea33cabb0cc 14 int state=3; // inicijalizacija varijable
miroslavjovanovic99 0:aea33cabb0cc 15 int razina=0;
miroslavjovanovic99 0:aea33cabb0cc 16
miroslavjovanovic99 0:aea33cabb0cc 17 void redBlink()
miroslavjovanovic99 0:aea33cabb0cc 18 {
miroslavjovanovic99 0:aea33cabb0cc 19 redLED=!redLED;
miroslavjovanovic99 0:aea33cabb0cc 20
miroslavjovanovic99 0:aea33cabb0cc 21 }
miroslavjovanovic99 0:aea33cabb0cc 22
miroslavjovanovic99 0:aea33cabb0cc 23 void yellowBlink()
miroslavjovanovic99 0:aea33cabb0cc 24 {
miroslavjovanovic99 0:aea33cabb0cc 25 yellowLED=!yellowLED;
miroslavjovanovic99 0:aea33cabb0cc 26
miroslavjovanovic99 0:aea33cabb0cc 27 }
miroslavjovanovic99 0:aea33cabb0cc 28
miroslavjovanovic99 0:aea33cabb0cc 29 void greenBlink()
miroslavjovanovic99 0:aea33cabb0cc 30 {
miroslavjovanovic99 0:aea33cabb0cc 31 greenLED=!greenLED;
miroslavjovanovic99 0:aea33cabb0cc 32
miroslavjovanovic99 0:aea33cabb0cc 33 }
miroslavjovanovic99 0:aea33cabb0cc 34
miroslavjovanovic99 0:aea33cabb0cc 35 void signalizacija(int razina) // Funckija za signalizaciju razine popunjenosti spremnika
miroslavjovanovic99 0:aea33cabb0cc 36 {
miroslavjovanovic99 0:aea33cabb0cc 37 if (razina <= 30) {
miroslavjovanovic99 0:aea33cabb0cc 38 blink.attach(&greenBlink, 0.25); // Ticker za blinkanje zelene LED-ice
miroslavjovanovic99 0:aea33cabb0cc 39 yellowLED = 0;
miroslavjovanovic99 0:aea33cabb0cc 40 redLED= 0;
miroslavjovanovic99 0:aea33cabb0cc 41 Seg1 = SegConvert(razina%10); // Pozivanje funkcije za ispis na 7 seg. displayu
miroslavjovanovic99 0:aea33cabb0cc 42 buzzer=0; // set duty cycle
miroslavjovanovic99 0:aea33cabb0cc 43 } else if (razina >30 && razina <= 60) {
miroslavjovanovic99 0:aea33cabb0cc 44 blink.detach();
miroslavjovanovic99 0:aea33cabb0cc 45 greenLED= 1;
miroslavjovanovic99 0:aea33cabb0cc 46 blink.attach(&yellowBlink, 0.25); // Ticker za blinkanje žute LED-ice
miroslavjovanovic99 0:aea33cabb0cc 47 redLED = 0;
miroslavjovanovic99 0:aea33cabb0cc 48 Seg1 = SegConvert(razina%10); // Pozivanje funkcije za ispis na 7 seg. displayu
miroslavjovanovic99 0:aea33cabb0cc 49 buzzer=0; // set duty cycle
miroslavjovanovic99 0:aea33cabb0cc 50 } else if (razina >60 && razina <= 90) {
miroslavjovanovic99 0:aea33cabb0cc 51 blink.detach();
miroslavjovanovic99 0:aea33cabb0cc 52 greenLED= 1;
miroslavjovanovic99 0:aea33cabb0cc 53 yellowLED = 1;
miroslavjovanovic99 0:aea33cabb0cc 54 blink.attach(&redBlink, 0.25); // Ticker za blinkanje crvene LED-ice
miroslavjovanovic99 0:aea33cabb0cc 55 Seg1 = SegConvert(razina%10); // Pozivanje funkcije za ispis na 7 seg. displayu
miroslavjovanovic99 0:aea33cabb0cc 56 buzzer=0; // set duty cycle
miroslavjovanovic99 0:aea33cabb0cc 57 } else if (razina >90 && razina <= 100) {
miroslavjovanovic99 0:aea33cabb0cc 58 blink.detach();
miroslavjovanovic99 0:aea33cabb0cc 59 redLED = 1;
miroslavjovanovic99 0:aea33cabb0cc 60 yellowLED = 1;
miroslavjovanovic99 0:aea33cabb0cc 61 greenLED= 1;
miroslavjovanovic99 0:aea33cabb0cc 62 Seg1 = SegConvert(razina%10); // Pozivanje funkcije za ispis na 7 seg. displayu
miroslavjovanovic99 0:aea33cabb0cc 63 buzzer=0.125; // set duty cycle
miroslavjovanovic99 0:aea33cabb0cc 64 }
miroslavjovanovic99 0:aea33cabb0cc 65 }
miroslavjovanovic99 0:aea33cabb0cc 66
miroslavjovanovic99 0:aea33cabb0cc 67
miroslavjovanovic99 0:aea33cabb0cc 68 int main()
miroslavjovanovic99 0:aea33cabb0cc 69 {
miroslavjovanovic99 0:aea33cabb0cc 70 debounce.start();
miroslavjovanovic99 0:aea33cabb0cc 71 SegInit(); // Pozivanje funkcije za inicijalizaciju 7 seg. displaya
miroslavjovanovic99 0:aea33cabb0cc 72 while (true) {
miroslavjovanovic99 0:aea33cabb0cc 73 button1.rise(&toggle); // Interrupt, punjenje spremnika
miroslavjovanovic99 0:aea33cabb0cc 74 button2.rise(&toggle2); // Interrupt, pražnjenje spremnika
miroslavjovanovic99 0:aea33cabb0cc 75 if(state==1) { // Punjenje spremnika vodom
miroslavjovanovic99 0:aea33cabb0cc 76 pc.printf("Postotak popunjenosti spremnika: %d\n\r", razina);
miroslavjovanovic99 0:aea33cabb0cc 77 razina++;
miroslavjovanovic99 0:aea33cabb0cc 78 wait(0.25);
miroslavjovanovic99 0:aea33cabb0cc 79 signalizacija(razina);
miroslavjovanovic99 0:aea33cabb0cc 80 if (razina == 100) {
miroslavjovanovic99 0:aea33cabb0cc 81 state=3;
miroslavjovanovic99 0:aea33cabb0cc 82 }
miroslavjovanovic99 0:aea33cabb0cc 83 } else if(state==2) { // Pražnjenje spremnika
miroslavjovanovic99 0:aea33cabb0cc 84 pc.printf("Postotak popunjenosti spremnika: %d\n\r", razina);
miroslavjovanovic99 0:aea33cabb0cc 85 razina--;
miroslavjovanovic99 0:aea33cabb0cc 86 wait(0.25);
miroslavjovanovic99 0:aea33cabb0cc 87 signalizacija(razina);
miroslavjovanovic99 0:aea33cabb0cc 88 if (razina == 0) {
miroslavjovanovic99 0:aea33cabb0cc 89 state=3;
miroslavjovanovic99 0:aea33cabb0cc 90 }
miroslavjovanovic99 0:aea33cabb0cc 91 } else if(state==3) { // Spremnik je ili pun ili prazan
miroslavjovanovic99 0:aea33cabb0cc 92 if (razina == 100) {
miroslavjovanovic99 0:aea33cabb0cc 93 pc.printf("Spremnik je pun: %d\n\r", razina);;
miroslavjovanovic99 0:aea33cabb0cc 94 } else if (razina == 0) {
miroslavjovanovic99 0:aea33cabb0cc 95 pc.printf("Spremnik je prazan: %d\n\r", razina);;
miroslavjovanovic99 0:aea33cabb0cc 96 }
miroslavjovanovic99 0:aea33cabb0cc 97 signalizacija(razina);
miroslavjovanovic99 0:aea33cabb0cc 98 }
miroslavjovanovic99 0:aea33cabb0cc 99 }
miroslavjovanovic99 0:aea33cabb0cc 100
miroslavjovanovic99 0:aea33cabb0cc 101 }
miroslavjovanovic99 0:aea33cabb0cc 102
miroslavjovanovic99 0:aea33cabb0cc 103 //Interrupt, punjenje spremnika
miroslavjovanovic99 0:aea33cabb0cc 104 void toggle()
miroslavjovanovic99 0:aea33cabb0cc 105 {
miroslavjovanovic99 0:aea33cabb0cc 106 if (debounce.read_ms()>200) { // only allow toggle if debounce timer
miroslavjovanovic99 0:aea33cabb0cc 107 state=1; // has passed 200 ms
miroslavjovanovic99 0:aea33cabb0cc 108 }
miroslavjovanovic99 0:aea33cabb0cc 109 debounce.reset(); // restart timer when the toggle is performed
miroslavjovanovic99 0:aea33cabb0cc 110 }
miroslavjovanovic99 0:aea33cabb0cc 111
miroslavjovanovic99 0:aea33cabb0cc 112 //Interrupt, pražnjenje spremnika
miroslavjovanovic99 0:aea33cabb0cc 113 void toggle2()
miroslavjovanovic99 0:aea33cabb0cc 114 {
miroslavjovanovic99 0:aea33cabb0cc 115 if (debounce.read_ms()>200) { // only allow toggle if debounce timer
miroslavjovanovic99 0:aea33cabb0cc 116 state=2; // has passed 200 ms
miroslavjovanovic99 0:aea33cabb0cc 117
miroslavjovanovic99 0:aea33cabb0cc 118 }
miroslavjovanovic99 0:aea33cabb0cc 119 debounce.reset(); // restart timer when the toggle is performed
miroslavjovanovic99 0:aea33cabb0cc 120 }