automazione tapparelle

nicolini2000:
potrei farlo con un PLC, conosco la programmazione in ladder ed ho realizzato diverse automazioni

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.