Pages: [1]   Go Down
Author Topic: [Question] Interruption et port Serie  (Read 1237 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
« Last Edit: December 06, 2012, 06:10:19 am by trigger » Logged

france
Offline Offline
God Member
*****
Karma: 15
Posts: 881
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Christian

Offline Offline
Full Member
***
Karma: 0
Posts: 152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

perpignan, france
Offline Offline
Sr. Member
****
Karma: 2
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

-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

Offline Offline
Full Member
***
Karma: 0
Posts: 152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Je suis perdu ... help ^^
Logged

perpignan, france
Offline Offline
Sr. Member
****
Karma: 2
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

-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

Offline Offline
Full Member
***
Karma: 0
Posts: 152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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 ...
« Last Edit: December 06, 2012, 07:51:15 am by trigger » Logged

perpignan, france
Offline Offline
Sr. Member
****
Karma: 2
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

-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

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Les interruptions c'est intéressant quand tu veut "paralléliser" plusieurs taches.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

perpignan, france
Offline Offline
Sr. Member
****
Karma: 2
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci pour ces précisions smiley

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

-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

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci bien pour toutes ces précieuses infos smiley
Logged

Pages: [1]   Go Up
Jump to: