#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#define TRIG_PIN 9
#define ECHO_PIN 8
#define LED_PIN 7
#define BUZZER_PIN 6
#define BUTTON_PIN 5
const int MAX_HEIGHT_CM = 400;
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS3231 rtc;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
lcd.print("RTC ni najden");
while (1);
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
lcd.setCursor(0, 0);
lcd.print("Zagon sistema...");
delay(2000);
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) {
int distance = readDistanceCM();
int level = MAX_HEIGHT_CM - distance;
level = constrain(level, 0, MAX_HEIGHT_CM);
int percentage = map(level, 0, MAX_HEIGHT_CM, 0, 100);
DateTime now = rtc.now();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Voda:");
lcd.print(percentage);
lcd.print("% ");
// Prikaz časa HH:MM
if (now.hour() < 10) lcd.print("0");
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) lcd.print("0");
lcd.print(now.minute());
lcd.setCursor(0, 1);
lcd.print("Visina:");
lcd.print(level);
lcd.print("cm ");
if (percentage < 20) {
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000);
} else {
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
}
delay(500);
}
}
int readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
int distance = duration * 0.034 / 2;
return distance;
}