Allora, come minimo per l’aiuto che mi stai dando ti meriti un punto Karma peccato che non posso fare di più…
Claudio_FF:
Tra il codice del post iniziale e quello del post #23 non capisco più se i relé si attivano con HIGH o LOW. Nelle definizioni iniziali bisogna sempre scriverlo, ad esempio:
const int Pompa = 9; // rele` pompa HIGH=spento
const int Motore = 10; // rele` motore HIGH=spento
per comandare i relè HIGH è = a spento, LOW acceso
> Le variabili 'lettura' e 'lettura1' sono usate in modo strano, funzionano, ma prima servono a impostare i pin di ingresso (mentre per quelli di uscita si sono usate delle const int), e poi vengono usate per contenere i risultati delle digitalRead.
>
> Lo scopo del dare dei nomi di comodo ai pin (come per le altre define) è per evitare di scrivere i nomi dei pin dentro il programma con il rischio di confusione, quindi è inutile usare delle variabili 'lettura' e 'lettura1' per dare dei nomi a dei pin (che non si intuisce a cosa servano), a maggior ragione se poi quelle variabili vengono usate per altri scopi e nelle digitalRead vengono usati di nuovo i nomi dei pin e non quelli di comodo:
>
>
> ```
> const int SENSORE1 = A0;
const int SENSORE2 = A1;
oppure:
#define SENSORE1 A0
#define SENSORE2 A1
e quindi si usano i nomi di comodo:
lettura = analogRead(SENSORE1);
lettura1 = analogRead(SENSORE2);
ho fatto come dici tu inserendo
const int SENSORE1 = A0;
const int SENSORE2 = A1;
ma nel loop la variabile " lettura " non viene più riconosciuta, e vedi prima di scrivere qui ho fatto migliaia di prove. L'errore viene in queste due istruzioni
lettura = analogRead(A0);
sensorValue = map (lettura, 1008, 319, 0, 100); // converto il valore analogico in percentuale
Serial.print(“Umidità terra 1 : “);
Serial.print(sensorValue);
Serial.println (”%”); //Stampa a schermo il valore
lettura1 = analogRead(A1);
sensorValue1 = map (lettura1, 1010, 215, 0, 100); // converto il valore analogico in percentuale
Serial.print(“Umidità terra 2 : “);
Serial.print(sensorValue1);
Serial.println (”%”); //Stampa a schermo il valore
Ho inserito una pausa di 5000mills all'inizio del loop, ho creato una unsigned long pausa e ho inserito una void attesa(),funziona ma quando apro il monitor seriale le letture scorrono veloci per 5 secondi e poi si stabilizza leggendomi ogni 5sec, succede anche la stessa cosa nel momento che si attivano i relè cioè appena si attiva il relè scorre dopo 5 si stabilazza la lettura ed al prossimo relè acceso continua a scorrere... Dimmi se ho sbagliato qualcosa
const int Pompa = 9;
const int Motore = 10;
int lettura = A0;
int lettura1 = A1;
int sensorValue = 1008;
int sensorValue1 = 1014;
unsigned long tempo = 0;
unsigned long pausa = 0;
byte situazione = 0;
#include <HygrometerSensor.h>
#include <Adafruit_Sensor.h>
void avviaPompa() {
digitalWrite(Pompa, LOW);
}
void fermaPompa() {
digitalWrite(Pompa, HIGH);
}
void attivaImpulso() {
digitalWrite(Motore, LOW);
}
void disattivaImpulso() {
digitalWrite(Motore, HIGH);
}
void attesa() {
delay(5000);
}
void setup() {
Serial.begin(9600);
Serial.println(“Serra Automatica”);
pinMode(Pompa, OUTPUT);
fermaPompa();
pinMode(Motore, OUTPUT);
disattivaImpulso();
pinMode(lettura, INPUT);
pinMode(lettura1, INPUT);
}
void loop() {
if (millis() - tempo >= 5000) {
pausa = millis();
attesa();
}
lettura = analogRead(A0);
sensorValue = map (lettura, 1008, 319, 0, 100); // converto il valore analogico in percentuale
Serial.print(“Umidità terra 1 : “);
Serial.print(sensorValue);
Serial.println (”%”); //Stampa a schermo il valore
lettura1 = analogRead(A1);
sensorValue1 = map (lettura1, 1010, 215, 0, 100); // converto il valore analogico in percentuale
Serial.print(“Umidità terra 2 : “);
Serial.print(sensorValue1);
Serial.println (”%”); //Stampa a schermo il valore
if (situazione == 0
&& lettura >= 775 && lettura1 >= 775) { // condizione di avvio
tempo = millis(); // salva tempo attuale
avviaPompa(); // accende pompa
situazione = 1; // passa a situazione 1
}
else if (situazione == 1 && millis() - tempo >= 10000) { // se passati 10s
attivaImpulso(); // attiva impulso motore
tempo = millis(); // salva tempo attuale
situazione = 2; // passa a situazione 2
}
else if (situazione == 2 && millis() - tempo >= 500) { // se passati 500ms
disattivaImpulso(); // disattiva impulso motore
tempo = millis(); // salva tempo attuale
situazione = 3; // passa a situazione 3
}
else if (situazione == 3 && millis() - tempo >= 9500) { // se passati 20s totali
fermaPompa(); // spegne
situazione = 0; // passa a situazione 0
}
}