Amplifier le signal d'une télécommande infrarouge

Hello,

L'ampli qui commande le son de ma télé est dans un placard sous la télé. Le problème c'est que quand la porte est fermée, la télécommande n'arrive pas à lui envoyer le signal.
J'ai donc pensé à faire un petit dispositif avec un récepteur TSOP38238 posé à coté de la télé, et relié à une diode émettrice à l'intérieur du meuble qui servirai de relai pour redonner l'information à l'ampli.
Le montage est fait, mais j'ai deux petits soucis au niveau du code.

#include <IRremote.h>
 
int pin_recept = 11; // On définit le pin 11  
IRrecv ir_recept(pin_recept); 
IRsend ir_send; // crée une instance
decode_results ir_decode; // stockage données reçues
//unsigned long num=((unsigned long)rfid.serNum[3]<<24)+((unsigned long)rfid.serNum[2]<<16)+((unsigned long)rfid.serNum[1]<<8)+(unsigned long)rfid.serNum[0];
unsigned long signal;
   
void setup() 
{ 
  Serial.begin(115200); 
  ir_recept.enableIRIn(); // Initialisation de la réception 
}
 
void loop() 
{ 
  if (ir_recept.decode(&ir_decode)) 
  { 
      Serial.println(ir_decode.value, HEX); 
      signal = (ir_decode.value,HEX);
      Serial.println(signal);

      ir_send.sendNEC(signal, HEX);
      ir_recept.resume(); 
  } 
}


// Code allumage ampli : 3FC609F
// Code volume UP: 3FCB847
// Code volume DOWN: 3FC7A85

Quand je pointe ma télécommande sur le TSOP, je récupère bien le code hexa de la touche correspondante, par contre la valeur de la variable intermédiaire "signal" est à 16!
22:49:27.962 -> 3FC7A85
22:49:27.962 -> 16
Et l'autre soucis, c'est que une fois les deux Serial.print affcihés dans le moniteur série, le système ne répond plus!
Quelqu'un aurait-il une solution?
Merci pour votre aide!
Antoine

Quand vous faites ça

signal = (ir_decode.value,HEX);

c’est comme si vous aviez écrit

signal = HEX;

et HEX vaut 16... vous avez recopié “bêtement” (sans comprendre sans doute que le print qui est au dessus pour lequel HEX est juste une paramètre de la fonction print pour dire d’imprimer la représentation hexadécimale). Ce n’est qu’une représentation d’un nombre et vous n’avez rien de particulier à faire pour le manipuler. Si vous voulez mémoriser cette valeur faites juste
signal = ir_decode.value;mais utiliser directement ir_decode.value est possible, signal ne sert à rien (sauf si vous voulez gérer les répétitions de code)

De même quel doit être le second paramètre de la méthode ir_send.sendNEC() ?...

Oups! A faire ça entre deux biberons j'ai même pas vu le HEX au lieu du 32...
J'ai nettoyé le code et effectivement ça fonctionne!

#include <IRremote.h>
 
int pin_recept = 11; // On définit le pin 11  
IRrecv ir_recept(pin_recept); 
IRsend ir_send; // crée une instance d'envoi
decode_results ir_decode; // stockage des données reçues

void setup() 
{ 
  Serial.begin(115200); 
  ir_recept.enableIRIn(); // Initialisation de la réception 
}
 
void loop() 
{ 
  if (ir_recept.decode(&ir_decode)) 
  { 
    ir_send.sendNEC(ir_decode.value, 32);
    delay(200);
    ir_recept.enableIRIn();
    ir_recept.resume(); 
  } 
}

Du coup je me demandais, est-ce possible de gérer un appui continu? Pour par exemple monter le son de +10 en appuyant une fois en maintenant au lieu d'appuyer 10 fois?

Bien sûr
Puisque vous avez une indirection Vous pouvez avoir une touche de la télécommande qui est captée par l’arduino est ensuite ça envoie le ou les signaux que vous souhaitez - par exemple 10 impulsions pour monter le son

Sinon si vous tenez un bouton de la télécommande appuyé ça envoie souvent une seule fois le code et ensuite un code spécial qui dit “répétition”. C’est ce code que vous devez détecter et re-émettre la touché d’origine