#include <LiquidCrystal.h>
#define RS 12
#define E 11
#define D4 10
#define D5 9
#define D6 8
#define D7 7
#define BUTTON_PIN 2
#define gektar 10000
#define speed 80 // km/h
#define width 20 // meters
double LpGa;
double LitresPerMinute;
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
void setup() {
lcd.begin(16, 2);
pinMode(BUTTON_PIN, INPUT);
}
float TotalLitres = 0;
float Total = 0;
bool flag = false;
bool OnHold = false;
void loop() {
static uint32_t timer = millis();
static uint32_t timerGa = millis();
static uint32_t timerButton = millis();
int val = analogRead(A0);
// Расход литры в минуту (перевести в литры на гектар)
LitresPerMinute = val * 30.0 / 1023.0;
//float LitresPerGa = LitresPerMinute
LpGa = (LitresPerMinute * gektar) / (speed * 16.667 * width);
lcd.setCursor(0,0);
lcd.print("L/Ga: ");
lcd.print(LpGa);
lcd.print(" ");
// Общий расход в литрах
if((millis() - timer) >= 100){
TotalLitres += LitresPerMinute / 600;
timer = millis();
}
if((millis() - timer) >= 1000){
Total = TotalLitres;
timerGa = millis();
}
lcd.setCursor(0, 1);
lcd.print("Total: ");
lcd.print(TotalLitres);
lcd.print(" L ");
// Опрос кнопки
bool btnState = digitalRead(BUTTON_PIN);
if(btnState && !flag){
flag = true;
timerButton = millis();
}
if(!OnHold && btnState && flag && (millis() - timerButton) >= 1000){
TotalLitres = 0;
lcd.setCursor(0, 1);
lcd.print("Litres: ");
lcd.print(TotalLitres);
lcd.print(" ");
timerButton = millis();
OnHold = true;
}
if(!btnState){
flag = false;
OnHold = false;
}
}