Irrigazione automatica

Salve a tutti,
seguendo i vostri consigli, sono riuscito ad inserire un primo codice che mi riporta circa all'80% del mio progetto

// definizione delle librerie
#include <Wire.h>

// frequency musical notes
#define NOTE_C6  1047
#define NOTE_C3  131
#define NOTE_G3  196

// definizione dei pin
int SensUmiA = 1;
int SensUmiB = 2;
int LedA = 3;
int LedB = 6;
int PompA = 8;
int PompB = 7;
int Buz = 2;
int RedLedA = 5;
int GreenLedA = 4;
int RedLedB = 9;
int GreenLedB = 10;

// variabili
int ValSensA; // Valore del sensore A
int ValSensB; // Valore del sensore B

// definizione degli  oggetti


void setup() {

  /* Vorrei fare in modo che il ValSensA e ValSensB eseguano le letture esattamente alle ore; 00:00 , 06:00 , 12:00 , 18:00 di ogni giorno.
    3 letture a distanza di 5 minuti e trarre la media.
    L'attivazione della pompa A/B con ValSensA/B <300 ma solo dalle 22:00 alle 06:00*/

  // inizializzazione seriale
  Serial.begin(9600);


  // inizializzazione Pin Arduino Nano
  pinMode(Buz, OUTPUT);
  pinMode(LedA, OUTPUT);
  pinMode(LedB, OUTPUT);
  pinMode(PompA, OUTPUT);
  pinMode(PompB, OUTPUT);
  pinMode(RedLedA, OUTPUT);
  pinMode(GreenLedA, OUTPUT);
  pinMode(RedLedB, OUTPUT);
  pinMode(GreenLedB, OUTPUT);

  // inizializzazione ritardo
  delay(5000);
}

void loop() {
  // lettura dei sensori
  ValSensA = analogRead(SensUmiA);
  ValSensB = analogRead(SensUmiB);


  // ricerca range di umidità
  if (analogRead(ValSensA) >= 500) {
    digitalWrite(GreenLedA, HIGH);
    // valore superiore a 500 corrisponde terra bagnata
    delay(250);

  }

  if (analogRead(ValSensB) >= 500) {
    digitalWrite(GreenLedB, HIGH);
    // valore superiore a 500 corrisponde terra bagnata
    delay(250);
  }

  if ((analogRead(ValSensA) > 300) && (analogRead(ValSensA) < 500)) {
    //se il valore è compreso tra 300 e 500 lampeggia led verde
    digitalWrite(GreenLedA, LOW);
    delay(500);
    digitalWrite(GreenLedA, HIGH);
    delay(500);
  }

  if ((analogRead(ValSensB) > 300) && (analogRead(ValSensB) < 500)) {
    //se il valore è compreso tra 300 e 500 lampeggia led verde
    digitalWrite(GreenLedB, LOW);
    delay(500);
    digitalWrite(GreenLedB, HIGH);
    delay(500);
  }

  if (analogRead(ValSensA) < 300) {
    digitalWrite(RedLedA, HIGH);
    // valore inferiore o uguale a 300 accendi led rosso terra secca
    tone(Buz, NOTE_C6, 100); // suona allarme
    delay(250);
    digitalWrite(PompA, HIGH); //attiva pompa A
    noTone(Buz);
    ValSensA = analogRead(SensUmiA);
  }

  if (analogRead(ValSensB) < 300) {
    digitalWrite(RedLedB, HIGH);
    // valore inferiore o uguale a 300 accendi led rosso terra secca
    tone(Buz, NOTE_C6, 100); // suona  allarme
    delay(250);
    digitalWrite(PompB, HIGH); // attiva pompa B
    noTone(Buz);
    ValSensB = analogRead(SensUmiB);
  }

  {
    digitalWrite(PompA, LOW); // spegni pompa A
    digitalWrite(RedLedA, LOW); // spegni led rosso A
  }

  {
    digitalWrite(PompB, LOW); // spegni pompa B
    digitalWrite(RedLedB, LOW); // spegni led rosso B
  }

  delay(500);

}

Ora mi rimane da temporizzare le letture del terreno in determinati orari del giorno eseguendo la media di 3 valori ed attivare la pompa, nel caso il valore sia al di sotto di quello stabilito, solo dalle 22:00 alle 06:00
Accetto suggerimenti e consigli da chiunque

Grazie