Trouver code C d'une télécommande

Support pour le kit de communication infra rouge (IR)

Trouver code C d'une télécommande

Message non lude blepharocyte » Ven 15 Fév 2013 00:36

Bonjour,

Je viens d'acquérir un kit IR chez snootlab, avec une arduino mega R3. C'est pour un projet de controle de LED de haute puissance pour l'éclairage d'un aquarium et d'autre controle.
J'ai pris ce kit pour me permettre d'éteindre ou d'allumer l'alimentation des LED. ou plus encore.
Je pense que le câblage n'est pas très difficile, niveau programmation je me débrouille meme si je ne connais pas le C mais je pense apprendre rapidement.

Cependant, ne connaissant pas l'IR, j'ai des questions:
Si je veux utiliser ma télécommande de TV, comment trouver le code qu'elle va transmettre si j'appuie par exemple sur la touche 1 ou sur la touche 2 ? C'est une télécommande panasonic. J'ai pas de notice.
Parce que pour programmer avec condition (if code reçu = xxxx alors allumer..) il me faut connaitre à l'avance le code de chaque touche de ma télécommande non ?

Quelqu'un peut m'éclairer ?
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Ven 15 Fév 2013 11:45

bonjour,

J'ai un peu cherché et je suis tombé sur un code ici:

Code: Tout sélectionner
 Serial.println(results.value, HEX);


Dans ce code, quelque soit la valeur hexadécimal envoyé par la LED infrarouge, il est envoyé en sortie sur l'écran c'est bien ça ?
Donc en gros quand j'aurais mon écran (que je n'ai pas encore) je pourrais savoir quel code est envoyé par ma télécommande pour chaque touche..

je me trompe ?
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude SaW3r » Ven 15 Fév 2013 12:14

Bonjour, j'ai EXACTEMENT ce que vous recherchez puisque j'ai aussi recherché cela auparavant et j'ai fini par trouver. Je ne suis pas sur mon PC et ne peux donc pas vous partager le code mais la librairie se nomme IRrecord si je me souviens bien, elle permet de relever les codes infrarouges des différentes télécommandes mais aussi de faire un relais infrarouge !! Par exemple (je l'ai fais chez moi), vous rangez tout vos appareil dans un meuble (aucun câble ne traînent donc c'est plus esthétique) et vous mettez simplement un récepteur infrarouge dissimulé sous la télévision et hop ça renvoi le tout à la les infrarouge a l'intérieur du meuble et donc aux appareils.

Si vous ne trouvez pas la librairie, je vous la partagerais ce soir lorsque je serais sur mon PC.

Cordialement.
SaW3r
 
Messages: 58
Inscription: Sam 24 Déc 2011 12:13
Localisation: Paris

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Ven 15 Fév 2013 12:43

Encore moi.

Je suis un idiot j'ai pas pensé au retour usb que pouvait fournir l'arduino pour avoir les print sur l'ordinateur. Donc je testé le code, ça fonctionne j'ai des retours du genre:
26775
-6121

Par contre, quand j'intègre donc ces valeurs dans des variables pour allumer ou éteindre une LED, ça fonctionne pas. Je pense que c'est une question de codage du signal non ? Hexadécimal ? décimal ? il y a un truc qui m'échappe ?
Merci.
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Ven 15 Fév 2013 13:27

Oui sa serais cool !!
J'ai trouvé un code sur internet qui permet de récupérer des valeurs après reception d'un signal mais j'avoue ne pas comprendre le retour de l'arduino. C'est du genre: signal raw: 9344 1150 -550 100 -50 50 -200 100 -200 50 -100 50 -100 50 -100 50 -50 100 -200 50 -250 50 -200 100 -50 50 -200 100 -50 100 -200 50 -250 50 -50 100 -200 50 -100


Bref. Sinon j'ai trouvé comment faire pour mon problème. Si j'appuie sur une touche de ma télécommande et que l'arduino retourne par exemple 617038C7, et bien il faut écrire 0x617038C7 dans votre variable pour que cela fonctionne. Donc ajouter 0x. Pourquoi ? Je n'ai pas la réponse.

Sinon j'ai un autre problème. Ma télécommande livebox me retourne bien des code hexadécimaux, mais ma télécommande TV Panasonic de 2012 me retourne "0" a chaque touche. Problème de librairie cette fois ci ? Vous avez une idée ?
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude john_lenfr » Ven 15 Fév 2013 18:16


Windows XP SP3
IDE 0.22 ou 1.0
Arduino Uno/Mini v4/Mini Pro/Nano
Deuligne/Mémoire/XBee/Ethernet/Stalker/Sablier/Rotoshield
john_lenfr
 
Messages: 32
Inscription: Jeu 3 Jan 2013 19:36

Re: Trouver code C d'une télécommande

Message non lude Bemolu » Ven 15 Fév 2013 22:40

blepharocyte a écrit:Oui sa serais cool !!
J'ai trouvé un code sur internet qui permet de récupérer des valeurs après réception d'un signal mais j'avoue ne pas comprendre le retour de l'arduino. C'est du genre: signal raw: 9344 1150 -550 100 -50 50 -200 100 -200 50 -100 50 -100 50 -100 50 -50 100 -200 50 -250 50 -200 100 -50 50 -200 100 -50 100 -200 50 -250 50 -50 100 -200 50 -100


De ce que je vois, c'est ce que tu génères avec la librairie IRremote, et l'exemple livré IRdump.
Les premières très grosses valeurs, c'est de l'artefact, à oublier. Commence au premier '100'
Ca veut dire que la télécommande émet pendant 100 unités de temps, puis une pause de 50 unités de temps, puis émet pendant 50 unités de temps, puis s'arrête 200 unités de temps... Refais le plusieurs fois avec la même touche pour être sûr de choper la bonne séquence en entier. Après, tu peux "analyser" la séquence avec une logique comme celle-là: (c'est une télécommance CANON, j'ai enlevé le ' * USECPERTICK ' pour avoir des valeurs plus petites, et j'ai constaté que tous les blancs faisaient entre 10 et 16, et les émissions avaient 2 longueurs possibles: entre 12 et 7 (COURT) ou entre 29 et 35 (LONG). J'ai décidé que blanc + COURT = '0' et que blanc + LONG = '1' et j'ai scanné toutes mes touches, j'ai converti le code binaire en entier)
Pour 'scanner' les touches
Code: Tout sélectionner
/* Librairie de lecture IR */
#include <IRremote.h>
/* PIN signal recepteur IR */
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Démarre les interruptions de surveillance du capteur IR
}
void dump(decode_results *results) {
  int count = results->rawlen;
  int ESPACE;
  int COMPTE;
  int START;

  ESPACE = 0;
  COMPTE = 0;
  START = 0;
  for (int i = 1; i < count; i++) {
    if ((i % 2) == 1) {
      if (START == 0) { if (results->rawbuf[i] > 50) {START = i; Serial.print(results->rawbuf[i], DEC);}; } else
      {Serial.print(results->rawbuf[i], DEC);}
    }
    else {
      if (START != 0) {
        Serial.print(-(int)results->rawbuf[i], DEC);
        ESPACE = ESPACE + results->rawbuf[i];
        COMPTE++; }
    }
    if (START != 0) {Serial.print(" ");}
  }
  Serial.println("");
DEC);
}

