Vai al contenuto
PLC Forum


Timer ciclico arduino


omsp38

Messaggi consigliati

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 al commento
Condividi su altri siti


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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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: da Livio Orsini
Link al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...