Ciao, Di seguito il pezzo di programma
Leggo il valore di 1 termocoppia, e se maggiore di 48, gestisco 1 elettrovalvola. Io vorrei che l'elettrovalvola esegua solo 1 ciclo millis. Quindi accensione per tot secondi e spegnimento.
Io sono riuscito solamente a far eseguire il ciclo all' infinito finche la funzione è verificata(tempc>48).
Non ho ancora ben capito come funziona arduino, quindi vi chiedo gentilmente se potete scrivermi 2 righe di programma, e brevemente spiegarle.
Grazie per le risposte.
if(tempc>48){
if (millis() - previousMillis4 > interval4) {
previousMillis4 = millis();
pumpState ^= 1;
}
if(pumpState==1) {
digitalWrite(pumpPin, HIGH);
}
else
digitalWrite(pumpPin, LOW);
RISOLTO. Fa il ciclo 1 sola volta.
if (millis() - previousMillis3 > interval3) {
previousMillis3 = millis();
pumpState ^= 1;
}
if(pumpState==0) {
digitalWrite(pumpPin, HIGH);
}
else
digitalWrite(pumpPin, LOW);
while(pumpState==1);
Programma completo, per regolamento.
int tempf=0;
int tempc=0;
int buttonstate=0; //Variabile per leggere stato pulsante accensione
int buttonstatev=0; //Variabile per lettura stato pulsante vapore
//Ciclo primo avvio Pompa
unsigned long contatore;
unsigned long contaimpulsi;
int controlpump=0;
//
#define swa A3
#define swv A2
#define ledon 7
#define ledf 5
#define ledc 6
#define ledoff 11
#define rf 3
#define rc 4
#define ev 10
#define pumpPin 2
//millis1
unsigned long previousMillis1 = 0; // memorizza l'ultimo stato
unsigned long interval1=1000; //intervallo di lettura NTC ferro
//millis2
unsigned long previousMillis2=0;
unsigned long interval2=1000; //intervallo di lettura NTC caldaia
//millis3 POMPA
byte pumpState = 0; // pumpState usato per temporizzare pompa
unsigned long previousMillis4 = 0;
unsigned long interval4 = 2000; //intervallo carico acqua
;
void setup()
{
Serial.begin(9600);
pinMode(rc, OUTPUT);
pinMode(rf, OUTPUT);
pinMode(ledon, OUTPUT);
pinMode(ledf, OUTPUT);
pinMode(ledc, OUTPUT);
pinMode(swa, INPUT);
pinMode(swv, INPUT);
pinMode(ledoff, OUTPUT);
pinMode(ev, OUTPUT);
pinMode(pumpPin, OUTPUT);
}
void loop()
{
//ACCENSIONE
buttonstate=digitalRead(swa);
if(buttonstate==1){
digitalWrite(ledoff, LOW);
digitalWrite(ledon, HIGH);
//GESTIONE FERRO
if(millis()-previousMillis2 >interval2){
previousMillis2=millis();
tempf = analogRead (A1);
// Serial.print("ntcFERRO: ");
// Serial.println(tempf, DEC);
}
if(tempf>100) {
digitalWrite(rf, HIGH);
digitalWrite(ledf, LOW);
} else {
digitalWrite(rf, LOW);
digitalWrite(ledf, HIGH);
}
//GESTIONE CALDAIA
if(millis()-previousMillis1>interval1){
previousMillis1=millis();
tempc = analogRead (A0);
Serial.print("NTC: ");
Serial.println(tempc, DEC);
}
if(tempc>30){
digitalWrite(ledc, LOW);
digitalWrite(rc, HIGH);
} else {
digitalWrite(rc, LOW);
digitalWrite(ledc, HIGH);
}
//GESTIONE EV VAPORE
buttonstatev=digitalRead(A2);
digitalWrite(ev, buttonstatev);
//Ciclo POMPA
//TEMPORIZZATORE PRIMO AVVIO
if (contatore!=millis()) { //è tempo di un controllo
contatore=millis();
if (digitalRead(swa)==1) {
contaimpulsi++;
//Serial.print("tempoPompa: ");
//Serial.println(contaimpulsi, DEC);
} else {
contaimpulsi=0;
}
if (contaimpulsi>1500) {
contaimpulsi=0;
controlpump=1; // parametro da utilizzare per abilitare ciclo pompa
}}
if (controlpump==1){
if(tempc>48){
if (millis() - previousMillis4 > interval4) {
previousMillis4 = millis();
pumpState ^= 1;
}
if(pumpState==1) {
digitalWrite(pumpPin, HIGH);
}
else
digitalWrite(pumpPin, LOW);
}}
} else {
digitalWrite(ledoff, HIGH);
digitalWrite(ledon, LOW);
digitalWrite(ledf, LOW);
digitalWrite(ledc, LOW);
digitalWrite(rf, LOW);
digitalWrite(rc, LOW);
digitalWrite(ev, LOW);
digitalWrite(pumpPin, LOW);
controlpump=0;
}
}