Si vuole associare ad un pulsante una doppia funzione, ovvero se il pulsante viene premuto per meno di 3 secondi (ad esempio) viene attivata una determinata funzione F1, mentre invece se il pulsante viene premuto per più di 3 secondi viene attivata la funzione F2. Bisogna assicurarsi che la funzione F1 venga attivata soltanto se il pulsante viene rilasciato prima dei 3 secondi (o del tempo che scegliamo) e pertanto bisognerà rilevare un fronte di discesa (edge falling detection).
Si può fare in questo modo:
dove M1 viene attivato per UN SOLO CICLO se l’ingresso I1 è alto per meno di 3 secondi. Invece M2 viene attivato non appena l’ingresso I1 è alto per più di tre secondi (in questo caso M2 resta alto fino a quando I1 non va zero).
Fcendo come sopra ottengo un impulso solo per M1 (che si usa per attivare la funzione F1), e non per M2 (che invece si usa per attivare la funzione F2) dove appunto come detto precedentemente rimane attivo finché I1=1.
Se si vuole avere un impulso anche per M2 allora bisogna aggiungera una AND (Edge) per rilevare un fronte di salita, quindi:
Oppure al contrario si potrebbe desiderare di “settare” M1 ed M2, in modo da avere le funzioni F1 e F2 attive fintantoché M1 e M2 siano alti. Ovvero utilizzando delle autoritenute con un pulsante di stop I2 (da notare che essendo i pulsanti di stop normalmente chiusi, il contatto nel programma è normalmente aperto) avremmo:
Come esempio per il funzionamento, supponiamo di avere due luci: una rossa e una verde.
Quando la funzione F1 è attiva (ossia quando M1=1) la luce verde è accesa fissa e la luce rossa è spenta, mentre quando è attiva la funzione F2 (ossia quando M2=1) la luce verde è spenta e la luce rossa lampeggia con un periodo T=1s e duty_cycle=50% (quindi per 0.5s luce accesa, e per 0.5s luce spenta). Possiamo fare questo in maniera molto semplice, ovvero:
Potete scaricare i sorgenti da questo link –>> Download