Problema con funzione

Ciao a tutti, ho realizzato questa funzione che se l'ingresso EN mi va alto e ci rimane per più di "time" millisecondi allora mi restituisce true, altrimenti false. L'ho dichiarata fuori dal loop e fuori dal setup.

boolean TON(boolean EN, unsigned long time)
{
  boolean ST;
  unsigned long start_time;
  boolean out;
  
  if(EN && !ST) {start_time=millis(); ST=true;}
  if(EN && millis()-start_time>=time)
  {
    out=true;
  }
  else out=false;
  
  return out;
}

Quando chiamo la funzione nel loop ad es: boolean xxx=TON((a==b),5000); xxx rimane sempre 0, perchè?

Nessuno che mi può aiutare?

please...

[code]boolean TON(boolean EN, unsigned long time)
{
  boolean ST;

Qua crei una variabile di tipo boolean ST, non dichiari quale sia il valore.

  if(EN && !ST) {start_time=millis(); ST=true;}

Infatti in questo "if" fai un controllo che comprende anche ST... ma il suo valore a questo punto è completamente casuale.. Se e solo se EN = true e St = false entra nell' if.

 if(EN && (millis()-start_time)>=time)
  {
    out=true;
  }
  else out=false;

mettiamoci delle parentesi

return out; } [/code]

ok comunque esci sempre false.

Perche ci sono degli errori di principio in questa funzione. Es. La variabile ST la continui a ricreare, e non può funzionarti come controllo... Ti consiglio di dichiararla come variabile globale, e dargli subito il valore false: boolean ST = false; Perche adesso come adesso non serve a niente.