Claudio_FF:
Allora basta scrivere le stesse espressioni logiche in C.Esempio di relé start/stop con autoritenuta. 'A' è il relé, 'sta' e 'sto' sono i livelli letti dai pulsanti start e stop (si assume che quando premuti forniscano un 1). Al posto dei puntini vanno i pin da usare.
byte A = 0; // rele' inizialmente spento
void loop() {
// lettura ingressi
byte sta = digitalRead(...);
byte sto = digitalRead(...);
// rele' A
A = (A | sta) & !sto;
// aggiornamento uscite
digitalWrite(..., A);
}
Esempio come prima ma con disattivazione dopo 10 secondi. 't0' minuscolo è la variabile tempo, 'T0' maiuscolo è l'uscita del temporizzatore (va a 1 dopo 10 secondi che 'A' è a 1).
byte A = 0; // rele' inizialmente spento
byte T0 = 0; // temporizzatore inizialmente spento
uint32_t t0 = 0;
void loop() {
// lettura ingressi
byte sta = digitalRead(...);
byte sto = digitalRead(...);
// rele' A
A = (A | sta) & !T0 & !sto;
// temporizzatore T0
if(!A) { t0 = millis(); T0 = 0; }
else if(millis() - t0 >= 10000) T0 = 1;
// aggiornamento uscite
digitalWrite(..., A);
}
Anche se si lavora in bassissima tensione, gli ingressi vanno filtrati contro i rimbalzi e optoisolati.
Fantastico!! Sono quasi più i commenti che il programma.