Go Down

Topic: Thread arduino uno (Read 287 times) previous topic - next topic

Skiiro

Bonjour à tous,
J'aurai besoin de votre aide pour un probléme sur mon arduino uno.
J'ai une fonction dans mon programme qui fait sonner mon buzzer (sonnerBuzzer()),  mais mon souci est que je voudrais pouvoir l'arrêter grace à une autre fonction(acquitterAlerte()). Le problème est que tant que la fonction sonnerBuzzer() n'est pas terminée , je ne peux pas faire appel à l'autre fonction acquitterAlerte(). J'ai donc pensé a des threads mais j'ai appris que arduino ne prenais pas en charge cette fonctionnalité. En cherchant j'ai vu qu'il existait des proto-threads et j'ai tenté de les faire marcher mais sans succès.
Peut-être n'ai-je pas bien compris comment on se sert de cette librairie, ou alors si elle ne me permet pas de résoudre mon problème auriez-vous une solution alternative?

Ci dessous vous trouverez les extraits de code concernés par ma tentative de proto-threads.

Je vous remercie par avance pour les futures réponses.

cordialement,
Skiiro

Lien de la librairie : http://waynemay.com/threading-in-arduino/

#include <pt.h>

static struct pt pt1, pt2; //declare les proto-threads

void setup(){
  PT_INIT(&pt1);
  PT_INIT(&pt2); }

void loop(){
  sonnerBuzzer(&pt1);
  acquitterAlerte(&pt2); }

static int sonnerBuzzer(struct pt *pt){
  PT_BEGIN(pt);
  // Ici se trouve une longue partie de code qui se charge de jouer une longue succession de notes
  PT_END(pt); }

int acquitterAlerte(struct pt* pt2){
  PT_BEGIN(pt2);
  delay(2000);
  PT_EXIT(&pt1); // J'essaie de stopper le premier proto-thread
  PT_END(pt2); }

chabot380

salut
Et les interruptions c'est fait pour qui ?  ;)
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

fdufnews

Le problème c'est ta fonction sonnerBuzzer qui est bloquante.
Il faudrait l'écrire sous la forme d'une boucle. Dans chaque itération de la boucle tu émets une note et ensuite tu testes si la fonction acquitterAlerte a positionnée un drapeau qui fera sortie de la boucle.

skywodd

Bonjour,

Utilise la librairie Tone fournie de base avec l'ide. Elle utilise un timer hardware et peut être arrêté à volonté.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up