omsp38 Inserito: 14 maggio 2022 Segnala Inserito: 14 maggio 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 ?
Livio Orsini Inserita: 14 maggio 2022 Segnala Inserita: 14 maggio 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
Claudio F Inserita: 22 maggio 2022 Segnala Inserita: 22 maggio 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.
Livio Orsini Inserita: 22 maggio 2022 Segnala Inserita: 22 maggio 2022 (modificato) 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.... Modificato: 22 maggio 2022 da Livio Orsini
walterword Inserita: 29 maggio 2022 Segnala Inserita: 29 maggio 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
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora