Buongiorno ragazzi, avrei bisogno di una dritta, in pratica dovrei far in modo che arduino mi porti alta un uscita solo quando la tensione di un input digitale cambia stato ad intervalli di circa 1 o 2 Hz mentre se quel input è sempre basso o sempre alto non deva fare nulla.
Per spiegarmi meglio, dovrei far suonare un buzzer solo quando un led di segnalazione lampeggia mentre non deve suonare se questo led è spento fisso oppure acceso fisso.
Se qualcuno mi potrebbe dare una dritta su come instradarmi ne sarei molto grato.
Grazie
Prima di tutto, devi rilevare i cambiamenti di stato, in un verso o nell'altro che siano: lo fai confrontando lo stato corrente con lo stato precedente.
Tra 1 e 2Hz vuol dire che i cambiamenti di stato devono avvenire tra 2 e 4 volte al secondo, quindi con intervalli tra 250 e 500ms: a ogni cambiamento di stato leggi millis(), lo confronti con il precedente e lo memorizzi nuovamente nella variabile unsigned long: se la differenza è compresa fra, ad esempio, 200 e 550ms, la frequenza è compresa fra 1 e 2Hz.
Attento alla scheda che usi, perché in Arduino Uno originale il clock al microcontrollore è fornito da un risuonatore ceramico a 16MHz, con una tolleranza di circa il 10%!
Probabilmente non gli serve neppure misurare il tempo, ma solo sapere se varia, e in quel caso attivare un'uscita con un timer retriggerabile (ad ogni variazione viene resettato il tempo).
Intanto buongiorno e grazie, sono d'accordo con Claudio_FF, io verificherei soltanto il cambio di stato, però il buzzer non dovrebbe suonare al primo cambiamento di stato altrimenti se il led di segnalazione si dovesse solo spegnere (o accendere se era spento) questo mi farebbe suonare il buzzer, invece deve suonare se lampeggia, quindi dovrei attendere almeno un paio di cambiamenti di stato.
Secondo voi la soluzione giusta sarebbe di contare i cambiamenti di stato e se sono maggiori di un certo numero attivo l'uscita?
Scusate la mia ignoranza in termini di programmazione ma sono alle prime armi
Ok ci sono riuscito, in pratica verifico se lo stato del ingresso è cambiato dal ultima lettura, se si, verifico se cambia una seconda volta e in caso attivo il buzzer perchè significherebbe un lampeggio del led di segnalazione, se passato 1 secondo non è cambiato vuol dire che il led è acceso o spento fisso e in tal caso non attivo nessuna uscita.
Grazie mille ragazzi per le dritte
Ti sbagli sulla tolleranza, è al massimo 200ppm che equivale a 0.02%
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.