Aller au contenu


Photo
- - - - -

Décodage infrarouge avec Arduino


  • Veuillez vous connecter pour répondre
26 réponses à ce sujet

#21 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 03 janvier 2013 - 11:42

Lorsque tu allumes ton Arduino, les différentes variables sont initialisées, puis setup() est exécutée. Ensuite, loop() est répété. Si tu appuies sur le bouton et que ton système reçoit le signal, la condition est validée et bouton vaut le code reçu par IR. Tu mets bouton à zéro à la fin de ta boucle, donc si tu n'appuies pas sur la télécommande, rien n'est reçu, et bouton reste à zéro. Donc ta condition n'est jamais vérifié et ta led ne s'allume pas.

?? Non, son code est bon à ce niveau.
Le fait de remettre la variable bouton à 0 permet de ne pas rentrer de nouveau dans la condition.


J'ai fais à peu près le même code; quand j'appuie sur le bouton 7, la condition est validée, la led s'allume mais je n'arrive pas à sortir de la condition, la led s'allume sans arrêt, comment je pourrai faire ??

C'est parce qu'il faut réinitialiser la variable bouton lorsque tu éteins ta LED.

D'ailleurs, tu n'as pas modifié la ligne que je t'ai dit.
Voila le code modifié :

#include <IRremote.h>

#define DEBUG

int bouton = 0;

int IR_RECEIVER = 2;   		
IRrecv ir_receiver(IR_RECEIVER); 
decode_results result; 		

void setup()
{ 
  ir_receiver.enableIRIn();
  Serial.begin(9600);
  pinMode(12, OUTPUT);
}


void loop()
{
  if (ir_receiver.decode(&result))
  {
  bouton = result.value;   // <======== modification ici
  }
  
  
  Serial.print(bouton);
  Serial.print("\n");
  
  
  if(bouton == -2843 || bouton == 6375)
{
  digitalWrite(12, HIGH);
  delay(500);
  digitalWrite(12, LOW);
  bouton = 0;          	// <============= modification ici
}
 
}


Et s'il te plait, quand tu met du code, pense à le mettre entre les balises [ code] et [ /code]



++
Black Templar

Mon site internet : http://ferdinandpiette.com/


#22 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 03 janvier 2013 - 11:51

?? Non, son code est bon à ce niveau.
Le fait de remettre la variable bouton à 0 permet de ne pas rentrer de nouveau dans la condition.


Donc la LED reste éteinte. Ma réponse concerne ce post et le code de celui-ci.

Les deux points que tu as soulevé sont également problématiques. Cela dit, avec le dernier code que tu as posté, la LED devrait s'allumer une fois lors de la réception du code IR et s'éteindre ensuite, jusqu'au prochain appui sur le bouton. À moins que la méthode "decode" ne fournisse en permanence un résultat correspondant aux valeurs testées ensuite (je n'ai pas regardé la lib en détail, mais je pense que ça n'est pas le cas).
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#23 jojo3544

jojo3544

    Membre

  • Membres
  • 16 messages

Posté 04 janvier 2013 - 10:14

J'ai essayé le code; j'ai déjà essayé avec bouton = 0 à la fin de la condition; mais sa ne fonctionne pas, sa me parais bizarre, quand j'ouvre le moniteur, il m’affiche la valeur de bouton qui au début est de zéro. Quand j'appuie sur le bouton, bouton vaut la valeur qui lui fais rentrer dans le condition donc il rentre dans cette condition. Mais même le fait qu'il y ai un bouton = 0; la variable bouton ne revient pas à zéro. Je pense que le problème est que bouton doit être en permanence la valeur de result.value car il y a le if qui dit que bouton est égal à... seulement si un bouton est pressé. J'ai déjà essayé d'enlever le if mais bouton reste toujours à zero :( en gros rien à changé.

#24 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 04 janvier 2013 - 11:40

J'ai essayé le code; j'ai déjà essayé avec bouton = 0 à la fin de la condition; mais sa ne fonctionne pas, sa me parais bizarre, quand j'ouvre le moniteur, il m’affiche la valeur de bouton qui au début est de zéro. Quand j'appuie sur le bouton, bouton vaut la valeur qui lui fais rentrer dans le condition donc il rentre dans cette condition. Mais même le fait qu'il y ai un bouton = 0; la variable bouton ne revient pas à zéro. Je pense que le problème est que bouton doit être en permanence la valeur de result.value car il y a le if qui dit que bouton est égal à... seulement si un bouton est pressé. J'ai déjà essayé d'enlever le if mais bouton reste toujours à zero :(/> en gros rien à changé.


Je ne suis pas sûr d'avoir tout compris ... Essaie d'être plus clair, de donner des numéros de ligne ou des indications explicites.

Dans le code de Black Templar, si tu appuies sur un bouton quelconque, la variable va garder la valeur reçue par la fonction : en effet, la remise à zéro ne se fait que quand le code reçue a été traité et la LED allumée puis éteinte. Si tu presses le bon bouton, par contre, la variable bouton sera remise à zéro après allumage et extinction de la LED.

As-tu testé les exemple d'ici : Doc lib IR remote ? Ca permettra de tester le comportement du système dans un cas normalement fonctionnel.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#25 jojo3544

jojo3544

    Membre

  • Membres
  • 16 messages

Posté 04 janvier 2013 - 01:13

C'est presque sa c'est juste que si j'appuie le bon bouton la variable "bouton" ne se remet pas à zero, même si je rajoute bouton = 0; à la fin de la condition, sa me parais bizare !

#26 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 04 janvier 2013 - 02:29

C'est presque sa c'est juste que si j'appuie le bon bouton la variable "bouton" ne se remet pas à zero, même si je rajoute bouton = 0; à la fin de la condition, sa me parais bizare !


Oui, c'est sûr que ça n'est pas normal. As-tu testé l'exemple du lien ?

Tu devrais aussi essayer de revenir à un système très simple, par exemple, trois boutons sur les pins de l'Arduino, un qui allume et éteint la LED, les autres qui ne déclenchent pas d'action. Le but est de localiser le problème, de savoir si c'est l'Arduino, le câblage, la lib, etc. qui en est la source. Avec le code de Black Templar et un peu d'adaptation, ça devrait le faire.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#27 jojo3544

jojo3544

    Membre

  • Membres
  • 16 messages

Posté 04 janvier 2013 - 05:23

J'ai essayé l'exemple du lien, il fonctionne, l'arduino fonctionne, je pense que c'est le code qui a un problème... Il faudrais que "bouton" soit constament la valeur de "result.value" , j'ai essayé de supprimer le "if" mais "bouton" reste toujours à zéro même si j'appuie sur un bouton




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users