omsp38 Posted May 14, 2022 Report Share Posted May 14, 2022 Buongiorno vorrei realizzare un timer ciclico che impedisca al condizionatore di far funzionare il compressore per un tempo eccessivo. premo start, indipendentemente da quanto lo tengo premuto, si attiva un timer di 20 minuti, (uscita 1 attiva) poi per 40 minuti (anche se start è ancora attivo) quindi indipendente dall’ingresso l’uscita deve essere su 0. Poi finito i ;0 minuti se l’ingresso è ancora eccitato allora si ricominci il ciclo. posso usare il delay ? O ci vuole qualche comando particolare ? Link to comment Share on other sites More sharing options...
Livio Orsini Posted May 14, 2022 Report Share Posted May 14, 2022 Il delay è un'istruzione bloccante da non usarsi mai o quasi. Hai un'opzione comoda: l'istruziione millis(), che ti da il tempo trascorso dall'accensione. Oppure puoi usare l'interrupt del timer. Io solitamente uso timer1 in modo da avere un interruopt ogni 10ms, che uso anche come clok di sistema . Presetti il timer per avere un interrupt ad esempio ogni 500ms, poi fai 2 contatori uno per il tempo di on e l'altro per il tempo di off Link to comment Share on other sites More sharing options...
Claudio F Posted May 22, 2022 Report Share Posted May 22, 2022 On 5/14/2022 at 1:56 PM, omsp38 said: posso usare il delay ? O ci vuole qualche comando particolare ? In questo specifico caso, in cui durante l'attesa niente altro deve essere fatto, delay può anche andare e semplifica la logica, ma appunto il sistema non sarebbe ad esempio in grado di gestire un eventuale altro pulsante di stop. Per cui come giustamente consigliato sarebbe meglio impostare sempre la logica sotto forma di elaborazione per cicli successivi, in modo che il sistema possa (se serve) gestire più processi contemporaneamente. Piuttosto ritengo importante leggere il comando in ingresso con un adeguato debounce, in modo da evitare che un singolo breve impulso (disturbo ecc) possa far partire il tutto. Banalmente accettare valida una lettura dell'ingresso solo se due letture successive distanziate di 50..100 ms risultano uguali. In realtà è il minimo sindacale, perché a far bene si dovrebbe controllare continuamente la stabilità dell'ingresso per un certo tempo prima di dare per buona una variazione. Link to comment Share on other sites More sharing options...
Livio Orsini Posted May 22, 2022 Report Share Posted May 22, 2022 (edited) 40 minuti fa, Claudio F ha scritto: Piuttosto ritengo importante leggere il comando in ingresso con un adeguato debounce, Un debouncing tipico consiste nel leggere gli ingressi ad intervalli di 10ms e considerare valido l'identico stato per 2 letture consecutive. Però Omsp38 non si è più fatto sentire.... Edited May 22, 2022 by Livio Orsini Link to comment Share on other sites More sharing options...
walterword Posted May 29, 2022 Report Share Posted May 29, 2022 se vuoi ti linko le mie librerie per arduino , python etc. Usano il millis() per gestire timer di ritardo all'eccitazione ed alla diseccitazione Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now