Go Down

Topic: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5 (Read 8739 times) previous topic - next topic

Rokiee

Hola amigos,

Me gustaría que me dierais ideas para ayudarme a hacer un cálculo de posibilidades numéricas.
Lo cierto es que estoy empezando con la programación y aunque me voy manejando, no tengo base de programación para saber como hacer un sketch como el que os describo a continuación.

En concreto tengo que calcular todas las combinaciones hexadecimales posibles partiendo del prefijo:

8160

Os pongo un poco en sintonía con el proyecto:

Estoy intentando conseguir todas las frecuencias hexadecimales posibles que funcionen con una cámara de video de la cual no tengo el mando a distancia, para clonarlo con arduino.

De momento sé una combinación hexadecimal que funciona, la cual es 8160A857.

Según el asesoramiento que he recibido, el resto de combinaciones posibles deben empezar todas por 8160, desconociendo lo restante. Es decir, lo que tengo es que averiguar las combinaciones posibles que puedan darse en hexadecimal a partir de 8160.

Si os dais cuenta,  la combinación anterior 8160A857 está compuesta por:

La parte fija: 8160
La parte variable en este caso es: A857

Lo que pretendo es automatizar un sketch que haga lo siguiente:

1º.- Calcular las combinaciones HEXADECIMALES posibles a partir del prefijo conocido: A857.
2º.- Envíe cada una de la combinación encontrada a través  irsend.sendNEC(HEX, 32), al monitor serial,  con un delay que me permita apuntarla en caso de que funcione.

Con ello, y observando la cámara, podría averiguar que combinaciones funcionan en la cámara a la vez que veo su opción en la cámara conectada a la TV.

Bueno, a ver que se os ocurre, porque la idea es esa, materializarla es lo que no encuentro la forma.

Saludos.

EDITO: Para decir que el tema de calcular las posiciones HEXADECIMALES se ha solucionado (bendito bucle FOR), pero sigo intentando convertir unos códigos en formato PRONTO a HEXADECIMAL, para clonar un mando (compleja conversión por lo que parece). No obstante, gracias a todos los intervinientes.

surbyte

Amigo aunque lo has explicado muy bien yo no te entiendo y no es novedad.
Lo primero que me viene a la mente es que no se lo que significa una combinatoria en A857
Quieres armar todas las posibles formas de reubicar A857?


Si tomas cada numero como un caracter puedes usar una serie de ciclos for-to que van de la posición 0 a la 3 (de A a 7) anidados donde el segundo for-to vaya desde el 1er caracter al 3ro., el 2er for-to va desde el 2do caracter al 3ro

No se si esta bien, pero es lo primero que se me ocurre.

Rokiee

Siento no haber sido claro.
Estoy hablando de un numero hexadecimal de 32 bits.

16 bits primeros son conocidos 8160, los otros 16 son los que habría que calcular, con números/letras hexadecimales 0-9/A-F

Es decir, tengo 8160xxxx

Xxxx = 4 dígitos en total desconocidos que hay que calcular

Marcial

 :smiley-red:

Quote
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  for (long i=0xA8570000; i < 0xA857FFFF; i++)
  {
    Serial.println(i, HEX);
  }
}

noter

Hola.
Sería interesante que pusieras el modelo de cámara, por si hubiera por ahí información de qué protocolo y comandos ir utiliza.
Dices que con protocolo NEC te funciona un comando. Si realmente utiliza dicho protocolo, nos quedan 2 bytes para el comando, lo que nos da 65536 posibles comandos, que iba a ser complicado testar uno por uno. Realizando una somera búsqueda del protocolo nec resulta que al parecer reducimos bastante las posibilidades, ya que los cuatro bytes enviados corresponden a:
  • byte de dirección
  • inverso del byte de dirección
  • byte de comando
  • inverso del byte de comando


El comando que dices que funciona, no cumple con el primer requisito (el primer y segundo byte no son inversos), pero sí que cumple el segundo. Puede ser que en tu protocolo no sea así, o que sencillamente no lo comprueba y toma sólo una de las cifras. Prueba a ver si te funciona de la misma forma el comando
817EA857 o el 9F60A857. Si te funciona una de esas combinaciones, entonces deja como fijas las cuatro primeras cifras del código que te funcione. Si el comando va con dos bytes inversos, la buena noticia es que sólo hay que probar 256 códigos.

Intenta este código (puedes cambiar las cuatro primeras cifras, si te funciona una de las dos que te propuse) y agrega la línea para enviar numero_prueba.code al infrarrojo, y si quieres un delay.

Code: [Select]

void setup() {
union {
byte cifra[4];
unsigned long code; // Prefijamos los cuatro primeros dígitos (dos bytes)
} numero_prueba;
numero_prueba.code=0xA8570000;
Serial.begin(9600);
for(unsigned n=0; n<256; n++){
numero_prueba.cifra[0] = (byte)n;
numero_prueba.cifra[1] = (byte)~n;
Serial.println(numero_prueba.code,HEX);
}
}

surbyte

Rokiee yo entiendo que no me conoces pero mira cuantos post tengo? +2000 o sea algo sea de electrónica y programación y se tambien cuando un número es de 16 bits o 32 bits.

Tu digiste combinatoria. No lo dije yo.
Si quieres hacer un contador desde algo 0x0000 o 0xA857incluyendo tu número hasta 0xFFFF bien..
pero dijiste combinatoria te lo recalco y mi pregunta fue justamente como interprestas tu la combinatoria porque pueden ser permutaciones, de todas formas yo solo queria decirte el tiempo que te va a llevar hacer eso.. o tienes suerte y ocurre rápido o te vas a pegar una buena tarde viendo cambios.

