Praćenje popunjenosti spremnika
Dependencies: mbed ILI9163LCD StrLib HCSR04
main.cpp@0:0c58aea646d7, 2020-09-04 (annotated)
- Committer:
- dbatina
- Date:
- Fri Sep 04 12:51:03 2020 +0000
- Revision:
- 0:0c58aea646d7
Seminarski zadatak iz kolegija: Mikrokontroleri.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dbatina | 0:0c58aea646d7 | 1 | #include "mbed.h" |
dbatina | 0:0c58aea646d7 | 2 | #include "ili9163lcd.h" |
dbatina | 0:0c58aea646d7 | 3 | //#include "hcsr04.h" |
dbatina | 0:0c58aea646d7 | 4 | #include "StrLib.h" |
dbatina | 0:0c58aea646d7 | 5 | #include "HCSR04.h" |
dbatina | 0:0c58aea646d7 | 6 | |
dbatina | 0:0c58aea646d7 | 7 | ILI9163 TFT(D13,D11,D10,D9,D8); |
dbatina | 0:0c58aea646d7 | 8 | HCSR04 usensor(D4, D2); |
dbatina | 0:0c58aea646d7 | 9 | Ticker ticker; |
dbatina | 0:0c58aea646d7 | 10 | Timer debounce; |
dbatina | 0:0c58aea646d7 | 11 | Timer debounce1; |
dbatina | 0:0c58aea646d7 | 12 | |
dbatina | 0:0c58aea646d7 | 13 | int dist = 0; |
dbatina | 0:0c58aea646d7 | 14 | int postotakPopunjenosti = 0; |
dbatina | 0:0c58aea646d7 | 15 | bool startFlag = false; |
dbatina | 0:0c58aea646d7 | 16 | bool resetFlag = false; |
dbatina | 0:0c58aea646d7 | 17 | |
dbatina | 0:0c58aea646d7 | 18 | DigitalOut green(A2); |
dbatina | 0:0c58aea646d7 | 19 | DigitalOut yellow(A1); |
dbatina | 0:0c58aea646d7 | 20 | DigitalOut red(A0); |
dbatina | 0:0c58aea646d7 | 21 | InterruptIn startBtn(A4, PullDown); |
dbatina | 0:0c58aea646d7 | 22 | InterruptIn resetBtn(A5, PullDown); |
dbatina | 0:0c58aea646d7 | 23 | |
dbatina | 0:0c58aea646d7 | 24 | void start(); |
dbatina | 0:0c58aea646d7 | 25 | void reset(); |
dbatina | 0:0c58aea646d7 | 26 | void sensorRead(); |
dbatina | 0:0c58aea646d7 | 27 | void defaultScreen(); |
dbatina | 0:0c58aea646d7 | 28 | void displayState(); |
dbatina | 0:0c58aea646d7 | 29 | |
dbatina | 0:0c58aea646d7 | 30 | int main() { |
dbatina | 0:0c58aea646d7 | 31 | ticker.attach(&sensorRead, 1.0); |
dbatina | 0:0c58aea646d7 | 32 | |
dbatina | 0:0c58aea646d7 | 33 | debounce.start(); //ograničava pozivanje start funkcije ispod |
dbatina | 0:0c58aea646d7 | 34 | startBtn.rise(&start); |
dbatina | 0:0c58aea646d7 | 35 | debounce1.start(); |
dbatina | 0:0c58aea646d7 | 36 | resetBtn.rise(&reset); |
dbatina | 0:0c58aea646d7 | 37 | |
dbatina | 0:0c58aea646d7 | 38 | start: |
dbatina | 0:0c58aea646d7 | 39 | defaultScreen(); |
dbatina | 0:0c58aea646d7 | 40 | |
dbatina | 0:0c58aea646d7 | 41 | while(1) { |
dbatina | 0:0c58aea646d7 | 42 | |
dbatina | 0:0c58aea646d7 | 43 | |
dbatina | 0:0c58aea646d7 | 44 | if(startFlag == false) { |
dbatina | 0:0c58aea646d7 | 45 | |
dbatina | 0:0c58aea646d7 | 46 | TFT.setFont((unsigned char*)font5x8); |
dbatina | 0:0c58aea646d7 | 47 | TFT.putS("Za pokretanje: ", TFT.lcdTextX(2), TFT.lcdTextY(2),Black, White); |
dbatina | 0:0c58aea646d7 | 48 | TFT.putS("pritisnite start", TFT.lcdTextX(2), TFT.lcdTextY(4),Black, White); |
dbatina | 0:0c58aea646d7 | 49 | } else { |
dbatina | 0:0c58aea646d7 | 50 | defaultScreen(); |
dbatina | 0:0c58aea646d7 | 51 | |
dbatina | 0:0c58aea646d7 | 52 | while(1) { |
dbatina | 0:0c58aea646d7 | 53 | if (resetFlag == true) {break;} |
dbatina | 0:0c58aea646d7 | 54 | displayState(); |
dbatina | 0:0c58aea646d7 | 55 | if(postotakPopunjenosti <= 30) { |
dbatina | 0:0c58aea646d7 | 56 | green = 1; |
dbatina | 0:0c58aea646d7 | 57 | yellow = 0; |
dbatina | 0:0c58aea646d7 | 58 | red = 0; |
dbatina | 0:0c58aea646d7 | 59 | } else if (postotakPopunjenosti <= 80 && postotakPopunjenosti > 30) { |
dbatina | 0:0c58aea646d7 | 60 | green = 0; |
dbatina | 0:0c58aea646d7 | 61 | yellow = 1; |
dbatina | 0:0c58aea646d7 | 62 | red = 0; |
dbatina | 0:0c58aea646d7 | 63 | } else if (postotakPopunjenosti > 80) { |
dbatina | 0:0c58aea646d7 | 64 | green = 0; |
dbatina | 0:0c58aea646d7 | 65 | yellow = 0; |
dbatina | 0:0c58aea646d7 | 66 | red = 1; |
dbatina | 0:0c58aea646d7 | 67 | } |
dbatina | 0:0c58aea646d7 | 68 | } |
dbatina | 0:0c58aea646d7 | 69 | green = 0; |
dbatina | 0:0c58aea646d7 | 70 | yellow = 0; |
dbatina | 0:0c58aea646d7 | 71 | red = 0; |
dbatina | 0:0c58aea646d7 | 72 | goto start; |
dbatina | 0:0c58aea646d7 | 73 | } |
dbatina | 0:0c58aea646d7 | 74 | |
dbatina | 0:0c58aea646d7 | 75 | } |
dbatina | 0:0c58aea646d7 | 76 | |
dbatina | 0:0c58aea646d7 | 77 | } |
dbatina | 0:0c58aea646d7 | 78 | |
dbatina | 0:0c58aea646d7 | 79 | void start() { |
dbatina | 0:0c58aea646d7 | 80 | if(debounce.read_ms() > 200) { |
dbatina | 0:0c58aea646d7 | 81 | startFlag = true; |
dbatina | 0:0c58aea646d7 | 82 | resetFlag = false; |
dbatina | 0:0c58aea646d7 | 83 | debounce.reset(); |
dbatina | 0:0c58aea646d7 | 84 | } |
dbatina | 0:0c58aea646d7 | 85 | } |
dbatina | 0:0c58aea646d7 | 86 | |
dbatina | 0:0c58aea646d7 | 87 | void reset() { |
dbatina | 0:0c58aea646d7 | 88 | if(debounce1.read_ms() > 200) { |
dbatina | 0:0c58aea646d7 | 89 | startFlag = false; |
dbatina | 0:0c58aea646d7 | 90 | resetFlag = true; |
dbatina | 0:0c58aea646d7 | 91 | debounce1.reset(); |
dbatina | 0:0c58aea646d7 | 92 | } |
dbatina | 0:0c58aea646d7 | 93 | } |
dbatina | 0:0c58aea646d7 | 94 | |
dbatina | 0:0c58aea646d7 | 95 | void sensorRead() { |
dbatina | 0:0c58aea646d7 | 96 | dist = usensor.distance(1); |
dbatina | 0:0c58aea646d7 | 97 | } |
dbatina | 0:0c58aea646d7 | 98 | |
dbatina | 0:0c58aea646d7 | 99 | void defaultScreen() { |
dbatina | 0:0c58aea646d7 | 100 | TFT.init(LCD_ORIENTATION1); |
dbatina | 0:0c58aea646d7 | 101 | TFT.clearDisplay(Black); |
dbatina | 0:0c58aea646d7 | 102 | TFT.rectangle(4, 4, 124, 124, Green); |
dbatina | 0:0c58aea646d7 | 103 | } |
dbatina | 0:0c58aea646d7 | 104 | |
dbatina | 0:0c58aea646d7 | 105 | void displayState(){ |
dbatina | 0:0c58aea646d7 | 106 | |
dbatina | 0:0c58aea646d7 | 107 | if(dist >= 30 ) { |
dbatina | 0:0c58aea646d7 | 108 | postotakPopunjenosti = 0; |
dbatina | 0:0c58aea646d7 | 109 | } else { |
dbatina | 0:0c58aea646d7 | 110 | postotakPopunjenosti = ((30 - dist) / 30.0)*100; |
dbatina | 0:0c58aea646d7 | 111 | } |
dbatina | 0:0c58aea646d7 | 112 | |
dbatina | 0:0c58aea646d7 | 113 | string strPostotkaPop = I2A(postotakPopunjenosti, 10, 3); |
dbatina | 0:0c58aea646d7 | 114 | const char *prvi = strPostotkaPop.c_str(); |
dbatina | 0:0c58aea646d7 | 115 | string strUdaljenosti = I2A(dist, 10, 3); |
dbatina | 0:0c58aea646d7 | 116 | const char *drugi = strUdaljenosti.c_str(); |
dbatina | 0:0c58aea646d7 | 117 | |
dbatina | 0:0c58aea646d7 | 118 | if( 0 <= postotakPopunjenosti && postotakPopunjenosti <= 100 ) { |
dbatina | 0:0c58aea646d7 | 119 | TFT.setFont((unsigned char*)font5x8); |
dbatina | 0:0c58aea646d7 | 120 | TFT.putS("Popunjenost", TFT.lcdTextX(2), TFT.lcdTextY(2),Black, White); |
dbatina | 0:0c58aea646d7 | 121 | TFT.putS("spremnika:", TFT.lcdTextX(2), TFT.lcdTextY(4),Black, White); |
dbatina | 0:0c58aea646d7 | 122 | TFT.putS(prvi, TFT.lcdTextX(2), TFT.lcdTextY(6),Black, White); |
dbatina | 0:0c58aea646d7 | 123 | TFT.putS("%", TFT.lcdTextX(5), TFT.lcdTextY(6),Black, White); |
dbatina | 0:0c58aea646d7 | 124 | |
dbatina | 0:0c58aea646d7 | 125 | TFT.setFont((unsigned char*)font5x8); |
dbatina | 0:0c58aea646d7 | 126 | TFT.putS("Za info udaljenost", TFT.lcdTextX(2), TFT.lcdTextY(10),Black, White); |
dbatina | 0:0c58aea646d7 | 127 | TFT.putS("od senzora(cm):", TFT.lcdTextX(2), TFT.lcdTextY(12),Black, White); |
dbatina | 0:0c58aea646d7 | 128 | TFT.putS(drugi, TFT.lcdTextX(2), TFT.lcdTextY(14),Black, White); |
dbatina | 0:0c58aea646d7 | 129 | } |
dbatina | 0:0c58aea646d7 | 130 | } |