Uscita intermittente per X volte - Grazie per l'aiuto, non mi ha cagato nessuno

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);

  }
}

Cortesemente, edita il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post), togli TUTTI i tag CODE e mettine UNA SOLA COPPIA di apertura del codice e di chiusura del codice. In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due soli tag: [code]_tutto_il _tuo_ codice_per_intero[/code]. Grazie.

Guglielmo

Ma io non ci capisco nulla. Io ho seguito questa procedura:
In IDE nel mio programma premo “control+t” e sistema in automatico la stesura del programma.
Copio tutto. Entro nel forum, poi premo tag (quel tasto insomma, non ricordo) incollo e basta.
Il forum genera in automatico ovunque… Devo eliminarli tutti manualmente ? Io li ho eliminati uno a uno.

Allora,
intanto ho eliminato un paio di post che sarebbero serviti solo ad innescare “flames” …

… dopo di che, nel IDE sistemi il codice con CTRL-T, lo copi tutto, vieni nel forum, scrivi il tuo post e, quando devi inserire il codice, per evitare qualsiasi errore, PRIMA passa in modalità “View Source” (ultimo bottoncino a destra quando sei in edit di un post), poi ti sposti dove vuoi mettere il codice, premi il bottoncino “</>” (primo a sinistra) che ti inserisce già i due TAG del CODE. Ti metti in mezzo ai due TAG ed incolli il codice che, così, si troverà tutto tra di essi. A questo punto pui tornare di nuovo in modalità WYSIWYG premendo, di nuovo, il bottoncino “View Source” che ti fa uscire dalla modalità solo testo.

Se lo segui alla lettera NON puoi sbagliare … devo però dire che normalmente funziona bene anche in modalità WYSIWYG, per cui non so perché a te aveva fatto quel disastro … ::slight_smile:

Guglielmo