Go Down

Topic: [Question] Interruption et port Serie (Read 1 time) previous topic - next topic

trigger

Dec 06, 2012, 12:07 pm Last Edit: Dec 06, 2012, 12:10 pm by trigger Reason: 1
Bonjour tout le monde,

Je viens avec une question qui me turlupine un peu depuis quelques jours :

Je commande l'Arduino depuis un sketch en Python, en fait j'envoie un Char sur le port USB et suivant ce char l'arduino exécute telle ou telle action :

Code: [Select]
void setup() {  
 Serial.begin(9600);  
 pinMode(8, OUTPUT);
 pinMode(12, OUTPUT);
}

void loop() {
 if (Serial.available()) {

   char ch = Serial.read();
   if (ch == 'a')  digitalWrite(8, HIGH);
   else if (ch == 'A')  digitalWrite(8, LOW);
   else if (ch == 'b')  digitalWrite(12, HIGH);
   else if (ch == 'B')  digitalWrite(12, LOW);
 }
 delay(1000);              // petite tempo
}


Je sais que les interruption sont sur la Pin 2 (int 0) ou la Pin 3 (int 1).
Et ce que je voudrais savoir c'est si l'Arduino tourne en boucle ou si il "démarre" que lors de la réception du caractère ...

Désolé si la question semble évidente,

Bonne journée,
Trigger

Christian_R

Il va exécuter la boucle "void loop()" mais seulement l'instruction delay(1000) en attendant.
Christian

trigger

Merci de la réponse donc si j'ai bien compris si je supprime le delay l'arduino ne ferra absolument rien tant qu'aucun char en passe sur le port série ?

bricofoy

non, si tu supprime la tempo, il va boucler en continu sur le "if (Serial.available())", et exécutera la suite dès qu'il recevra un caractère.

Supprimer le delay va te permettre d'avoir juste un temps de réaction plus court.

Si le but est de mettre physiquement le microcontroleur en sommeil pour économiser de l'énergie tant qu'il ne reçoit rien, ce n'est pas la solution, et je ne la connais pas. D'ailleurs est-ce possible avec l'environnement arduino ?
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

trigger

Arf je pensais que c'était le but des interruptions :S

Je suis perdu ... help ^^

bricofoy

Non, le but des interruptions, c'est d'interrompre à un moment le déroulement normal du code suite à un évènement extérieur (interruption) pour pouvoir exécuter immédiatement une fonction particulière.
Ça permet d'avoir une réaction immédiate si par exemple tu exécutes un code qui prends beaucoup de temps, mais que tu dois quand même immédiatement réagir à un changement sur une entrée.

Ça peut aussi dans certains cas être utilisé pour réveiller un micro en mode veille, mais je ne sais pas si c'est possible avec l'arduino.

Dans ton sketch de toutes manières tu n'utilises pas les interruptions.
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

trigger

#6
Dec 06, 2012, 01:37 pm Last Edit: Dec 06, 2012, 01:51 pm by trigger Reason: 1
@bricofoy

Je sais bien que je n'utilise pas les interruptions dans mon code mais je voudrais juste savoir si il y a possibilité d'en foutre sur le port série !

EDIT : je pense que je ne suis pas du tout claire en fait ^^

Ce que je souhaite avec le code du poste 1 c'est de ne pas faire travailler l'arduino pour rien ( les commandes arrivent toutes les heures +/- quelques minutes ... C'est pour ça que je souhaite utiliser les interruptions mais je ne sais pas du tout comment faire pour la mettre sur le port série ...

bricofoy

oui, mais pour ça il faut avant tout pouvoir mettre l'arduino "en veille" et je ne sais pas si c'est possible, en tout cas je n'en ai jamais entendu parler.

et en plus il faut pouvoir attribuer une INT au port série, mais je dirais que ça c'est secondaire, à la limite.

tu as vraiment des gros soucis d'alim ou d'autonomie du montage sur une pile, pour chercher à la mettre en veille ?
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

skywodd


Je sais bien que je n'utilise pas les interruptions dans mon code mais je voudrais juste savoir si il y a possibilité d'en foutre sur le port série !

Oui depuis arduino 1.0 c'est possible via SerialEvent() :
http://arduino.cc/en/Reference/SerialEvent


Ce que je souhaite avec le code du poste 1 c'est de ne pas faire travailler l'arduino pour rien ( les commandes arrivent toutes les heures +/- quelques minutes ... C'est pour ça que je souhaite utiliser les interruptions mais je ne sais pas du tout comment faire pour la mettre sur le port série ...

A moins de mettre en mode "sleep" le cpu celui ci travaille constamment.
Qu'il boucle sur un if() ou sur rien (fonction loop() vide) ça ne change pas grand chose ;)
Les interruptions c'est intéressant quand tu veut "paralléliser" plusieurs taches.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

bricofoy

merci pour ces précisions :)

la question devenant, du coup : l'arduino permet-il d'accéder au mode sleep du cpu ?
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

skywodd


la question devenant, du coup : l'arduino permet-il d'accéder au mode sleep du cpu ?

Oui bien sûr, fait une recherche sur le forum avec le mot clef "avr/sleep.h", tu devrais tomber sur plusieurs topic traitant du sujet ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

trigger

Merci bien pour toutes ces précieuses infos :)

Go Up