void loop() {
  if (irrecv.decode(&results)) {
    dump(&results);
    irrecv.resume(); // Receive the next value
  }
}


Pour détecter:
Code: Tout sélectionner
/* Librairie de lecture IR */
#include <IRremote.h>
/* PIN signal recepteur IR */
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
unsigned long CODE = 0;
unsigned long LISTE_CODE [35] = { // Code binaire de chaque touche
2708389951,
2708344051,
2708387911,
2708355271,
2708359351,
2708346091,
2708342011,
2708382811,
2708396071,
2708399131,
2708374651,
2708350171,
2708347621,
2708354251,
2708395051,
2708362411,
2708376691,
2708352211,
2708368531,
2708384851,
2708360371,
2708357311,
2708373631,
2708340991,
2708380771,
2708343541,
2708400151,
2708343031,
2708393011,
2708349151,
2708381791,
2708384341,
2708398111,
2708396581,
2708370571};

int POS[35] = {  // position de chaque touche: ij = i-ème ligne, j-ième colonne
11,
12,
13,
14,
21,
22,
23,
24,
31,
32,
33,
34,
41,
42,
43,
44,
51,
52,
53,
54,
61,
62,
63,
64,
71,
72,
73,
74,
81,
82,
83,
84,
91,
92,
93};

char* MESSAGE[36] = { // Enoncé en clair de la touche
"START/STOP",
"PHOTO",
"ZOOM W",
"ZOOM T",
"SELF T",
"D.EFFECTS",
"^",
"MENU",
"TV SCREEN",
"ON/OFF",
"v",
"SET",
"INDEX",
"SLIDE SHOW",
"CARD -",
"CARD +",
"DATA CODE",
"SEARCH SELECT",
"|<<",
">>|",
"ZERO SET MEMORY",
"REW<<",
"PLAY>",
"FF>>",
"12bit AUDIO OUT",
"-/<||",
"STOP#",
"+/||>",
"AUDIO DUB.",
"PAUSE||",
"SLOW|>",
"x2",
"REC PAUSE",
"AV INSERT",
"AV<->DV"
};
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Démarre les interruptions de surveillance du capteur IR
}
void dump(decode_results *results) {
  int count = results->rawlen -1;
  int ESPACE;
  int COMPTE;
  int START;

  ESPACE = 0;
  COMPTE = 0;
  START = 0;
  CODE = 0;

  for (int i = 1; i < count; i++)
  { if ((i % 2) == 1)
      { if (START == 0)
        { if (results->rawbuf[i] > 80)
          { START = i; };
        }
        else
        { if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
          { // Serial.print("0");
            CODE=CODE<<1;}
          else
          { if ( (results->rawbuf[i] < 35) and (results->rawbuf[i] > 29) )
            { // Serial.print("1");
              CODE=CODE<<1; CODE++;}
            else
            {
              Serial.print("+"); Serial.print(results->rawbuf[i], DEC); Serial.print("+");
            }
          }
        }
      }
      else
      { if (START != 0)
        { if ( (results->rawbuf[i] < 16) and (results->rawbuf[i] > 10) )
          { Serial.print(""); }
          else
          { Serial.print(""); Serial.print(-(int)results->rawbuf[i], DEC); Serial.print("-");
          }
          ESPACE = ESPACE + results->rawbuf[i];
          COMPTE++;
        }
  //  Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
     }
     if (START != 0)
     { Serial.print("");}
   }
//  Serial.println(CODE);
  for (int i=0; i<36; i++)
  { if (CODE==LISTE_CODE[i]) { Serial.println(POS[i]); Serial.println(MESSAGE[i]);} }
}


void loop() {
  if (irrecv.decode(&results)) {
    dump(&results);
    irrecv.resume(); // Receive the next value
  }
}


Si ça peut t'inspirer. Les exemples de la librairie IRremote m'avaient vraiment beaucoup servi. Le problème c'est que chaque fabricant a son propre langage IR
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Sam 16 Fév 2013 00:16

Merci pour le lien john ça me sera utile pour la suite !

