Problema de infrarrojos de Arduino con control remoto universal

Estoy jugando con la biblioteca IR de Arduino y Ken Shirriff . Estoy tratando de controlar el receptor de audio Sony usando códigos que encontré en la red.

Todo funciona bien, puedo controlar el dispositivo enviando una señal IR desde Arduino, usando sendSonyla función. Sin embargo, tengo problemas para aprender esos mismos códigos en un dispositivo de control remoto universal (he probado dos hasta ahora). Simplemente no reconoce los códigos que, repito, funcionan perfectamente con el dispositivo actual de Sony.

Cualquiera tiene una idea de dónde podrían salir mal las cosas y con qué parámetros debo jugar. He probado variando la frecuencia de modulación (36-38-40 kHz), y la frecuencia de envío de códigos individuales (alterando la pausa entre sucesivas emisiones).

Aquí está el código que estoy usando:

#include <IRremote.h>
IRsend irsend;

void setup()
{
  Serial.begin(9600);
  irsend.enableIROut(40);
}

void sonySend(int code) {
    for (int i = 0; i < 50; i++) {
      irsend.sendSony(code, 12); // Sony TV power code
      delay(30);
    }
}

void loop() {
  sonySend(0x841); // tuner
//  sonySend(0xc41); // tape 1
  delay(1000);
}

Editar: tengo un control remoto original de Sony (con algunos códigos comunes que funcionan en mi dispositivo). Los controles remotos universales no tienen problemas para aprender de ese control remoto de Sony. Solo de Arduino.

Los controles remotos universales que estoy usando son chinos sin nombre, sin embargo, funcionaron perfectamente aprendiendo de otros controles remotos.

Solo para que quede claro: las unidades de control remoto no pueden aprender los códigos enviados con Arduino, pero ¿los mismos códigos funcionan con un receptor real? Si es así, ¿qué controles remotos estás usando?
Entonces el problema no es con el Arduino. Pero con su Control Remoto Universal, en eso no está aprendiendo. Esto no debería tener nada que ver con un Arduino. En eso, la fuente que se está aprendiendo debe ser el Sony Remote real. Hay diferencias menores, que pueden acumularse si está tratando de aprender de Arduino, haciéndose pasar por Sony. O es que el control remoto original se perdió y está tratando de reemplazarlo, y aprenderlo ad-hoc.
usted puede estar golpeando el control remoto universal. Es posible que necesite más demora entre los envíos. 30 ms pueden no ser suficiente tiempo para que se quede inactivo mientras está en modo de aprendizaje. Si tiene el original, debe usar Arduino IRrecvDump.ino para ver qué envía realmente el control remoto real. 50 veces 30 ms de diferencia es demasiado.
@mpflaga: Este fue uno de una serie de intentos desesperados de variar ambos parámetros, comencé con 2-3 repeticiones con 50 ms de diferencia.

Respuestas (1)

Una forma sencilla de depurar sería usar un osciloscopio para comparar la diferencia entre el control remoto real y la señal de Arduino.

Utilice un receptor IR y alcance los resultados de Arduino y el control remoto con los mismos datos enviados. O abra el control remoto y alcance las líneas directamente y compárelas con las líneas de conducción de datos de Arduino. Luego ajuste su código para que los dos sean idénticos. Como dice @mpflaga, el tiempo entre envíos es probablemente sospechoso.