[Question] Interruption et port Serie

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 :

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

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

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 ?

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 ?

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

Je suis perdu ... help ^^

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.

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

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 ?

trigger:
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() :

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

merci pour ces précisions :slight_smile:

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

bricofoy:
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 :wink:

Merci bien pour toutes ces précieuses infos :slight_smile: