Go Down

Topic: Declencher un un interval en utilisant metro.h (Read 1 time) previous topic - next topic

Blues_Of_Chelsea

Bonjour !

Je suis un nouvel utilisateur de la carte Arduino Due, et j'utilise la libraire metro.

Je me pose la question suivante, comment activer le lancement du timer ?
Je m'explique plus précisément: si je configure mon objet metro de la façon suivante:
Code: [Select]
Metro PwrMetro = Metro(0); et qu'après avoir vérifié l'état d'une entrée digitale, j'utilise la fonction suivante:
Code: [Select]
PwrMetro.interval(15000); , est-ce que l'interval de 15000ms va débuter une fois la fonction passée ?

Merci de votre aide !

Cordialement.

B@tto

Il faut faire un ledMetro.check() pour vérifier que le temps s'est écoulé. Après est-ce que ta question est plus : est-ce que si je redéfinis un interval, est-ce que je repars de zero ou bien c'est l'intervalle qui est en cours qui est rallongé ?
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Blues_Of_Chelsea

Merci de ta réponse.

Et, oui ma question est exactement celle que tu viens de formuler. Je cherche a savoir si en modifiant l'intervalle de temps, le timer reprend à zéro.

En fait je ne vois pas comment le déclencher à un moment précis, et la seule solution a laquelle j'avais pensé c'était de modifier l'intervalle en espérant que le timer reprenne de zéro avec le nouvel intervalle. Et je n'est pas encore de carte Arduino sous la main donc je ne peux pas encore tester ce que ca donne !

Des idées ?

Kévin.

68tjs

Je ne connais pas metro mais pour mettre un timer à zéro il suffit d'écrire directement dans le registre du timer:
TCNTX=0 ;    avec X = numéro du timer.

Bien sûr en faisant cela tu sort de l'univers "arduino" mais c'est peut-être possible de mixer la librairie Metro et l'avr-libc.

Blues_Of_Chelsea

En fait la librairie metro permet d'utiliser les timers de l'Arduino Due de façon plus simple qu'en l'utilisant "normalement".
En utilisant metro.h je ne sais pas même pas quel timer j'utilise précisément, donc je ne sais pas si il est possible de réinitialiser un timer de facon "manuelle" alors que l'on utilise qui gère les timers elle même.

A voir, je suis preneurs d'autre idées !

Merci de ta réponse :)

68tjs

Rectif : je n'avais pas tilté que c'était sur une DUE: le principe doit être le même mais la syntaxe est surrement différente (ARM oblige).

Blues_Of_Chelsea

Certainement oui. Mais sinon je peux toujours utiliser le principe des delays mais le problème c'est que je dois gérer des intervalles de temps plutôt long (2 - 3h) ... Cela me parait plus simple d'utiliser les fonctions que la librairie metro propose car contrairement au delay cela ne "bloque" pas la carte pendant les intervalles.

Je dois juste déterminer si en réinitialisant un intervalle en passant par
Code: [Select]
PwrMetro.interval(xxxxms); le compteur reprend de zéro ou rallonge l'intervalle. Et comme dis plus haut, je n'ai pas encore la carte sous la main donc pas facile de comprendre tout ça sans tester !


B@tto

Suffit d'étudier un peu la lib ;)

Code: [Select]
Metro::Metro(unsigned long interval_millis, uint8_t autoreset)
{   
this->autoreset = autoreset; // Fix by Paul Bouchier
interval(interval_millis);
reset();
}


+

Code: [Select]
void Metro::reset()
{

  this->previous_millis = millis();

}


Donc si tu spécifies un nouvel intervalle, il y a remise à zéro.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Blues_Of_Chelsea


Go Up