Praćenje popunjenosti spremnika
Dependencies: mbed ILI9163LCD StrLib HCSR04
main.cpp
- Committer:
- dbatina
- Date:
- 2020-09-04
- Revision:
- 0:0c58aea646d7
File content as of revision 0:0c58aea646d7:
#include "mbed.h" #include "ili9163lcd.h" //#include "hcsr04.h" #include "StrLib.h" #include "HCSR04.h" ILI9163 TFT(D13,D11,D10,D9,D8); HCSR04 usensor(D4, D2); Ticker ticker; Timer debounce; Timer debounce1; int dist = 0; int postotakPopunjenosti = 0; bool startFlag = false; bool resetFlag = false; DigitalOut green(A2); DigitalOut yellow(A1); DigitalOut red(A0); InterruptIn startBtn(A4, PullDown); InterruptIn resetBtn(A5, PullDown); void start(); void reset(); void sensorRead(); void defaultScreen(); void displayState(); int main() { ticker.attach(&sensorRead, 1.0); debounce.start(); //ograničava pozivanje start funkcije ispod startBtn.rise(&start); debounce1.start(); resetBtn.rise(&reset); start: defaultScreen(); while(1) { if(startFlag == false) { TFT.setFont((unsigned char*)font5x8); TFT.putS("Za pokretanje: ", TFT.lcdTextX(2), TFT.lcdTextY(2),Black, White); TFT.putS("pritisnite start", TFT.lcdTextX(2), TFT.lcdTextY(4),Black, White); } else { defaultScreen(); while(1) { if (resetFlag == true) {break;} displayState(); if(postotakPopunjenosti <= 30) { green = 1; yellow = 0; red = 0; } else if (postotakPopunjenosti <= 80 && postotakPopunjenosti > 30) { green = 0; yellow = 1; red = 0; } else if (postotakPopunjenosti > 80) { green = 0; yellow = 0; red = 1; } } green = 0; yellow = 0; red = 0; goto start; } } } void start() { if(debounce.read_ms() > 200) { startFlag = true; resetFlag = false; debounce.reset(); } } void reset() { if(debounce1.read_ms() > 200) { startFlag = false; resetFlag = true; debounce1.reset(); } } void sensorRead() { dist = usensor.distance(1); } void defaultScreen() { TFT.init(LCD_ORIENTATION1); TFT.clearDisplay(Black); TFT.rectangle(4, 4, 124, 124, Green); } void displayState(){ if(dist >= 30 ) { postotakPopunjenosti = 0; } else { postotakPopunjenosti = ((30 - dist) / 30.0)*100; } string strPostotkaPop = I2A(postotakPopunjenosti, 10, 3); const char *prvi = strPostotkaPop.c_str(); string strUdaljenosti = I2A(dist, 10, 3); const char *drugi = strUdaljenosti.c_str(); if( 0 <= postotakPopunjenosti && postotakPopunjenosti <= 100 ) { TFT.setFont((unsigned char*)font5x8); TFT.putS("Popunjenost", TFT.lcdTextX(2), TFT.lcdTextY(2),Black, White); TFT.putS("spremnika:", TFT.lcdTextX(2), TFT.lcdTextY(4),Black, White); TFT.putS(prvi, TFT.lcdTextX(2), TFT.lcdTextY(6),Black, White); TFT.putS("%", TFT.lcdTextX(5), TFT.lcdTextY(6),Black, White); TFT.setFont((unsigned char*)font5x8); TFT.putS("Za info udaljenost", TFT.lcdTextX(2), TFT.lcdTextY(10),Black, White); TFT.putS("od senzora(cm):", TFT.lcdTextX(2), TFT.lcdTextY(12),Black, White); TFT.putS(drugi, TFT.lcdTextX(2), TFT.lcdTextY(14),Black, White); } }