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 ?