No es la manera me parece y no entiendo como no puedes leer el código usando otro emisor del mismo protocolo para leer con IRremote tu código.

Rokiee

Marcial, muchas gracias por tu respuesta. ¡¡ Tan sencillo como un for !! Gracias !

surbyte, siento que no me haya explicado correctamente y eso te haya confundido. Saludos.

noter, tu respuesta ha sido muy valiosa, por lo que voy a explicar con detalle (espero no equivocarme con palabras que puedan llevar a dudas, xD).

Lo primero indicar que me han regalado una cámara CANON VC-C4 de la cual no tengo el mando a distancia, que es el WL-V5. Dicha cámara permite ser accionada con el mando, pudiendo enfocar, hacer zoom, y moverse en el eje X e Y.

Lo cierto es que la cámara estaba en la basura y ha sido rescatada. Lo que pretendo es poder utilizarla y a la vez, poder construir un proyecto con arduino para que envíe los códigos del mando a la cámara.

Para ello, lo primero que hice, fué intentar localizar los códigos de dicho mando, algo que fué imposible por más que busque con el santo google.

Sin embargo, he conseguido encontrar en la página REMOTECENTRAL unos códigos que parecen funcionar. En concreto, pone que son para el modelo anterior de la cámara, es decir, la VC-C3. Sin embargo, en esa web se ofrecen los mismos códigos para la VC-C3 que para la mía, la VC-C4.

Bueno, ahora comienzan los problemas:

1º.- Tengo un total de 32 códigos, que corresponden a las diferentes funciones del mando. Los códigos, según he podido saber, están en un formato llamado PRONTO. Ese formato ha de ser convertido a HEXADECIMAL para ser enviados a la cámara. Esto me supone un gran problema, hay un compañero en el foro internacional que sabe hacerlo y tengo abierto un post donde me está dando unas pistas. Sin embargo, el proceso que he llevado a cabo, no ha sido exitoso. RESUMEN: No puedo convertir los códigos PRONTO en HEXADEMIMAL.

Adjunto al presente un PDF donde vienen los 32 códigos de los que hablo.


2º.- Anteriormente comenté que el protocolo de comunicación era de NEC. Eso me dijo el compañero de internacional. De hecho, los códigos los envío con la librería IRremote.h mediante la instrucción: irsend.sendNEC(HEX,32).

No sé si alguien me podrá ayudar, pero lo que más prisa me corre sin duda es poder convertir los códigos en formato pronto a hexadecimal para poder probar que efectivamente los códigos funcionan. Si cabe decir, que el amigo del internacional me ha convertido algunos, y al probarlos veo que la cámara se activa y hace algún movimiento, por lo que creo que son compatibles.

Por cierto, el post de la conversión de PRONTO a HEX lo publiqué en http://forum.arduino.cc/index.php?topic=297552.0 y hay un user que controla bastante, pero aún no me ha respondido cual puede ser el problema de conversión manual que tengo.

Saludos y perdón por el tocho de texto !


surbyte

Mira a ver si esto te sirve link

y esto tal vez sea mejor. Canon Explorer VC-C4

Si no tienes ahi la solución no se donde...


surbyte


Rokiee

Mira a ver si esto te sirve link

y esto tal vez sea mejor. Canon Explorer VC-C4

Si no tienes ahi la solución no se donde...
Gracias por los enlaces surbyte.
El programa de control remoto ya lo había visto, pero hay que conectar la cámara por Puerto RS232 al PC.
Verdaderamente lo que busco son las frecuencias del control remoto, para poder usar la cámara sin pc, por ejemplo,conectada a un DVR o directamente a la TV.

Mirare el archivo hex del primer link a ver si esos códigos pueden ser aprovechados, ya que estoy desde el movil y no puedo leer bien,aunque sigo en la búsqueda del Santo grial convertir los códigos que tengo. No se si abrir un post nuevo con un título sobre convertir formato PRONTO a HEXADECIMAL, porque este era sobre generar unos códigos y esta solucionado con el bucle for.

surbyte

No abras nada nuevo, sigue aca asi se ve el hilo del tema. Si abres otro volveremos a discutir lo mismo.

surbyte

Bueno un par de buenos links
Este es un sitio de codigos IR, tal vez te responda alguien en el foro y como vi que domnas bien inglés no tendrás probleamas


Este otro es una supuesta decodificación de Protocolo Pronto

Rokiee

Muchas gracias surbyte por las molestias que te has tomado buscando información para ayudarme con mi tarea.
Voy a leer con detenimiento los enlaces que me has propuesto a ver si consigo sacar algo en claro.

A ver si el compañero noter se pronuncia sobre este tema, que parece que tenía conocimientos al respecto.

Realice un método manual que para la conversión, y aunque quedé cerca, no lo suficiente como para conseguirlo.

Lo último sería comprar el mando, pero esa solución es para los cobardes.

Seguimos en la brecha !


surbyte

Lo mejor es comprender como trabaja el código PRONTO, cuando lo comprendes reproducirlo es una tarea lograble.
Del modo que intentabas hacerlo para mi, es trabajar a ciegas. Generar cuantos posibles códigos y detectar el que funciona? No va, pero lo dejaría como último recurso.

Go Up