2013-06-28 3 views
0

Okay donc je viens de plonger dans la programmation d'un Arduino, Actuellement, j'ai la fonction de clignotement de base avec un programme LED RGB qui change une LED en bleu, vert et rouge dans les couleurs de fondu. J'ai 2 LEDS une LED jaune simple et de base qui est censée fonctionner comme un indicateur pour un "état de fonctionnement". Et une LED qui est RVB. Maintenant, je veux que le RVB passe à travers ses couleurs normalement bien que je veux garder la LED jaune clignotant constamment. Comment dois-je créer mon code pour que deux processus puissent s'exécuter en même temps?C++ Arduino, exécutant deux boucles à la fois?

Répondre

2

Quelque chose comme:

int timekeeper=0; 
while (1) 
{ 
    do_fade(timekeeper); 
    if (timekeeper%100==0) { 
     do_blink_off(); 
    } 
    if (timekeeper%100==50) { 
     do_blink_on(); 
    } 
    delay(10); 
    timekeeper++; 
} 

Cela se fait de la mémoire, de sorte que votre kilométrage peut varier. J'ai passé le timekeeper à do_fade(), donc vous pouvez déterminer à quelle distance vous vous trouvez. do_fade() mettra à jour le fondu, puis reviendra immédiatement. do_blink_on() et do_blink_off() seraient similaires - changez ce que vous avez besoin de changer, puis revenez. Dans cet exemple, do_fade() serait appelé toutes les 10 millisecondes, do_blink_off() une fois par seconde, avec do_blink_on() 1/2 seconde après (ainsi de suite, 1/2 seconde, off, 1/2 seconde, on, 1/2 seconde ...)

+0

semble bon. La seule chose que j'ajouterais, c'est que vous n'êtes pas limité à l'utilisation d'un seul compteur si vos horaires ne sont pas liés - vous pouvez gérer plusieurs comptes indépendamment. Vous n'avez pas non plus besoin de faire le modulo si vous blink à 50, et réinitialiser à zéro à 100 lorsque vous clignez sur. – paddy

+0

Si j'allais avoir des horloges indépendantes, je ferais les static dans chaque fonction (et je combinerais do_blink_on/off en une). J'ai considéré cela comme une réponse, mais je pensais que ce serait probablement trop avancé pour qui doit poser la question ci-dessus. –

1

La réponse d'AMADANON fonctionnera, mais gardez à l'esprit la manière préférée de faire plusieurs tâches comme celle-ci avec les interruptions de minuterie. Par exemple, si vous voulez que votre code fasse quelque chose d'autre après qu'il s'estompe, la synchronisation de ces autres fonctions interférera avec votre clignotement de LED. Pour résoudre ce problème, utilisez les minuteurs intégrés à l'Arduino. En arrière-plan, une minuterie compte, et quand elle atteint une certaine valeur, elle réinitialise son compteur et déclenche la routine de service d'interruption, où vous allumez/éteignez la LED.

Voici un tutoriel sur un clignotement LED avec minuterie interrompt: http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/