Saluti a tutti, ho bisogno di temporizzare un loop nel quale, tra l'altro, prendo dati da alcuni sensori. Il problema è che vorrei che il loop iniziasse a tempi definiti, per esempio allo ogni scadere di ogni10 minuti di un orologio ( non un ritardo di 10 minuti, per capirci ). Per questo ho pensato di usare il RTC interno che, anche se non preciso/accurato, per il mio scopo dovrebbe andar benissimo.
Ho guardato la libreria RTC.h ( quella di default) ma mi sembra che non ci sia modo di definire un periodo maggiore di 2 secondi per impostare una chiamata tipo: RTC.setPeriodicCallback(periodicCallback, Period::ONCE_EVERY_2_SEC)
Le opzioni di Period sembrerebbero essere solo queste:
ONCE_EVERY_2_SEC
ONCE_EVERY_1_SEC
N2_TIMES_EVERY_SEC
N4_TIMES_EVERY_SEC
N8_TIMES_EVERY_SEC
N16_TIMES_EVERY_SEC
N32_TIMES_EVERY_SEC
N64_TIMES_EVERY_SEC
N128_TIMES_EVERY_SEC
N256_TIMES_EVERY_SEC
Buongiorno e benvenuto nella sezione Italiana del forum,
cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazioneNELL'APPOSITA DISCUSSIONE (... quello che vedi in blu è un link, fai click su di esso per raggiungere la discussione) spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto.
Comunque, il concetto di far girare il loop a piacimento è sbagliato: il loop deve girare sempre alla massima velocità possibile (salvo che l'applicazione lo permetta e si sia pienamente coscienti di ciò che si fa); poi, quando arriva il momento desiderato, si fa quanto necessario. Ciò si può realizzare con la lettura ciclica dell'RTC o di millis() o con un interrupt prodotto da un timer.
Il "loop" che devo far eseguire a tempi definiti NON è inteso come il "void loop" ( che comunque deve rimanere inalterato nella sua ripetizione ), ma un mio ciclo di istruzioni ( loop, appunto) da eseguire quando si è raggiunto il tempo definito. Spero che pra sia più chiaro, grazie.
Grazie per il consiglio. Non sapevo dell'esistenza di timers di sistema in Arduino; proverò. D'altra parte, anche l'autore dell'articolo che citi scrive:" I was wondering how to use the timers in the new Arduino UNO R4. Unfortunately I did not find any documentation, so I decided to document my findings here."
Su Arduino uno R3 si sono sempre ampiamente utilizzati e c'è documentazione in abbondanza, per la R4 ... la documentazione scarseggia, ma comunque già alcune librerie che usano i Times sono state portate anche su R4, come la TimerOne, modificata dall'utente Delta-G per lavorare, appunto, sulla R4.