Aiuto modifica codice con millis

Basta cambiare l'ordine con cui fai i conti, trattandosi di unsigned int (quindi numeri che non diventano MAI negativi) il risultato della sottrazione sarà sempre coerente e valido.

P.S.
Le variabili stato_sensore , stato_pulsante e stato_rele sono ridondanti, puoi anche usare direttamente digitalRead() e digitalWrite.

P.P.S.
Attenzione all'ingresso definito come INPUT: assicurati che il segnale sia a "pull-down" con una resistenza visto che lo vai a testare sul livello HIGH, oppure abilita le resistenze di pull-up interne del micro e vai a fare l'if sul livello == LOW

int sensore_suono = 4;
int rele = 6;
int stato_sensore = 0;
int pulsante = 8;
int stato_pulsante = 0;
int stato_rele = 0;
unsigned long tempo_accensione_rele = 0;


void setup() {
  pinMode (sensore_suono, INPUT);
  pinMode (rele, OUTPUT);
  pinMode (pulsante, INPUT);
}

void loop() {
  stato_sensore = digitalRead (sensore_suono);
  stato_pulsante = digitalRead (pulsante);
  stato_rele = digitalRead (rele);

  //sezione sensore suono--------------------
  if (stato_sensore == LOW) {
    digitalWrite (rele, HIGH);
    tempo_accensione_rele = millis();
  }
  else {
    if (millis() - tempo_accensione_rele > 5000) { 
      digitalWrite(rele, LOW);
    }
  }

  // sezione pulsante------------------------
  if (stato_pulsante == LOW) {
    digitalWrite (rele, HIGH);
    tempo_accensione_rele = millis();
  }

  else {
    if (millis() - tempo_accensione_rele > 5000) { 
      digitalWrite(rele, LOW);
    }
  }
}
1 Like