Uscite Monostabili senza il delay

è possibile programmare diverse uscite in configurazione monostabile con T variabile senza usare il delay .. mi spiego meglio ... ad esempio ho bisogno di un impulso che duri 1 secondo, un altro di 2 secondi solo quando si verificano certe situazioni, ad esempio l' input 3 va ha livello alto. Grazie e saluti

usa la funzione millis()

ti restituisce il numero di millisecondi da quando arduino è stato acceso.

Per esempio puoi fare che alla pressione di un pulsante setti l'uscita, vai a leggere il valore di millis e lo memorizzi in una variabile. Appena il valore di millis sarà maggiore di quella variabile + 1000 resetti l'uscita

Se pulsante1 premuto allora setta uscita1 tempo_start1=millis() end_if

Se millis() >= tempostart1+1000 allora resetta uscita1 end_if

Se pulsante2 premuto allora setta uscita2 tempo_start2=millis() end_if

Se millis() >= tempostart2+2000 allora resetta uscita2 end_if

Dovrebbe essere una cosa di questo tipo

attento che dopo circa 50 giorni millis si resetta a 0 ;)

é possibile allungare questo tempo del rollover: per esempio: http://www.faludi.com/2007/12/18/arduino-millis-rollover-handling/ http://www.faludi.com/itp/arduino/millis_rollover.pde ciao Uwe

grazie per il vostro aiuto … ma cerco un qualcosa svincolato della funzione loop ma dentro una funzione come un interrup non so e senza usare il delay che mi blocca l’esecuzione di altre istruzioni

un esempio del codice che non mi piace potrebbe essere
definisco un array 54*4

nell’ indice 0 metto se è deve avere la funzione del pulsante {1=pulsante,0=interruttore}
nel’indice 1 metto se è stato attivato {1=attivo, 0=disattivo}
nell’indice 2 metto il tempo { tempo che deve restare attivo es 156 ms }
nell’indice 3 metto il tempo di partenza

int Pin[54][4];

void Impulso(int uscita,int tempo ){
digitalWrite(uscita, HIGH);
Pin[uscita,0]=1
Pin[uscita,1]=1
Pin[uscita,2]=156
Pin[uscita,1]=millis();

}

void resetUscita{
for (int i = 0; i < 54; i++) {
if ((Pin[i,0]==1)&&(Pin[i,1]==1) &&( (Pin[i,3]+Pin[i,4])<milis()){
Pin[i,1]==0
digitalWrite(i, LOW);

}
}

void setup(){
resetUscita()
}

Non mi piace tanto perchè fa sempre il ciclo for all’infinito
spero di essermi spiegato

ciao mikelin Non puoi svincolarti dalla funzione loop() è la funzione che viene chiamata di nuovo appena finita di elaborarla. Puoi al suo interno chiamare altre funzioni da te definite. Ciao Uwe