Bemolu, si j'ai bien compris: tu utilises ton premier code pour détecter le code binaire envoyé par chaque touche de ta télécommande, en ne retenant que celui qui apparait le plus souvent. Puis tu inscrits dans ton second code tous les codes que tu as retenue dans des tableaux pour les traiter en hexadécimal c'est ça ?

J'avoue que ton histoire de blanc + blanc - j'ai beau chercher je comprend rien !
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude Bemolu » Sam 16 Fév 2013 09:58

blepharocyte a écrit:Merci pour le lien john ça me sera utile pour la suite !

Bemolu, si j'ai bien compris: tu utilises ton premier code pour détecter le code binaire envoyé par chaque touche de ta télécommande, en ne retenant que celui qui apparait le plus souvent. Puis tu inscrits dans ton second code tous les codes que tu as retenue dans des tableaux pour les traiter en hexadécimal c'est ça ?

J'avoue que ton histoire de blanc + blanc - j'ai beau chercher je comprend rien !

J'appelle 'blanc' les périodes où il n'y a pas de signal reçu, c'est à dire les valeurs négatives dans ta séquence 'raw'.
Je n'ai pas de blanc + blanc!

Le premier code me renvoie vers l'ordi les séquence binaires que l'arduino reçoit.
Le second est le résultat: j'ai mis en dur les séquences binaires, et le programme reconnaît laquelle est reçue.

J'espère être un peu plus clair.

Sinon, je te propose de reprendre IRdump légèrement modifié:
Code: Tout sélectionner
/* Librairie de lecture IR */
#include <IRremote.h>
/* PIN signal recepteur IR */
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Démarre les interruptions de surveillance du capteur IR
}


void dump(decode_results *results) {
  int count = results->rawlen;
  int ESPACE;
  int COMPTE;
  int START;

  ESPACE = 0;
  COMPTE = 0;
  START = 0;


  for (int i = 1; i < count; i++) {
    if ((i % 2) == 1) {
      if (START == 0) { if (results->rawbuf[i] > 50) {START = i; Serial.print(results->rawbuf[i], DEC);}; } else
      {Serial.print(results->rawbuf[i], DEC);}
    }
    else {
      if (START != 0) {
        Serial.print(-(int)results->rawbuf[i], DEC);
        ESPACE = ESPACE + results->rawbuf[i];
        COMPTE++; }
    }
    if (START != 0) {Serial.print(" ");}
  }
  Serial.println("");
}


void loop() {
  if (irrecv.decode(&results)) {
    dump(&results);
    irrecv.resume(); // Receive the next value
  }
}

Scanne 5 fois ta touche 1 et renvoie les 5 lignes sur le forum,
Scanne 5 fois ta touche 2 et renvoie les 5 lignes sur le forum,

On verra peut-être apparaître la logique sous-jacente.
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Dim 17 Fév 2013 00:50

D'accord je commence un peu a piger mieux.. J'ai trouvé un lien sur un blog hier soir aussi qui expliqué en francais comment résoudre mon problème, mais il utilise un oscilloscope en parallèle du recepteur IR pour scanner les séquences IR.. Bref j'ai pas d'oscilloscope ! :D

Je rentre chez moi demain soir je vous envoie le code demain soir.

Merci de prendre le temps de m'expliquer et m'aider c'est vraiment super sympa ;)
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Dim 17 Fév 2013 20:42

Alors voila pour la touche 1:
Code: Tout sélectionner
Could not decode message
Raw (76): 25136 3500 -1700 450 -450 400 -1300 450 -450 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -400 450 -450 400 -1300 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -450 450 -1300 450 -450 400 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400
0
Could not decode message
Raw (76): -29074 3450 -1750 450 -400 450 -1300 450 -450 400 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -450 400 -450 450 -400 450 -450 400 -1300 450 -450 400 -500 400 -400 450 -450 450 -450 400 -450 450 -450 400 -400 450 -450 450 -1300 400 -450 450 -400 450 -450 450 -450 400 -450 400 -450 450 -450 400 -450 450 -450 400 -400 450 -450 450 -450 400
0
Could not decode message
Raw (76): -3868 3450 -1750 400 -450 450 -1300 450 -450 400 -450 400 -450 450 -400 450 -450 450 -400 450 -400 450 -450 450 -400 450 -450 450 -400 450 -1300 450 -400 450 -450 400 -450 450 -450 400 -450 450 -450 400 -450 400 -450 450 -450 400 -1300 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -400 450 -450 400 -450 450
0
Could not decode message
Raw (76): 5724 3450 -1750 450 -400 450 -1300 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -450 400 -450 400 -1300 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 450 -450 400 -400 450 -450 450 -1300 450 -400 450 -450 400 -450 450 -450 400 -450 450 -450 400 -450 400 -450 450 -450 400 -450 450 -450 400 -400 450
0
Could not decode message
Raw (76): 1646 3450 -1750 400 -450 450 -1300 450 -450 400 -400 450 -450 450 -400 450 -450 450 -400 450 -400 450 -450 450 -450 400 -450 450 -400 450 -1300 450 -450 400 -450 450 -450 400 -450 400 -450 450 -400 450 -450 400 -450 450 -450 400 -1300 450 -450 400 -500 400 -450 400 -450 400 -450 450 -450 400 -450 450 -450 400 -450 400 -450 450 -450 400 -450 450
0
Could not decode message
Raw (76): -31512 3450 -1800 400 -400 450 -1300 450 -450 400 -450 450 -400 450 -450 450 -450 400 -450 400 -500 400 -450 400 -450 450 -400 450 -450 400 -1300 450 -450 450 -400 450 -400 450 -450 450 -450 400 -450 400 -450 450 -450 400 -450 450 -1300 450 -400 450 -450 400 -450 450 -450 400 -450 400 -500 400 -400 450 -450 450 -450 400 -400 450 -450 450 -400 450


