Come mettere in pausa il sensore

Ciao a tutti. Mi servirebbe un aiuto per completare lo sketch che mi automatizza il trenino di Natale.
Così come è scritto, il trenino passa al primo sensore, che attiva un led.... il trenino poi passa al secondo sensore che fa scattare il rele e termina la corsa del treno in prossimità del led. Trascorso tot tempo led si spegne e treno riparte.
Il percorso, essendo un ovale , ad ogni giro il treno si ferma. Mi piacerebbe poter mettere in pausa il primo sensore in modo che non mi determini lo stop del treno per un tempo x.
Si può ? Grazie

const int sensore=7;
const int led=13;
const int sensore2=8;
const int rele=12;


unsigned long ledOnTime;
bool ledOn;

void setup() {
  pinMode(sensore, INPUT); 
  pinMode(led, OUTPUT); 
  pinMode(sensore2, INPUT);
  pinMode(rele, OUTPUT);
  
  ledOn = false;
} 
void loop(){
        
  if (digitalRead(sensore) == LOW) {     
    digitalWrite(led, HIGH);
    ledOn = true;
    ledOnTime = millis();
}
  if(ledOn) 
    if(millis() - ledOnTime > 20000) { 
      digitalWrite(led, LOW);
      ledOn = false;
  }
   if (digitalRead(sensore2) == LOW && digitalRead(led) == HIGH)
{ 
       digitalWrite(rele, HIGH);
  }
   else{
       digitalWrite(rele,LOW);
   }
}

Sai come si usa la funzione millis() per schedulare dellle attività?

Prima di tutto ti crei una "flag" che se "true" indica che devi verificare il sensore, se "false" NON lo devi verificare. Dopo di che, quando vuoi interromperne il funzionamento per un certo tempo ... metti a "false" la flag, ti memorizzi il valore (unsigned long) di millis() quando vuoi iniziare a contare il tempo e infine, ad ogni giro del loop(), ti chiedi ...

if ( millis() - tempoInizialeMemorizzato > tempoDiPausa ) {
  tuaFlag = true;  // ripristini il sensore se è passato il tempo
}

Guglielmo

P.S.: se invece NON sai cosa è e come si usa la funzione millis() per schedulare delle cose allora ... ti devi studiare la funzione millis(), quindi prima QUI, poi QUI e QUI e QUI e tutti gli articoli che sono in QUESTA pagina ... vedrai che ti sarà tutto più chiaro :wink:

Grazie per avermi risposto.
Il millis lo sto gia usando in questo progetto, il tempo che il led deve rimanere acceso.
Il flag che intendi non può essere già questo?

 if (digitalRead(sensore) == LOW) {     
    digitalWrite(led, HIGH);
    ledOn = true;
    ledOnTime = millis();

Non so ... se il fatto che NON devi leggere il sensore è legato alla stessa condizione del LED, va bene, altrimenti ti occorre un flag per una cosa (il LED) ed uno per l'altra (la lettura del sensore).

Guglielmo

Se devi solo evitare che scatti il relè, metti un interruttore in serie alla bobina del relè...

L'intenzione che non si accenda il led e non scatti il relè per un tempo x trascorso i il quale ritorni a funzionare tutto.

stefano71:
L'intenzione che non si accenda il led e non scatti il relè per un tempo x trascorso i il quale ritorni a funzionare tutto.

... come ti ho detto al post #3, se le due cose sono collegate, allora puoi usare una sola "flag" che ti indica se devi o non devi accendere il LED e far scattare il relè :slight_smile:

Guglielmo