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