Hi,
The problem doesn't appear to be timing. Your Water() function never checks to see if the plants are sufficiently watered. It continues to test the same value in moisture_val without updating moisture_val with another analogRead(). Water() needs something like this:
void Water() {
// if (moisture_val>260){ <- test used to say this
if(analogRead(moistureSensor)>260) {
On();
Alarm.delay(10000);
TurnOff();
} else {
Serial.print("Moist Ok");
Serial.println();
}
}
Hopefully this will help your future water bill ![]()
Cheers ! Geoff