Pour la touche 2:
Code: Tout sélectionner
Could not decode message
Raw (76): -11068 3450 -1750 400 -500 400 -1300 450 -450 400 -450 400 -500 400 -400 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 450 -450 400 -1300 450 -400 450 -450 450 -450 400 -400 450 -450 450 -400 450 -450 400 -450 450 -450 400 -1350 400 -450 400 -450 450 -450 400 -450 450 -450 400 -450 400 -450 450 -400 450 -1300 450 -400 450 -450 450 -450 400
0
Could not decode message
Raw (76): 26846 3450 -1800 400 -450 400 -1350 400 -450 450 -400 450 -400 450 -450 450 -400 450 -450 400 -500 400 -400 450 -450 450 -400 450 -450 400 -1300 450 -450 450 -450 400 -450 400 -450 450 -450 400 -450 400 -450 450 -450 400 -450 450 -1300 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -1300 450 -400 450 -450 400 -450 450
0
Could not decode message
Raw (76): -17698 3450 -1750 450 -450 400 -1300 450 -400 450 -450 400 -500 400 -400 450 -450 450 -450 400 -450 400 -500 400 -400 450 -450 450 -450 400 -1300 450 -400 450 -450 400 -450 450 -450 400 -450 450 -400 450 -450 450 -400 450 -400 450 -1300 450 -450 400 -450 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -1300 450 -450 400 -500 400 -400 450
0
Could not decode message
Raw (76): 10596 3450 -1750 400 -450 450 -1300 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -400 450 -400 450 -450 450 -1300 400 -500 400 -400 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 450 -450 400 -1350 400 -450 400 -450 450 -450 400 -450 400 -450 450 -450 400 -450 400 -450 450 -1300 450 -400 450 -450 400 -450 450
0
Could not decode message
Raw (76): 7538 3450 -1750 400 -450 450 -1300 450 -400 450 -450 450 -400 450 -450 400 -450 400 -450 450 -450 400 -450 450 -400 450 -450 450 -400 450 -1300 450 -400 450 -450 450 -400 450 -400 450 -450 450 -400 450 -450 400 -500 400 -450 400 -1300 450 -450 400 -500 400 -400 450 -450 450 -400 450 -450 400 -450 450 -400 450 -1300 450 -450 400 -450 450 -400 450


Pour la touche 3:
Code: Tout sélectionner
Could not decode message
Raw (76): 3224 3450 -1750 450 -400 450 -1300 450 -400 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -500 400 -400 450 -1300 450 -400 450 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 450 -1250 450 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -400 450 -450 400 -500 400 -1300 450 -400 450 -450 450
0
Could not decode message
Raw (76): -12540 3450 -1750 450 -450 400 -1300 450 -400 450 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -450 400 -400 450 -450 450 -400 450 -1300 450 -400 450 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -1300 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -1300 400 -450 450 -450 400
0
Could not decode message
Raw (76): 5996 3450 -1750 450 -450 400 -1300 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -450 400 -450 400 -1300 450 -450 400 -450 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -450 450 -1300 450 -400 450 -450 400 -450 450 -450 400 -450 400 -450 450 -400 450 -450 450 -400 450 -1300 450 -400 450 -450 450
0
Could not decode message
Raw (76): -9040 3450 -1750 450 -450 400 -1300 450 -450 450 -450 400 -450 400 -450 450 -450 400 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -1300 450 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -450 450 -1300 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -400 450 -1300 450 -400 450 -450 450
0
Could not decode message
Raw (76): 18446 3450 -1800 400 -400 450 -1300 450 -450 400 -450 450 -400 450 -450 450 -450 400 -450 450 -450 400 -400 450 -450 450 -450 400 -450 450 -1300 400 -450 450 -400 450 -450 400 -500 400 -400 450 -450 450 -450 400 -450 400 -450 450 -1300 450 -400 450 -450 400 -450 450 -450 400 -450 450 -400 450 -400 450 -450 450 -450 400 -1300 450 -450 400 -450 450


Pour la touche 4
Code: Tout sélectionner
Could not decode message
Raw (76): -30826 3450 -1750 400 -450 450 -1300 450 -450 400 -400 450 -450 450 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -450 400 -1300 450 -400 450 -450 400 -450 450 -400 450 -450 450 -400 450 -450 400 -500 400 -450 400 -1350 400 -450 450 -400 450 -400 450 -450 400 -500 400 -450 400 -450 450 -400 450 -1300 450 -1300 450 -450 400 -450 450
0
Could not decode message
Raw (76): 12924 3450 -1750 450 -400 450 -1300 450 -400 450 -450 400 -450 450 -450 400 -450 450 -450 400 -450 400 -450 450 -400 450 -450 450 -400 450 -1300 450 -450 400 -450 450 -400 450 -400 450 -450 450 -450 400 -450 450 -400 450 -450 400 -1300 450 -450 400 -450 450 -450 400 -450 450 -400 450 -450 450 -450 400 -400 450 -1300 450 -1300 450 -400 450 -450 450
0
Could not decode message
Raw (76): 29260 3450 -1750 450 -450 400 -1350 400 -450 400 -450 450 -450 400 -450 450 -400 450 -450 400 -450 450 -450 400 -450 400 -500 400 -400 450 -1350 400 -450 400 -450 450 -400 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 400 -1300 450 -450 450 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -450 400 -1300 450 -1350 400 -450 400 -450 450
0
Could not decode message
Raw (76): -21026 3500 -1700 450 -450 450 -1300 400 -450 450 -400 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -450 450 -1300 400 -450 450 -400 450 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -450 400 -1300 450 -400 450 -450 450 -450 400 -450 400 -450 450 -400 450 -450 400 -500 400 -1300 450 -1300 450 -450 400 -450 400
0
Could not decode message
Raw (76): 6446 3450 -1750 450 -450 400 -1300 450 -400 450 -450 450 -400 450 -450 400 -450 450 -450 400 -450 450 -400 450 -400 450 -450 450 -450 400 -1300 450 -450 400 -450 450 -450 400 -450 400 -500 400 -400 450 -450 450 -450 400 -450 400 -1300 450 -450 450 -450 400 -450 450 -450 400 -400 450 -450 450 -450 400 -450 450 -1250 450 -1350 400 -450 400 -450 450
0
Could not decode message
Raw (76): -3054 3500 -1700 450 -450 450 -1300 400 -450 450 -450 400 -450 450 -450 400 -400 450 -450 450 -450 400 -450 400 -500 400 -450 400 -450 450 -1300 450 -450 400 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -450 400 -500 400 -1300 450 -400 450 -450 450 -450 400 -450 400 -450 450 -450 400 -450 400 -450 450 -1300 450 -1300 400 -450 450 -450 400


