Table des matières:

Arduino - Interruption périodique : 4 étapes
Arduino - Interruption périodique : 4 étapes

Vidéo: Arduino - Interruption périodique : 4 étapes

Vidéo: Arduino - Interruption périodique : 4 étapes
Vidéo: Arduino Workshop - Chapter 5 - Interrupts 2024, Juillet
Anonim
Arduino - Interruption périodique
Arduino - Interruption périodique

Ce Instructable concerne l'utilisation d'une interruption périodique pour la synchronisation dans les programmes Arduino. C'est une étape pour un programmeur Arduino en herbe qui sait que l'Arduino peut faire plus, mais ne sait pas vraiment comment y parvenir.

S'il y a un problème de performances, je suppose que vous utilisez une ou plusieurs fonctions delay(). L'astuce consiste à se débarrasser de la ou des fonctions delay() et à substituer une interruption. La fonction delay() force l'Arduino à ne rien faire en attendant que le delay() se termine. L'utilisation d'une interruption permet à votre programme de faire d'autres choses en attendant la fin du délai. Il y a généralement une énorme quantité de temps mort inutilisé qui pourrait être utilisé pour d'autres choses lors de l'utilisation de delay(). L'utilisation d'une interruption résout ce problème.

Étape 1: Gestionnaire d'interruption

1. Ajoutez le gestionnaire d'interruption à votre programme. Copiez et collez simplement quelque part au-dessus de setup();

const unsigned long TIMER0_COUNT = 500; // Intervalle de minuterie de 500 ms

// Gestionnaire d'interruption TIMER0 volatile bool time = false; ISR(TIMER0_COMPA_vect) { nombre long statique non signé = 0; if (++count > TIMER0_COUNT) { count = 0; temps = vrai; // l'heure est définie sur true chaque TIMER0_COUNT ms } // (l'heure doit être effacée dans la routine principale) }

Étape 2: Définir l'intervalle de temps périodique

2. Définissez l'intervalle de temps. Cette routine se superpose à l'interruption TIMER0, qui est définie pour se déclencher toutes les ~1 ms.

Votre "intervalle" est le nombre d'interruptions TIMER0 à traiter. Chaque intervalle est d'environ 1 ms, vous définissez donc réellement le nombre d'interruptions TIMER0 à compter avant d'activer votre intervalle. IOW, définissez la variable TIMER0_COUNT sur le nombre de millisecondes que vous souhaitez attendre. Par exemple, utilisez 500 pendant une demi-seconde. Utilisez 3000 pendant 3 secondes.

Étape 3: initialisation de l'interruption

3. Ajoutez le code "TIMER0 initialization" à votre méthode setup(). Encore une fois, copiez et collez simplement dans setup().

// *** initialisation TIMER0 ***

cli(); // désactiver toutes les interruptions TIMSK0 = 0; // désactiver timer0 pour une gigue inférieure OCR0A = 0xBB; // nombre d'interruptions arbitraires TIMSK0 |= _BV(OCIE0A); // se raccroche à l'interruption sei(); // réactive les interruptions

Étape 4: Où ajouter votre code

4. Ajoutez le code "time check" à votre méthode loop(). Copiez et collez en boucle().

si (heure) {

heure = faux; // faire quelque chose ici }

Le "temps = faux;" la ligne est importante. Sans cette ligne, la ou les lignes "faire quelque chose ici" seraient exécutées à chaque fois que le programme exécute loop().

Bien sûr, vous substituez vos propres activités dans la ligne "faites quelque chose ici". Commencez par imprimer du texte ou faire clignoter la LED.

Vous avez terminé!

Conseillé: