Émisson d'un code IR

Support pour le kit de communication infra rouge (IR)

Émisson d'un code IR

Message non lude freezix » Sam 1 Déc 2012 14:02

Bonjour,

J'ai posé mon problème lors de l'atelier arduino du capitole du libre, et on m'a proposé de poster ici, alors me voilà !

J'aimerais reproduire ce qu'envoie ma télécommande par une led IR à partir d'arduino et du fichier LIRC correspondant.

Voilà le fichier qui correspond à ma télécommande que j'ai trouvé sur le site du projet LIRC.

Code: Tout sélectionner
#
# this config file was automatically generated
# using lirc-0.6.5-CVS(parallel) on Thu Sep 13 21:00:23 2001
#
# contributed by Christoph Bartelmus
#
# brand:                       JVC
# model no. of remote control: RM-SFSSD7R
# devices being controlled by this remote: FS-SD5R
#

begin remote

  name  RM-SFSSD7R
  bits           16
  flags SPACE_ENC|NO_HEAD_REP|CONST_LENGTH
  eps            30
  aeps          100

  header       8587  4221
  one           596  1533
  zero          596   478
  ptrail        593
  gap          46756
  toggle_bit      0


      begin codes
          DIMMER                   0x000000000000CD4A
          SLEEP                    0x000000000000C5C0
          POWER                    0x000000000000C5E8
          DISPLAY                  0x000000000000C50E
          AUTO_PRESET              0x000000000000C5EE
          FM_MODE                  0x000000000000C55A
          PROGRAM                  0x000000000000CD56
          RANDOM                   0x000000000000CD4E
          REPEAT                   0x000000000000CDDA
          AHB_PRO                  0x000000000000C5AE
          DOOR_SLIDE               0x000000000000F515
          CD_EJECT                 0x000000000000CD22
          BASS                     0x000000000000C58C
          TREBLE                   0x000000000000C5EC
          CANCEL                   0x000000000000CDB6
          PTY/EON                  0x000000000000F5A1
          UP                       0x000000000000F503
          DISPLAY_MODE             0x000000000000F5C1
          LEFT                     0x000000000000F5C3
          SET                      0x000000000000F589
          RIGHT                    0x000000000000F543
          FADE_MUTING              0x000000000000C538
          DOWN                     0x000000000000F583
          MD/AUX                   0x000000000000C57C
          CD_PLAY                  0x000000000000CDD6
          FM/AM                    0x000000000000C5D0
          FWD                      0x000000000000F5A0
          BWD                      0x000000000000F560
          STOP                     0x000000000000CDC2
          +                        0x000000000000C578
          -                        0x000000000000C5F8
      end codes

end remote



Tout d'abord, j'aimerais voir si j'ai bien compris comment lire ce fichier :

name RM-SFSSD7R
bits 16 //nombre de bits qui compose le code que j'envoie à l'appareil (un bit = un certain temps d'émission + un certain temps de non-émission)
flags SPACE_ENC|NO_HEAD_REP|CONST_LENGTH // je sais pas trop
eps 30 //je sais pas
aeps 100 //je sais pas

header 8587 4221 // temps d'émission plus temps de non-émission (µs) pour annoncer à l'appareil que je vais envoyer un code
one 596 1533 // pour envoyer un 1
zero 596 478 // pour envoyer un 0
ptrail 593 //je sais pas
gap 46756 //temps minimum d'attente entre deux codes
toggle_bit 0 //je sais pas



À partir de là, j'ai bidouillé la librairie IRremote :

Voilà le code qu'elle utilise pour envoyer un code sony (IRremote.cpp) :

Code: Tout sélectionner
void IRsend::sendSony(unsigned long data, int nbits) {
  enableIROut(40);
  mark(SONY_HDR_MARK);
  space(SONY_HDR_SPACE);
  data = data << (32 - nbits);
  for (int i = 0; i < nbits; i++) {
    if (data & TOPBIT) {
      mark(SONY_ONE_MARK);
      space(SONY_HDR_SPACE);
    }
    else {
      mark(SONY_ZERO_MARK);
      space(SONY_HDR_SPACE);
    }
    data <<= 1;
  }
}


Je l'ai copié collé modifié ainsi :

Code: Tout sélectionner
void IRsend::sendJVC(unsigned long data, int nbits)
{
  enableIROut(38); //là, je ne savais pas trop quoi mettre, c'est la fréquence d'émission je crois, je ne comprends pas pourquoi cette info n'est pas dans le fichier LIRC
  mark(JVC_HDR_MARK);
  space(JVC_HDR_SPACE);
  for (int i = 0; i < nbits; i++) {
    if (data & TOPBIT) {
      mark(JVC_ONE_MARK);
      space(JVC_ONE_SPACE);
    }
    else {
      mark(JVC_ZERO_MARK);
      space(JVC_ZERO_SPACE);
    }
    data <<= 1;
  }
}


J'ai ajouté les constantes dans IRremoteInt.h

Code: Tout sélectionner
#define JVC_HDR_MARK   4633
#define JVC_HDR_SPACE   4321
#define JVC_ONE_MARK   596
#define JVC_ONE_SPACE   1533
#define JVC_ZERO_MARK   596
#define JVC_ZERO_SPACE   478
#define JVC_RPT_LENGTH    46756


Puis j'ai ajouté la méthode dans IRremote.h

Ensuite, j'ai pris l'exemple IRsendDemo et j'ai remplacé
Code: Tout sélectionner
irsend.sendSony(0xa90, 12); // Sony TV power code

par
Code: Tout sélectionner
irsend.sendJVC(0x000000000000C5E8, 16); // JVC power code


Ma webcam enregistre bien une émission de la LED, mais mon appareil ne s'allume pas...

Il est curieux que je n'ai pas trouvé de librairies qui permettent d'envoyer un code à partir d'un fichier fourni par LIRC...

Pour mon montage, c'est tout simple : pin 3 >> longue patte de la LED || courte patte de la LED >> GROUND

Comment faire ? Suis-je sur la bonne voie ? Voyez-vous des erreurs ?
freezix
 
Messages: 3
Inscription: Sam 1 Déc 2012 13:34

Re: Émisson d'un code IR

Message non lude Stéphane » Lun 3 Déc 2012 13:45

Bonjour,

je vous conseille d'aller télécharger la dernière version de la librairie ici.

En effet, vous verrez que le support JVC est pris en charge nativement (cf méthodes des classes send et receive). L'exemple JVCPanasonicsendDemo devrait vous éclairer d'avantage.
De plus, vous verrez également que les temps respectifs du protocole se rapprochent énormément de ceux du protocole NEC, très documenté et très bien expliqué par une myriade de tutos sur le net, vous pourrez ainsi comprendre le format d'une trame, le nombre de bits envoyés, etc.

Bonne journée.
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40

Re: Émisson d'un code IR

Message non lude freezix » Lun 3 Déc 2012 15:16

Super, merci, ça marche ! Malheureusement, j'ai trois télécommandes à faire fonctionner... J'ai donc encore quelques soucis. Mais je suis content de voir que le code utilisé n'est pas si loin du mien =)

Je passe à la télécommande de la freebox :

Ça semble assez simple, mais je ne comprend pas la signification du toggle_bit...
Code: Tout sélectionner
#
# this config file was automatically generated
# using lirc-0.7.0pre8(serial) on Tue Nov  2 11:54:10 2004
#
# contributed by Serial Cleaner <serialcleaner|gmx.net>
#
# brand:   FREE
# model no. of remote control: FREEBOX_REMOTE
# devices being controlled by this remote:
#      Freebox Modem ADSL/TV
#      http://www.free.fr
#

begin remote

  name       FREEBOX_REMOTE
  bits           12
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  one           550  4505
  zero          550  1976
  ptrail        551
  gap          79667
  min_repeat      1
  toggle_bit      5


      begin codes
          ON/OFF                   0x0000000000000D1D
          TV/AV                    0x0000000000000D15
          OPTIONS                  0x0000000000000D38
          ?                        0x0000000000000D3B
          RED                      0x0000000000000D39
          GREEN                    0x0000000000000D1E
          YELLOW                   0x0000000000000D3E
          BLUE                     0x0000000000000D31
          MUTE                     0x0000000000000D1F
          INFO                     0x0000000000000D20
          GUIDE                    0x0000000000000D21
          STOP                     0x0000000000000D23
          PLAY/PAUSE               0x0000000000000D24
          REC                      0x0000000000000D22
          OK                       0x0000000000000D33
          P+                       0x0000000000000D34
          P-                       0x0000000000000D35
          VOL-                     0x0000000000000D36
          VOL+                     0x0000000000000D37
          X                        0x0000000000000D29
          MAIL                     0x0000000000000D2A
          HEART                    0x0000000000000D3C
          HOME                     0x0000000000000D3D
          1                        0x0000000000000D00
          2                        0x0000000000000D08
          3                        0x0000000000000D10
          4                        0x0000000000000D01
          5                        0x0000000000000D09
          6                        0x0000000000000D11
          7                        0x0000000000000D02
          8                        0x0000000000000D0A
          9                        0x0000000000000D12
          0                        0x0000000000000D0E
          *                        0x0000000000000D18
          #                        0x0000000000000D05
# Howto code # as a char and not commentary delimiter ?
      end codes

end remote



Une idée ?

EDIT :
Ce que j'ai enregistré avec ma télécommande ne correspond pas du tout à ce qui est décrit dans le fichier, donc pour l'instant, j'essaye de me débrouiller avec les données brutes.
freezix
 
Messages: 3
Inscription: Sam 1 Déc 2012 13:34


Retourner vers Kit Communication IR

Qui est en ligne

Utilisateurs parcourant ce forum: Google Feedfetcher et 1 invité