pustil jsem se do projektu automatické výměny vody v akváriu (předem říkám, že jsem začátečník

Používám Mega 2560 R3 (z Aliexpressu)
4x relé modul
RTC DS3231
Potřeboval bych "nakopnout", kde dělám chybu nebo jak by se to dalo udělat lépe. Zatím zkouším pokus/omyl.
Kód: Vybrat vše
#include <SPI.h>
#include <Wire.h>
#include <DS3231.h>
#define DS3231_I2C_ADDRESS 0x68
// inicializace RTC z knihovny
DS3231 rtc;
// vytvoření proměnné pro práci s časem
RTCDateTime datumCas;
// Arduino Měřič vzdálenosti ultrazvukový
// piny pro připojení Trig a Echo z modulu
int pTrig = A0;
int pEcho = A1;
// inicializace proměnných, do kterých se uloží data
long odezva, vzdalenost;
void setup() {
// komunikace přes sériovou linku rychlostí 9600 baud
Serial.begin(9600);
Wire.begin();
// nastavení pinů modulu jako výstup a vstup
pinMode(pTrig, OUTPUT);
pinMode(pEcho, INPUT);
// zahájení komunikace s RTC obvodem
rtc.begin();
// nastavení času v RTC podle času kompilace programu,
// stačí nahrát jednou
rtc.setDateTime(__DATE__, __TIME__);
// přímé nastavení času pro RTC
//rtc.setDateTime(__DATE__, "12:34:56");
pinMode(8, OUTPUT); // pin pro čerpadlo vypouštění
pinMode(9, OUTPUT); // pin pro čerpadlo napouštění
}
void loop()
{
Serial.begin(9600);
digitalWrite(pTrig, LOW);
delayMicroseconds(2);
digitalWrite(pTrig, HIGH);
delayMicroseconds(5);
digitalWrite(pTrig, LOW);
odezva = pulseIn(pEcho, HIGH);
// přepočet času na vzdálenost v cm
vzdalenost = odezva / 58.31;
int sensorValue = analogRead(A4); //senzor pro alarm přetečení nádrže
delay(200);
// načtení času z RTC do proměnné
datumCas = rtc.getDateTime();
// postupný tisk informací po sériové lince
Serial.print("Datum a cas: ");
Serial.print(datumCas.hour); Serial.print(":");
Serial.print(datumCas.minute); Serial.print(":");
delay(500);
Serial.print("Vzdalenost je ");
Serial.print(vzdalenost);
Serial.println(" cm.");
delay(500);
Serial.println(sensorValue);
delay(500);
if (datumCas.hour == 21 && datumCas.minute == 40 ){
//Pokud je vše splněno, tak se začne vypouštět
digitalWrite(8, HIGH); // Vypouštění vody z akva (motor)
digitalWrite(9, LOW);
delay(300); //
}
if (vzdalenost>=4){
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
delay(400);
}
if (vzdalenost<=2){
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(2000);
}
}