:D vous y comprenez quelque chose pour traduire en binaire ?
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude Bemolu » Dim 17 Fév 2013 22:02

blepharocyte a écrit:Alors voila pour la touche 1:
Code: Tout sélectionner
Could not decode message
Raw (76): ...

:D vous y comprenez quelque chose pour traduire en binaire ?


Je pense qu'on va y arriver. Mais tu as pris le code IRrecvdump 'brut', pas celui que je t'ai proposé. Il y aura donc une petite modif à faire (*USECPERTICK).

Je regarde ça demain soir.
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Dim 17 Fév 2013 23:35

Ok merci c'est gentil ! J'attends ta réponse avec impatiente :)
J'ai repris ton code est voici ce que ça donne:

Touche 1
Code: Tout sélectionner
69 -35 9 -9 8 -26 9 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -26 9 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -26 9 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 8 -10 8
70 -34 9 -9 8 -26 9 -9 9 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 9 -25 9 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 8 -10 8 -26 10 -7 9 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8
69 -36 8 -9 8 -26 9 -9 8 -10 8 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8 -26 9 -9 9 -9 8 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8 -9 9 -26 8 -10 8 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8
69 -35 9 -9 8 -26 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 9 -8 9 -9 8 -9 8 -10 8 -26 9 -8 9 -9 9 -9 8 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8 -26 9 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 8 -10 8
70 -34 9 -9 9 -26 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -26 8 -9 9 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -10 8 -26 9 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8


Touche 2
Code: Tout sélectionner
69 -35 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 8 -9 9 -8 9 -26 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -26 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 9 -25 9 -9 9 -8 9 -9 8
70 -34 9 -9 8 -27 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -26 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -26 9 -8 9 -8 9 -9 9
69 -35 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -26 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 9 -8 9 -8 9 -26 9 -9 8 -9 9 -8 9
69 -34 9 -9 9 -26 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9
69 -35 9 -8 9 -26 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -26 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -26 9 -9 8 -9 9 -8 9


Touche 3
Code: Tout sélectionner
69 -35 9 -8 9 -26 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -26 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -26 8 -9 9 -8 9 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9
69 -35 8 -9 9 -26 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 9 -8 9 -8 9 -26 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -26 8 -9 9 -8 9
69 -35 9 -8 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 9 -25 9 -9 9 -8 9
70 -34 9 -9 8 -26 10 -8 9 -8 9 -8 9 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 9 -25 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -26 9 -8 9 -8 9 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9
70 -34 9 -9 8 -26 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -25 9 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9


Touche 4
Code: Tout sélectionner
69 -35 9 -9 8 -26 9 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 9 -25 9 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 9 -8 9 -26 8 -10 8 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8 -9 9 -26 8 -26 9 -9 9 -9 8
69 -35 9 -9 8 -26 9 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -26 9 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 8 -26 9 -9 9 -9 8 -9 8 -9 9 -9 8 -9 9 -9 8 -9 8 -26 9 -26 9 -9 8 -9 9
69 -35 9 -8 9 -26 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -26 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 8 -9 9 -9 8 -26 9 -26 9 -8 9 -9 9
70 -34 9 -9 8 -26 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -26 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -26 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 8 -27 8 -26 9 -9 9 -8 9
69 -35 9 -8 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 8 -9 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -26 9 -26 9 -8 9 -8 9


Touche 5
Code: Tout sélectionner
70 -34 9 -9 9 -25 9 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -25 9 -9 9 -9 8 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -26 9 -8 9 -9 8 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 9 -25 9 -9 9
69 -35 9 -9 8 -26 9 -9 8 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -9 9 -8 9 -26 10 -7 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -26 9 -9 8 -9 9 -9 8 -9 9 -8 9 -9 8 -9 9 -8 9 -9 8 -9 9 -26 9 -9 8
69 -34 9 -9 9 -26 8 -10 8 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -9 9 -26 9 -9 8 -9 8 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 9 -8 9 -26 9 -8 9
69 -35 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -26 9 -8 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -9 8 -26 9 -9 9 -8 9 -9 8 -9 9 -8 9 -9 9 -8 9 -8 9 -9 9 -8 9 -26 9 -8 9
70 -34 9 -9 9 -25 9 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -26 8 -9 9 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -10 8 -26 9 -9 8 -9 9 -9 8 -9 8 -9 9 -9 8 -9 8 -10 8 -9 8 -9 9 -26 9 -8 9
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude Bemolu » Lun 18 Fév 2013 23:08

