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
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 ...)
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/
- 1. pyGTK exécutant 2 "boucles principales" à la fois
- 2. CasperJS thenOpen() exécutant deux fois
- 3. NuGet init.ps1 exécutant deux fois
- 4. sales_quote_save_before observateur exécutant deux fois
- 5. Localhost exécutant jquery deux fois?
- 6. Django céleri exécutant seulement deux tâches à la fois?
- 7. Arduino AttachInterrupt() semble fonctionner deux fois
- 8. Java programme boucles deux fois sans invite
- 9. Boucle exécutant plusieurs fois
- 10. Deux boucles simultanées pour MATLAB ou C++
- 11. Conversions Arduino en C
- 12. QML animation à la fois « vitesse » et infini « boucles »
- 13. Travail SQL exécutant plusieurs fois
- 14. Le chasseur de LED Arduino se bloque après quelques boucles?
- 15. C++ affecte une valeur à deux chaînes à la fois
- 16. Script Python exécutant à la fois FastCGI et CGI traditionnel?
- 17. Accélérez rsync en exécutant plusieurs instances à la fois?
- 18. Comment appliquer plusieurs fois à setInterval boucles
- 19. Sortie à l'heure de déposer plusieurs fois en C++ en exécutant plusieurs fois le programme
- 20. Multidimensional Arrays deux boucles
- 21. Deux contrôleurs à la fois?
- 22. C# -Arduino Communication Mismatch?
- 23. Deux boucles mélangées
- 24. Générer deux listes à la fois
- 25. Wordpress deux boucles imbriquées
- 26. SDL: deux boucles d'événements?
- 27. Arduino en pur C
- 28. Deux boucles simultanément?
- 29. C/Arduino switch case
- 30. While dans des boucles procédure stockée seulement deux fois au lieu de 8 fois
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
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. –