Estoy intentando enviar comandos a un Robosapien (primera generación) usando un LED IR conectado a un Arduino. He visto páginas web sobre cómo conectar un microcontrolador directamente al juguete, pero lo que quiero hacer es enviar comandos a través de IR.
Encontré un artículo de K. Smith que mencionó que los comandos de IR enviados por el control remoto Robosapien toman la siguiente forma:
Para enviar el código hexadecimal 85
:
La señal IRout se mantiene alta hasta que se envía una señal. Entonces una cadena de Se envían cinco ceros para indicar que se acerca un comando. Entonces el código hexadecimal se envía, pero en lugar de enviar un "1", se envía un "1110" y en lugar de se envía un ‘0’ a ‘10’. Entonces $ 85 se ve así:
Binary: 1 0 0 0 0 1 0 1
Robosapien: 1110 10 10 10 10 1110 10 1110
Así que probé el siguiente código:
int bitTime=833;
int IROut = 4;
// The setup() method runs once, when the sketch starts
void setup() {
// initialize the IR digital pin as an output:
pinMode(IROut, OUTPUT);
Serial.begin(9600);
}
void test()
{
// output high
digitalWrite(IROut,HIGH);
delay(1000);
// 5 zeros
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
digitalWrite(IROut,HIGH);
delayMicroseconds(bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
digitalWrite(IROut,HIGH);
delayMicroseconds(bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
digitalWrite(IROut,HIGH);
delayMicroseconds(bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
digitalWrite(IROut,HIGH);
delayMicroseconds(bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
// send 1110 10 10 10 1110 10 1110
// 1110
digitalWrite(IROut,HIGH);
delayMicroseconds(3*bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
// 10
digitalWrite(IROut,HIGH);
delayMicroseconds(bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
// 10
digitalWrite(IROut,HIGH);
delayMicroseconds(bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
// 10
digitalWrite(IROut,HIGH);
delayMicroseconds(bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
// 1110
digitalWrite(IROut,HIGH);
delayMicroseconds(3*bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
// 10
digitalWrite(IROut,HIGH);
delayMicroseconds(bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
// 1110
digitalWrite(IROut,HIGH);
delayMicroseconds(3*bitTime);
digitalWrite(IROut,LOW);
delayMicroseconds(bitTime);
// output high
digitalWrite(IROut,HIGH);
delay(1000);
}
void loop()
{
test();
}
Pero desafortunadamente no recibo ninguna respuesta de Robosapien. ¿Qué estoy haciendo mal?