blepharocyte a écrit:J'ai repris ton code est voici ce que ça donne: |...]


Visiblement le protocole est le suivant:
1/ Emission assez longue, d'environ 70 unités de temps
2/ Pose assez longue, d'environ 35 unités de temps
3/ émission courte d'environ 9 unités de temps
Puis:
36 'bits', composés chacun de:
OU BIEN (1 pose courte d'environ 9 unités de temps) + (émission courte d'environ 9 unités de temps)
OU BIEN (1 pose longue d'environ 26 unités de temps) + (émission courte d'environ 9 unités de temps)

Je te propose donc maintenant le code suivant. Si je ne me trompe pas, chaque touche devrait te sortir une séquence de 36 caractères, mélange de 0 et 1. Chaque touche devrait avoir toujours exactement la même séquence. Vérifie et poste la séquence de chaque touche.
Code: Tout sélectionner
/* Librairie de lecture IR */
#include <IRremote.h>
/* PIN signal recepteur IR */
int RECV_PIN = 11;
int i;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Démarre les interruptions de surveillance du capteur IR
}

void dump(decode_results *results) {
  int count = results->rawlen -1;

  if ( (results->rawbuf[1] < 77) and (results->rawbuf[1] > 63) )
  {}
  else
  { Serial.print("-PAS BON 1:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");}

  if ( (results->rawbuf[2] < 39) and (results->rawbuf[2] > 31) )
  {}
  else
  { Serial.print("-PAS BON 2:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");}

  if ( (results->rawbuf[3] < 12) and (results->rawbuf[2] > 7) )
  {}
  else
  { Serial.print("-PAS BON 3:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");}
 
  for (int i = 4; i < count; i++)
    {
    if ((i % 2) == 0)
        {
        if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
          { Serial.print("0"); }
          else
          {
            if ( (results->rawbuf[i] < 29) and (results->rawbuf[i] > 23) )
            { Serial.print("1"); }
            else
            {
              Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");
            }
          }
        }
    else
      {
      if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
        {
        }
    else
      { Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");
      }
    }
  }
  Serial.println("");
}


void loop() {
  if (irrecv.decode(&results)) {
    dump(&results);
    irrecv.resume();
  }
}
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Mar 19 Fév 2013 00:15

alors:

Touche 1
Code: Tout sélectionner
010000000000010000000001000000000000


Touche 2
Code: Tout sélectionner
010000000000010000000001000000001000


Touche 3
Code: Tout sélectionner
010000000000010000000001000000000100


Touche 4
Code: Tout sélectionner
010000000000010000000001000000001100


Touche 5
Code: Tout sélectionner
010000000000010000000001000000000010


C'est bien du binaire de 36 bits. Maintenant on fait quoi ? :D
Sinon j'ai essayer de transmettre un signal IR avec ma LED mais jsuis un peu septique rien ne ce passe.
La patte longue de la LED va bien sur la pin 3 et la patte courte sur un Ground ? Désolé de la vieille question mais j'ai un gros doute :roll: J'ai cablé ainsi et je ne vois même pas la LED s'allumer l'espace d'un chouilla..
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude Bemolu » Mar 19 Fév 2013 22:20

blepharocyte a écrit:C'est bien du binaire de 36 bits. Maintenant on fait quoi ? :D
Sinon j'ai essayer de transmettre un signal IR avec ma LED mais jsuis un peu septique rien ne ce passe.
La patte longue de la LED va bien sur la pin 3 et la patte courte sur un Ground ? Désolé de la vieille question mais j'ai un gros doute :roll: J'ai cablé ainsi et je ne vois même pas la LED s'allumer l'espace d'un chouilla..


La led en direct j'ai peur que tu la grilles, protège la avec un résistance.
Normal que tu ne voies rien, c'est de l'IR: regarde ta télécommande, en général on ne voit rien quand on appuie sur une touche.
Utilise une webcam ou bien ton smartphone, ils 'voient' les IR.

Pour ta télécommande, voici donc la dernière étape:
On va prendre deux entiers: un 'unsigned long' pour le préambule -28 bits - et un 'unsigned int' pour la fin du code - 8 bits - pour stocker chaque code reçu, et comparer aux valeurs brutes que tu as trouvées.
On pourra optimiser pas mal je pense (byte à la place de unsigned int pour la fin du code, une seule boucle, ...)
Code: Tout sélectionner
/* Librairie de lecture IR */
#include <IRremote.h>
/* PIN signal recepteur IR */
int RECV_PIN = 11;
int i;

const unsigned long P= (((B01000000) * 256 + B00000100 ) * 256 + 00000001) * 16 + B0000; // preambule commun de 28 bits:
const unsigned int T[5] = {B00000000,  // les 8 derniers bits sont les différentiateurs
                           B00001000,
                           B00000100,
                           B00001100,
                           B00000010};

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Démarre les interruptions de surveillance du capteur IR
}

