Go Down

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

Rokiee

La mejor información al respecto, que yo he encontrado, esta en ESTA WEB

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.


surbyte

Bueno me gané un café.
Mira acá SDK VC-C4

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.


Rokiee

Bueno me gané un café.
Mira acá SDK VC-C4

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 !!!!!


noter

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.

surbyte

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.

Rokiee

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-

surbyte

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.

Rokiee

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. !!

noter

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.

Rokiee

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.


noter

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();

Rokiee

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 !


surbyte

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.


Rokiee

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.



surbyte

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.

Go Up