Ciao vi chiedo una mano, ho semplificato e sistemato un po' il mio programmino..
Quando eseguo questo programma (se le condizioni sono verificate), con un tempo di 2s l'uscita "pumpPin" si abilita e disabilita, all'infinito. E fino a qui funziona tutto.
Come faccio a fare eseguire 1 solo ciclo a "pumpPin? (Quindi accensione e spegnimento)
Se poi la condizione "if (tempc>300)" si verifica nuovamente, voglio che si ripeta 1 solo ciclo "pumpPin".
Ho provato a usare delle variabili, o while..ma non ci riesco.
Mi potete aiutare per favore? Grazie tante.
//millis3 POMPA
byte pumpState = 0;
unsigned long previousMillis4 = 0;
unsigned long interval4 = 2000; //intervallo carico acqua
//millis1
unsigned long previousMillis1 = 0;
unsigned long interval1 = 1000; //intervallo di lettura NTC caldaia
int buttonstate = 0; //Variabile per leggere stato pulsante accensione
int buttonstatev = 0; //Variabile per lettura stato pulsante vapore
int tempc;
#define swa A3
#define swv A2
#define ledon 7
#define ledoff 11
#define ev 10
#define pumpPin 2
void setup()
{
Serial.begin(9600);
pinMode(ledon, OUTPUT);
pinMode(swa, INPUT);
pinMode(swv, INPUT);
pinMode(ledoff, OUTPUT);
pinMode(ev, OUTPUT);
pinMode(pumpPin, OUTPUT);
}
void loop()
{
//ACCENSIONE IMPIANTO
buttonstate = digitalRead(swa);
if (buttonstate == 1) {
digitalWrite(ledoff, LOW);
digitalWrite(ledon, HIGH);
//GESTIONE CALDAIA
if (millis() - previousMillis1 > interval1) {
previousMillis1 = millis();
tempc = analogRead (A0);
Serial.print("NTC: ");
Serial.println(tempc, DEC);
}
//GESTIONE EV VAPORE
buttonstatev = digitalRead(A2);
digitalWrite(ev, buttonstatev);
//GESTIONE POMPA
if (tempc > 300) {
if (millis() - previousMillis4 > interval4) {
previousMillis4 = millis();
pumpState ^= 1;
}
if (pumpState == 0) {
digitalWrite(pumpPin, HIGH);
}
else
digitalWrite(pumpPin, LOW);
}
}
else {
digitalWrite(ledoff, HIGH);
digitalWrite(ledon, LOW);
digitalWrite(ev, LOW);
digitalWrite(pumpPin, LOW);
}
}