Arduino Forum

International => Español => Software => Topic started by: Rokiee on Feb 05, 2015, 03:01 pm

Title: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 05, 2015, 03:01 pm
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.
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: surbyte on Feb 05, 2015, 05:00 pm
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.
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: Rokiee on Feb 05, 2015, 05:31 pm
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
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: Marcial on Feb 05, 2015, 06:03 pm
 :smiley-red:

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

void loop()
{
  for (long i=0xA8570000; i < 0xA857FFFF; i++)
  {
    Serial.println(i, HEX);
  }
}
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: noter on Feb 05, 2015, 11:01 pm
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 (http://techdocs.altium.com/display/FPGA/NEC+Infrared+Transmission+Protocol) resulta que al parecer reducimos bastante las posibilidades, ya que los cuatro bytes enviados corresponden a:


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);
}
}
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: surbyte on Feb 06, 2015, 01:05 pm
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.
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: Rokiee on Feb 06, 2015, 04:46 pm
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 (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 !

Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: surbyte on Feb 06, 2015, 06:34 pm
Mira a ver si esto te sirve link (http://www.doc-diy.net/photo/eos_ir_remote/)

y esto tal vez sea mejor. Canon Explorer VC-C4 (http://www.znak.fi/user/pdonner/canonvcc4explorer/)

Si no tienes ahi la solución no se donde...
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: Marcial on Feb 06, 2015, 06:47 pm
Sencillo y eficaz?
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: surbyte on Feb 06, 2015, 06:48 pm
tu diras.
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: Rokiee on Feb 06, 2015, 07:19 pm
Mira a ver si esto te sirve link (http://www.doc-diy.net/photo/eos_ir_remote/)

y esto tal vez sea mejor. Canon Explorer VC-C4 (http://www.znak.fi/user/pdonner/canonvcc4explorer/)

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.
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: surbyte on Feb 06, 2015, 07:27 pm
No abras nada nuevo, sigue aca asi se ve el hilo del tema. Si abres otro volveremos a discutir lo mismo.
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: surbyte on Feb 06, 2015, 07:34 pm
Bueno un par de buenos links
Este es un sitio de codigos IR (http://www.sbprojects.com/knowledge/ir/ir.htm), 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 (http://Decoding Pronto Hex for infrared device control)
Title: Re: Asesoramiento: Sketch para calcular posibilidades hexadecimales
Post by: Rokiee on Feb 06, 2015, 09:25 pm
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 !

Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: surbyte on Feb 06, 2015, 09:59 pm
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.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 06, 2015, 10:17 pm
La mejor información al respecto, que yo he encontrado, esta en ESTA WEB (http://www.remotecentral.com/features/irdisp1.htm)

La conversion manual esta sacada de lo que entendi en ella, pero algo falla. Quedé cerca, pero no veo el motivo. Lo mismo debería despejar un poco la mente para volver con otra perspectiva.

He publicado en un foro de esa web, a ver si alguien se apiada de mi cerebro xD.

Con el "rollo de arduino" al final uno aprende muchas cosas, aunque mi mujer cualquier día intente asesinarme !!!!

Efectivamente, pense en generar todos los códigos posibles, aunque es una locura.

Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: surbyte on Feb 06, 2015, 10:48 pm
Bueno me gané un café.
Mira acá SDK VC-C4 (http://www.usa.canon.com/cusa/support/consumer/security_video_solutions/analog_pan_tilt_zoom_cameras/vc_c4_vc_c4r#DriversAndSoftware)

Busca en Canon USA en driver/Software la última opción que dice SDK (software development Kit).
Vas a encontrar info código para Vbasic, para C, documentación y todos los códigos.

Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 06, 2015, 11:46 pm
Bueno me gané un café.
Mira acá SDK VC-C4 (http://www.usa.canon.com/cusa/support/consumer/security_video_solutions/analog_pan_tilt_zoom_cameras/vc_c4_vc_c4r#DriversAndSoftware)

Busca en Canon USA en driver/Software la última opción que dice SDK (software development Kit).
Vas a encontrar info código para Vbasic, para C, documentación y todos los códigos.


Sí amigo, el Café te lo has ganado hace mucho tiempo.

Había visto esa documentación, porque lo primero que hice fue mirar en la web del fabricante.

Sin embargo, es más probable de que aprenda chino a que sea capaz de asimilar todos los conceptos técnicos que hay en la documentación. Verdaderamente alguien con amplios conocimientos en la materia podría sacar mucha información de esa documentación, pero para un "mortal" creo que es imposible.

Ojalá en la documentación viniera el código de cada botón del mando, pero por desgracia, para mi es prácticamente incomprensible.

Por eso, creo que las vías de resolución siguen siendo las mismas:

1º.- Decodificar el formato PRONTO. (Parece que fuera oro líquido).
2º.- La locura de probar los códigos hex generados con el bucle for.
3º.- Comprar un mando con la finalidad de sacar los códigos y divulgarlos. (opción cada vez más cercana).

De todas formas, no puedo más que agradecerte tu interés.

Estoy a la espera de algunas respuestas, a ver si "suena la flauta".

Saludos !!!!!

Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: noter on Feb 07, 2015, 12:28 am
Hola, Rokiee.
¿Probaste con el código que te envié? Sólo son 256 códigos diferentes, pues los dos primeros bytes son fijos, y el último es el inverso del penúltimo.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: surbyte on Feb 07, 2015, 12:42 am
No sirve lo que encontre. Es para control remoto pero via serial.
No entiendo pq hay una parte del código que habla de SetIRremote, tambien hay unos códigos pero no son 0x8160 sino 0x6000.

Luego no encuentro código en C++ que controle un emisor IR.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 11:48 am
Hola, Rokiee.
¿Probaste con el código que te envié? Sólo son 256 códigos diferentes, pues los dos primeros bytes son fijos, y el último es el inverso del penúltimo.

Hola amigo!
Voy a intentar modificar el código, a ver los resultados.

He editado porque no lo leí bien, pero veo que lo que quiere hacer es invertir la los bytes con bitwise xor

Es buena idea, a ver que resultado da-
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: surbyte on Feb 07, 2015, 11:55 am
Pues acabas de dar la nota con ese comentario
Quote
Me han comentado una función llamada XOR que precisamente invierte un los bytes.
Si estas con algo complejo como lo que prentendes y dices eso, entoces los que del otro lado esperamos que tu aportes algo nos damos cuenta que no es el caso.
Te recomiendo que te pongas a estudiar un poco las operaciones booleanas que existen y como se usan.

Y el código de Noter es para que lo agregues a un sketch, por si solo claro que no compila.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 12:08 pm
Pues acabas de dar la nota con ese comentario
Si estas con algo complejo como lo que prentendes y dices eso, entoces los que del otro lado esperamos que tu aportes algo nos damos cuenta que no es el caso.
Te recomiendo que te pongas a estudiar un poco las operaciones booleanas que existen y como se usan.

Y el código de Noter es para que lo agregues a un sketch, por si solo claro que no compila.

Me di cuenta y he rectificado el post. Pensé que era el código completo, pero ya veo que NO.

Ahora vi que usó la función XOR, que justo estaba leyendo sobre ella, ya que nunca la he utilizado.

Voy a intentar modificar ese código y a ver que resultados obtengo.

Dios que rápido eres, no das tiempo ni de EDITAR, jajaja a. !!
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: noter on Feb 07, 2015, 12:29 pm
Hola.
Veo que lo necesitas "mascadito"  :smiley-roll-blue:

Code: [Select]

#include <IRremote.h>

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;
irsend.sendNEC(numero_prueba.code, 32);
Serial.println(numero_prueba.code,HEX);
while(!Serial.available());
}
}

void loop() {

}


Para avanzar al siguiente código, enviar lo que sea por serial.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 12:40 pm
Hola.
Veo que lo necesitas "mascadito"  :smiley-roll-blue:

Code: [Select]

#include <IRremote.h>

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;
irsend.sendNEC(numero_prueba.code, 32);
Serial.println(numero_prueba.code,HEX);
while(!Serial.available());
}
}

void loop() {

}


Para avanzar al siguiente código, enviar lo que sea por serial.
Pues estaba intentando modificarlo por mi mismo, pero he de reconocer que hay cosas en el código que me has puesto que aún no domino y están muy por encima de mis conocimientos, o lo estaban, jaja,  pero que no obstante, te lo agradezco enormemente porque no sé si conseguiré los códigos del dichoso mando para manejar la cámara, pero estoy aprendiendo muchísimo de muchas cosas en el intento y creo que esto es lo bueno de romperte la cabeza con algo, de acostarte con ello en la cabeza y levantarte igual. Desde luego, no escondo mi ignorancia porque nunca he pretendido ser un gurú, sólo un aprendiz de todo.

Tengo a mi hija de 6 meses sentada conmigo frente al portátil y ya la llamo: ARDUINA, así que fíjate...


PD: Te falta un IRsend irsend; JAJAJA.

Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: noter on Feb 07, 2015, 01:06 pm
No tengo ni la librería, así que sé que compilaba sin esas líneas, pero nada más :)
Por cierto, tal como está igual en cuanto envíes algo por serial ejecuta todos los códigos seguidos.
Pon tras el while(!Serial.available); un Serial.read(); o un Serial.flush();
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 01:56 pm
No tengo ni la librería, así que sé que compilaba sin esas líneas, pero nada más :)
Por cierto, tal como está igual en cuanto envíes algo por serial ejecuta todos los códigos seguidos.
Pon tras el while(!Serial.available); un Serial.read(); o un Serial.flush();
Cierto es lo del (!Serial.avaible); Le estaba dando vueltas ahora mismo para ver como solucionarlo.

Voy a empezar ahora a enviar a la cámara. Volveré con los resultados.

Gracias !

Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: surbyte on Feb 07, 2015, 03:02 pm
Amigo, ponerse con semejante tarea con tantas dudas exige que hagas un STOP y retomes mas tarde.
Ponte a estudiar cosas mas básicas, domínalas yluego vuelve con energia al proyecto, porque tienes muchas dudas y eso te esta deteniendo.
Yo que tu, probaría con comunicaciones seriales, probaría con IRremote, y algun control de TV y luego encararía de nuevo esto. No sin antes pasar por las funciones booleanas.

Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 04:19 pm
Bueno, creo que el código de NOTER ha empezado a dar resultados. ¡¡¡¡¡ GRACIAS !!!!!
He encontrado 2 códigos, pero he pausado el sketch por el siguiente motivo.

Cuando había probado 40 de los 256 códigos, da la casualidad que ese código correspondía a "entrar en el menú."

Si entro en el menú, es posible que determinados códigos ya no funcionen por estar deshabitados en el menú.

He podido tirar de mi escasa inteligencia, para darme cuenta que si quería evitar el código nº40, debía empezar a el bucle for precisamente por ese número.

Es decir; for (unsigned n>40; n<256; n++){

Sé que no es muy elegante, aunque funciona.

Os pregunto:

¿Cómo podría excluir determinados códigos hexadecimales conocidos, que no me interesaría que se enviaran en un momento determinado?

He pensado que podría meter en un array los códigos conocidos.

Por ejemplo, imaginemos que el número hexadecimal que está en la posición 40 del bucle for (0->255) es 8160D827 y quiero que en la ejecución, cuando llegue a ese número, lo omita y continue por el siguiente.

Debería cambiar el bucle FOR por un "WHILE o IF" ?

Voy a necesitar excluir determinados códigos una vez que sean conocidos, para conseguir encontrar el resto.


Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: surbyte on Feb 07, 2015, 04:41 pm
En la página 15 de este manual que muestra los códigos para la conexión serie aparece MENU.
Intenta ver si hay correlación en lo que descubriste y los que aparezcan a continuación.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: noter on Feb 07, 2015, 05:16 pm
Puedes poner un switch case dentro del for, y dejar la ejecución "normal" dentro de default:

Code: [Select]


for(unsigned n=0; n<256; n++){
switch n {
             case 0x25:
             case 0x88:
             // de la misma forma todos los códigos a excluir: case n:
           
             break;
             default:
                {
numero_prueba.cifra[0] = (byte)n;
numero_prueba.cifra[1] = (byte)~n;
irsend.sendNEC(numero_prueba.code, 32);
Serial.println(numero_prueba.code,HEX);
while(!Serial.available());
                }
}


Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 05:58 pm
De momento he encontrado muchos códigos:

He encontrado:

APAGAR/ENCENDER
ENFOCAR/DESENFOCAR
MOVIMIENTOS (tengo que ver cuales concretamente)
ENTRADA MENU
SALIDA MENU
BRILLO
REGRESO DE CAMARA A CENTRO (cuando la has movido y quieres llevarla a su lugar original).

Me ha costado la misma vida llegar a meter el IF dentro del FOR:

if (numero_prueba.code,HEX != 0x8160F00F || numero_prueba.code,HEX != 0x816028D7)

He sudado tinta con la (,HEX)

surbyte, lo que puede parecer evidente a mi me supone exprimirme el cerebro, pero así aprendo.

De esa forma voy a evitar que cuando llegue a los códigos de encender y apagar, los lance a la cámara y así puedo seguir viendo todos los códigos. Luego lo cambiaré para que cuando entre en el menú, ya no salga y así ver todas las opciones del menú.


Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 06:00 pm
Noter , me he exprimido para conseguir averiguar lo del IF, pero veo que con el SWITCH también era posible.

Creo que tendría que invitaros a unas cañas por Madrid.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 06:17 pm
Vale, no entró en menú pero se apagó la cámara.

La condición OR (||) ha hecho su función, mi cabeza no.

La cambio por AND (&&) para que ni entre en menú ni se apague.

Vaya tarde !!

Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 06:39 pm
Puedes poner un switch case dentro del for, y dejar la ejecución "normal" dentro de default:

Code: [Select]


for(unsigned n=0; n<256; n++){
switch n {
             case 0x25:
             case 0x88:
             // de la misma forma todos los códigos a excluir: case n:
           
             break;
             default:
                {
numero_prueba.cifra[0] = (byte)n;
numero_prueba.cifra[1] = (byte)~n;
irsend.sendNEC(numero_prueba.code, 32);
Serial.println(numero_prueba.code,HEX);
while(!Serial.available());
                }
}



Vale me mudo definitivamente al switch case, porque con el IF, si le meto más de dos && el tercero ya no lo comprueba.

 if (numero_prueba.code,HEX != 0x8160F00F && numero_prueba.code,HEX != 0x816028D7 && numero_prueba.code,HEX != 0x8160D827) {

Cuando llega a 0x8160D827 me apaga la cámara.

Se ve que sólo comprueba entre 2 condiciones.

Me mudo al SWITCH CASE.

Esto cada vez engancha más !!
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: surbyte on Feb 07, 2015, 06:45 pm
ve poniendo los codigos que descubres a ver si tienen un patrón
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: noter on Feb 07, 2015, 07:58 pm
En los case sólo pon dos dígitos hexadecimales. La penúltima pareja del comando.
Ejemplo: 0x8160D827
Solo pon 0xD8
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 09:21 pm
Surbyte , ahora mismo tengo los códigos con los que ha reaccionado la cámara, algunos se ve claramente (ej. Movimientos, zoom) pero no estoy seguro de si han reaccionado levemente o no.

Como he evitado entrar en el menú, hay códigos que todavía me faltan , como por ejemplo, aquellos de arriba, abajo , izquierda y derecha dentro del menú.

Ahora voy a iniciar la fase 2, que va a ser modificar el Sketch, creando un array que contenga todos los códigos encontrados. Luego, cuando agraces del serial monitor introduzco la posición del array para que envíe ese código a la cámara. Así puefo enviarlo manualmente cuantas veces quiera y comprobar que dicho código hace exactamente lo que se supone.

De esa forma, tendré claro a que se corresponden.

He notado una cosa, y es que parece que las posiciones inversas (EJ. 81601EA5 y 8160A51E) en algún caso han reaccionado similar.

Cuando acabe la fase 2, volveré al Sketch anterior, omitiendo los codigos conocidos , accediendo al menú, e intentando averiguar los códigos que funcionen en el menú, para así tenerlos todos. Hay que tener en cuenta que el mando tiene números 0-9 y esos todavía no los he encontrado porque no he actuado dentro del menú.

Noter, gracias por el consejo de los case, ahora mismo había metido el hexadecimal entero, solo eran 3, pero con lo que pretendo hacer esa forma me simplificará mucho la tarea.

Si descubrimos la totalidad, seremos los primeros en internet en dejar el WL-V5 al descubierto y en hexadecimal.

Habrá créditos para todos, jajaja.


Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: surbyte on Feb 07, 2015, 10:39 pm
Serás tu con ayuda de Noter
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 07, 2015, 11:34 pm
Serás tu con ayuda de Noter
Tú por lo menos has estado aquí, te has molestado en buscarme mucha información, echarme alguna que otra bronca, y acompañarme en este viaje. Así que estoy muy agradecido.

Pero tranquilo que esto no ha acabado, jaja.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: noter on Feb 07, 2015, 11:45 pm
Lo que dices sobre que la cámara reacciona igual a los comandos inversos no es descabellado (tiene cierta explicación "lógica"), y reduciría el número de opciones a buscar de 0 a 127 (la mitad), aunque tal vez exista la posibilidad de que se reciba mejor con el número "alto" (>7F) en primer o segundo lugar. Además, también es muy probable que los códigos válidos sean consecutivos, así que busca concienzudamente por los "alrededores" de los códigos que halles.
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 08, 2015, 12:33 am
noter, perdona que te de la brasa.

Estoy un poco rallado intentando hacer una cosa, aunque tal vez mi planteamiento no sea el correcto.

Quiero meter en un ARRAY todos los códigos que sé que funcionan y los que "puede que funcionen"

La finalidad es que cuando meta un número a través del serial monitor, el Sketch coja el valor del número introducido, lo guarde en una variable, y luego lance la función IRSEND, llamando al array y cogiendo el código de dentro de sus valores y que corresponda al número introducido por el serial monitor.

Lo que quiero es poder probar de una forma fácil y cuantas veces quiera, cada uno de los códigos. Es decir, simular el mando, pero desde el serial monitor.

Tengo varios problemas por mi novatez con la programación.

- ¿Puedo crear un array ´unsigned long´ con los códigos hexadecimales directamente o por el contrario debo convertirlo a binario y almacenarlo en un array de tipo int para luego convertir su valor en otra variable?

unsigned long codigos[32]{HEX1, HEX2, HEX3,......};


- una vez que asocio a una variable el valor introducido por el serial monitor (resultado=serial.read() ) Se podría utilizar irsend.sendNEC(códigos[resultado], 32); ??????

Hay unas cosas en el código que me dijistes que no entiendo, no sé si tienes tiempo y ganas para explicarmelas.

Mira, este es mi Sketch con tu código:

#include <IRremote.h>

IRsend irsend;
#define LED 3
// #define REPEAT_TX  5

void setup() {
   union {                  <-- ¿Es esto una función llamada union? Veo que dentro creas el array, cifra de 4 elementos, pero nunca llamas a esta funcion. No entiendo el motivo de meterlo dentro de union si podría ir sin llaves directamente.
      byte cifra[4];
      unsigned long code; // Prefijamos los cuatro primeros dígitos (dos bytes)
   }
        numero_prueba;
   numero_prueba.code=0x81600000; El .code que hace exactamente? es otra variable o le pasa algún dato a la variable anterior?
   Serial.begin(9600);
   for(unsigned n=0; n<256; n++) {
        numero_prueba.cifra[0] = (byte)n; Aquí me pasa igual, me gustaría comprender exactamente la teoría del " . ".
   numero_prueba.cifra[1] = (byte)~n;
        unsigned n = numero_prueba.code;
          switch (n) {
            case 0x8160D728:
              break;
            case 0x8160D827:
               break;
            case 0x816028D7:
               break;
            default:
   irsend.sendNEC(numero_prueba.code, 32);
        irsend.sendNEC(numero_prueba.code, 32);
        delay(500);
        irsend.sendNEC(numero_prueba.code, 32);
        irsend.sendNEC(numero_prueba.code, 32);
        delay(500);
        irsend.sendNEC(numero_prueba.code, 32);
        irsend.sendNEC(numero_prueba.code, 32);
        Serial.println(numero_prueba.code,HEX);
        while(!Serial.available());
        Serial.read();
               

 
 }
}
}

void loop() {
}



Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: noter on Feb 08, 2015, 01:47 am
Bueno. Vamos por partes.

Un unsigned long (y cualquier tipo numérico) se almacena de igual forma en la memoria del arduino, independientemente de la forma en que se lo proporciones. Resumiendo: nosotros se lo podemos proporcionar al compilador de la forma que nos resulte más cómoda, pero el número es el mismo si decimos
unsigned long pepe = 0xFFFF que si decimos unsigned long pepe = 65535. El decimal, octal o hexadecimal son formas cómodas de expresar números para nosotros, pero el arduino realmente trabaja en binario.
Retomando tu pregunta, claro que puedes crear un array de unsigned long y asignarle directamente los códigos en hexadecimal. No obstante, tal como te dije, todos los códigos se pueden "resumir" en un solo byte, pues los dos primeros son fijos (id de dispositivo) y el último se puede calcular a partir del penúltimo (o viceversa). Así que yo utilizaría un array de bytes y construiría el número completo antes de enviar. Incluso sería factible enviar el byte de comando en hexadecimal (dos caracteres) o en decimal (tres caracteres) por puerto serie.

En cuanto a las preguntas sobre union, deberías echar un vistazo a algún manual de C/C++ y leer sobre las estructuras y uniones. Como resumen, te digo que una unión es una forma de hacer referencia a un espacio de memoria entendiéndolo como distinto tipo de variable. En este caso, puedo entenderlo como un unsigned long o como un array de cuatro bytes, y así puedo hacer referencia al unsigned int (numero_prueba.code) o a cualquiera de los cuatro bytes que lo componen (numero_prueba.cifra[0-3]).
Title: Re: Sketch para calcular posibilidades hexadecimales. PRONTO ->HEX. IR Remote CANON WL-V5
Post by: Rokiee on Feb 09, 2015, 10:25 pm
Gracias noter. Ya he conseguido hacer el sketch para ir probando todos los códigos conseguidos hasta ahora.

Cuando tenga resultados, iré publicando para que quede en este post como historia.

Respecto al tema de union, volveré a revisarlo todo porque claro no me queda, pero por ahora, sigo con mi Sketch que ya me queda poquito.

Saludos y mil gracias!