void dump(decode_results *results) {
  int count = results->rawlen -1;
  unsigned long PR = 0;
  unsigned int TR = 0;
  int i=0;

  // Le signal s'initialise
  if ( (results->rawbuf[1] < 77) and (results->rawbuf[1] > 63) )
  {}
  else
  { Serial.print("-PAS BON 1:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};

  if ( (results->rawbuf[2] < 39) and (results->rawbuf[2] > 31) )
  {}
  else
  { Serial.print("-PAS BON 2:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};

  if ( (results->rawbuf[3] < 12) and (results->rawbuf[2] > 7) )
  {}
  else
  { Serial.print("-PAS BON 3:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};
 
  // Réception du préambule de 28 bits
  for (i = 4; i < 32; i++)
    {
    if ((i % 2) == 0)
        {
        if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
          { Serial.print("0"); PR=PR<<1; }
          else
          {
            if ( (results->rawbuf[i] < 29) and (results->rawbuf[i] > 23) )
            { Serial.print("1"); PR=PR<<1; PR++; }
            else
            {
              Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
            };
          };
        }
    else
      {
      if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
        {
        }
    else
      { Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
      }
    };
  }; // FIN RECEPTION PREAMBULE
  if (PR == P)
    {
      for (i = 32; i < count; i++) // La fin du code
      {
      if ((i % 2) == 0)
          {
          if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
            { Serial.print("0"); TR=TR<<1; }
            else
            {
              if ( (results->rawbuf[i] < 29) and (results->rawbuf[i] > 23) )
              { Serial.print("1"); TR=TR<<1; TR++; }
              else
              {
                Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
              };
            };
          }
      else
        {
        if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
          {
          }
        else
          { Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
          };
        };
      };
      for (i=0; i<5; i++)
        {
        if (TR==T[i])
          { Serial.print(">> TOUCHE "); Serial.print(++i, DEC); goto RATE;
          };
        };
      }
    else
      { Serial.print("PREAMBULE RECU<>ATTENDU"); };
  Serial.print(">> Pas de touche correspondante");
  RATE:
  Serial.println("");
}


void loop() {
  if (irrecv.decode(&results)) {
    dump(&results);
    irrecv.resume();
  };
}
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Mar 19 Fév 2013 23:04

Quelque soit la touche, il me renvoit ça:

Code: Tout sélectionner
01000000000001PREAMBULE RECU<>ATTENDU>> Pas de touche correspondante
01000000000001PREAMBULE RECU<>ATTENDU>> Pas de touche correspondante
01000000000001PREAMBULE RECU<>ATTENDU>> Pas de touche correspondante
01000000000001PREAMBULE RECU<>ATTENDU>> Pas de touche correspondante


Après quelque essaie de modification de ton code, je peux dire:
- La conditiion PR==P n'est jamais vérifiée.
- Si je fait un print PR et un print P respectivement ca me donne: 4097 pour PR et 16400 pour P
- Je sais pas si c'est voulu, mais dans ta constante P, il y a une séquence sans préfixe "B" avant.. j'ai essayé avec ça change rien.

J'ai essayé de changer P en string en lui donnant les 28 premier bit, puis de concaténer PR par PR +"0" ou PR + "1" afin de vérifier à la fin si les string P et PR était égual mais sans succes... La concaténation ne fonctionne apparemment pas sur une même string (PR = PR + "1"). Apparemment il faut que la syntaxe soit par exemple PR2 = PR + "1", ce qui ne m'arrange pas !!!!

Je bloque..
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude Bemolu » Mer 20 Fév 2013 19:18

Pas compliqué:
Remplace: for (i = 4; i < 32; i++)
Par: for (i = 4; i < 60; i++)

J'avais calculé 28 bits = 28 passes, alors qu'il faut 2 passes par bit.

Tu as raison, il manque un B dans l'initialisation de PR, mais effectivement ça ne change rien car B00000001 = 00000001 = 1.
Soit au final:
Code: Tout sélectionner
    /* Librairie de lecture IR */
    #include <IRremote.h>
    /* PIN signal recepteur IR */
    int RECV_PIN = 11;
    int i;

    const unsigned long P= (((B01000000) * 256 + B00000100 ) * 256 + B00000001) * 16 + B0000; // préambule commun de 28 bits:
    const unsigned int T[5] = {B00000000,  // les 8 derniers bits sont les différentiateurs
                               B00001000,
                               B00000100,
                               B00001100,
                               B00000010};

    IRrecv irrecv(RECV_PIN);

    decode_results results;

    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn(); // Démarre les interruptions de surveillance du capteur IR
    }

    void dump(decode_results *results) {
      int count = results->rawlen -1;
      unsigned long PR = 0;
      unsigned int TR = 0;
      int i=0;

      // Le signal s'initialise
      if ( (results->rawbuf[1] < 77) and (results->rawbuf[1] > 63) )
      {}
      else
      { Serial.print("-PAS BON 1:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};

      if ( (results->rawbuf[2] < 39) and (results->rawbuf[2] > 31) )
      {}
      else
      { Serial.print("-PAS BON 2:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};

      if ( (results->rawbuf[3] < 12) and (results->rawbuf[2] > 7) )
      {}
      else
      { Serial.print("-PAS BON 3:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};
     
      // Réception du préambule de 28 bits
      for (i = 4; i < 60; i++)
        {
        if ((i % 2) == 0)
            {
            if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
              { Serial.print("0"); PR=PR<<1; }
              else
              {
                if ( (results->rawbuf[i] < 29) and (results->rawbuf[i] > 23) )
                { Serial.print("1"); PR=PR<<1; PR++; }
                else
                {
                  Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
                };
              };
            }
        else
          {
          if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
            {
            }
        else
          { Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
          }
        };
      }; // FIN RECEPTION PREAMBULE
      if (PR == P)
        {
          for (i = 32; i < count; i++) // La fin du code
          {
          if ((i % 2) == 0)
              {
              if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
                { Serial.print("0"); TR=TR<<1; }
                else
                {
                  if ( (results->rawbuf[i] < 29) and (results->rawbuf[i] > 23) )
                  { Serial.print("1"); TR=TR<<1; TR++; }
                  else
                  {
                    Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
                  };
                };
              }
          else
            {
            if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
              {
              }
            else
              { Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
              };
            };
          };
          for (i=0; i<5; i++)
            {
            if (TR==T[i])
              { Serial.print(">> TOUCHE "); Serial.print(++i, DEC); goto RATE;
              };
            };
          }
        else
          { Serial.print("PREAMBULE RECU<>ATTENDU"); };
      Serial.print(">> Pas de touche correspondante");
      RATE:
      Serial.println("");
    }


    void loop() {
      if (irrecv.decode(&results)) {
        dump(&results);
        irrecv.resume();
      };
    }
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Trouver code C d'une télécommande

Message non lude blepharocyte » Mer 20 Fév 2013 22:20

Oui, c'est exactement ce que j'avais fini par faire hier soir pour la boucle for. Il me semble même, je pense, que si on fait cette modif, il faut changer 32 par 60 à cette ligne:

Code: Tout sélectionner
  for (i = 32; i < count; i++) // La fin du code


Ce qui me parait logique vu que le code scanne 1 donnée sur 2 (le modulo, %2), que le count (nombre de valeur raw) vaut 75, donc 75-60 = 15, plus 1 car 60 est compté donc 16, / 2 = 8 Bit pour la dernière séquence (celle qui change en fonction de la touche de la télécommande).

------>Mais ça change rien, la condition PR == P n'est jamais vérifié.. Tu es sur de la validité de la constante P ? Au passage, si tu pouvais m'expliquer brièvement comment tu as codé cette constante ça m’intéresse, car je vois pas trop la logique pour l'instant.

En tout cas, merci pour tout c'est vraiment sympa de m'aider, meme si j'arrive pas à mes fins. ;)
blepharocyte
 
Messages: 18
Inscription: Ven 15 Fév 2013 00:31

Re: Trouver code C d'une télécommande

Message non lude Bemolu » Jeu 21 Fév 2013 21:07

blepharocyte a écrit:Oui, c'est exactement ce que j'avais fini par faire hier soir pour la boucle for. Il me semble même, je pense, que si on fait cette modif, il faut changer 32 par 60 à cette ligne:

Code: Tout sélectionner
  for (i = 32; i < count; i++) // La fin du code


En effet, il fallait changer la valeur aux deux endroits.
Peux-tu essayer ça (qui délivre P et PR histoire de voir leurs valeurs) et poster le résultat. On n'est pas loin du compte (pas facile de débogguer sans le matériel sous la main):
Code: Tout sélectionner
        /* Librairie de lecture IR */
        #include <IRremote.h>
        /* PIN signal recepteur IR */
        int RECV_PIN = 11;
        int i;

        const unsigned long P= (((B01000000) * 256 + B00000100 ) * 256 + B00000001) * 16 + B0000; // préambule commun de 28 bits:
        const unsigned int T[5] = {B00000000,  // les 8 derniers bits sont les différentiateurs
                                   B00001000,
                                   B00000100,
                                   B00001100,
                                   B00000010};

        IRrecv irrecv(RECV_PIN);

        decode_results results;

        void setup()
        {
          Serial.begin(9600);
          irrecv.enableIRIn(); // Démarre les interruptions de surveillance du capteur IR
        }

        void dump(decode_results *results) {
          int count = results->rawlen -1;
          unsigned long PR = 0;
          unsigned int TR = 0;
          int i=0;

          // Le signal s'initialise
          if ( (results->rawbuf[1] < 77) and (results->rawbuf[1] > 63) )
          {}
          else
          { Serial.print("-PAS BON 1:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};

          if ( (results->rawbuf[2] < 39) and (results->rawbuf[2] > 31) )
          {}
          else
          { Serial.print("-PAS BON 2:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};

          if ( (results->rawbuf[3] < 12) and (results->rawbuf[2] > 7) )
          {}
          else
          { Serial.print("-PAS BON 3:");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;};
         
          // Réception du préambule de 28 bits
          for (i = 4; i < 60; i++)
            {
            if ((i % 2) == 0)
                {
                if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
                  { Serial.print("0"); PR=PR<<1; }
                  else
                  {
                    if ( (results->rawbuf[i] < 29) and (results->rawbuf[i] > 23) )
                    { Serial.print("1"); PR=PR<<1; PR++; }
                    else
                    {
                      Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
                    };
                  };
                }
            else
              {
              if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
                {
                }
            else
              { Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
              }
            };
          }; // FIN RECEPTION PREAMBULE
          if (PR == P)
            {
              for (i = 60; i < count; i++) // La fin du code
              {
              if ((i % 2) == 0)
                  {
                  if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
                    { Serial.print("0"); TR=TR<<1; }
                    else
                    {
                      if ( (results->rawbuf[i] < 29) and (results->rawbuf[i] > 23) )
                      { Serial.print("1"); TR=TR<<1; TR++; }
                      else
                      {
                        Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
                      };
                    };
                  }
              else
                {
                if ( (results->rawbuf[i] < 12) and (results->rawbuf[i] > 7) )
                  {
                  }
                else
                  { Serial.print("-PAS BON "); Serial.print(i, DEC); Serial.print(":");Serial.print(results->rawbuf[i], DEC); Serial.print("-");goto RATE;
                  };
                };
              };
              for (i=0; i<5; i++)
                {
                if (TR==T[i])
                  { Serial.print(">> TOUCHE "); Serial.print(++i, DEC); goto RATE;
                  };
                };
              }
            else
              { Serial.print("PREAMBULE RECU<>ATTENDU"); Serial.print(P, DEC); Serial.print(" <> "); Serial.print(P, DEC); };
          Serial.print(">> Pas de touche correspondante");
          RATE:
          Serial.println("");
        }


        void loop() {
          if (irrecv.decode(&results)) {
            dump(&results);
            irrecv.resume();
          };
        }
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Suivante

Retourner vers Kit Communication IR

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 1 invité

cron