Praćenje popunjenosti spremnika

Dependencies:   mbed ILI9163LCD StrLib HCSR04

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?

UserRevisionLine numberNew 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 }