Programación Específica > Microcontroladores MOTOROLA
Problemilla Con Código
infrarrojo:
Hola a tod@s. Estoy haciendo un código en c++ para un microcontrolador HC08, el QT4 exactamente. En concreto es para un mando universal, y quiero que, según sea el valor en una entrada analógica, que en el programa es "tecla", la variable "comando" adopte uno u otro valor. Ahora mismo lo estoy haciendo sólo para dos botones, pero la variable comando siempre está en el mismo valor, es decir, no adquiere el valor de las otras según la condición. El código es éste:
extern byte err; // Incluye la variable "err" utilizada en Events.c
int i=0;
int j=0;
int k=0;
bool comando[13] ;
bool comandoOn[13] = {1,0,1,0,1,0,0,1,0,0,0,0,0};
bool comandoVolmas[13] = {0,1,0,0,1,0,0,1,0,0,0,0,0};
static byte tecla[1]; /* Número de canales */
void main(void)
{
(void)PPG1_Disable(); /* disable the bean */
for(;;){
for(;;){
err = AD1_Measure (TRUE); /* Lee el valor */
err = AD1_GetValue((byte *)tecla);
if (tecla[0] > 25 && tecla[0] <63) comando[13] == comandoOn[13]; /* Selecciona on */
if (tecla[0] > 63) comando[13] == comandoVolmas[13];
if (tecla[0] > 25) break; /* Compara el valor y si es mayor de 25 empieza a emitir el código
}
Ahora vendría el código para emitir la trama, eso lo hace bien, pero emite siempre 12 ceros, en lugar de uno de los dos códigos (la tecla On o la de subir volumen).
¿Hay algún error en el código? ¿Se podría hacer de otra forma? Gracias de antemano por vuestros comentarios. Saludos.
fa61an:
Sinceramente creo que hace falta mas explicación de tu parte sobre lo que estas haciendo si quieres ayuda, yo llevo poco tiempo programando en lenguaje C pero por lo que veo esta linea esta como rara
if (tecla[0] > 25 && tecla[0] <63) comando[13] == comandoOn[13];
si la condición llega a ser verdadera vuelve y haces otra pregunta, me explico esta linea es una pregunta y no una asignación.
comando[13] == comandoOn[13];
corrígeme si me equivoco.
fa61an:
y otra cosa de que me doy cuenta siempre esta direccionando comandoOn[13] y en esta posicion tu array siempre vale 0 a menos asi se ve en la inicializacion, a no ser de que se lo estes cambiando en el archivo events.c
infrarrojo:
Hola Fa61an, te explico un poco más lo que estoy haciendo. La programación es para un mando universal. He cogido un osciloscopio y he visto la señal de un mando Sony, y son doce bits, los cuales los puedes ver en la secuencia de comandoOn por ejemplo, que sería {1,0,1,0,1,0,0,1,0,0,0,0,0} es decir, al pulsar la tecla on del mando original sony sale esa trama. Ahora yo quiero que mi variable comando, si el valor de un potenciómetro (que es tecla) es mayor de 25 y menor de 63, tome el valor de esa trama, es decir, al poner comando[13] == comandoOn[13] lo que quiero es que la variable comando pase a valer lo que vale comandoOn, no sé si se entiende, creo que no se hace así exactamente pero es que estoy empezando a programar en C y ahora mismo tengo dudas, así que es probable que esté mal. Si por el contrario el potenciómetro vale más de 63, la trama que quiero que envíe es comandoVolmas, esto es porque más adelante pondré una serie de botones y según el botón que pulses, la entrada analógica tomará un valor u otro, por ejemplo entre 25 y 63 será la tecla On, por eso pongo if (tecla[0] > 25 && tecla[0] <63) comando[13] == comandoOn[13];
Ahora mismo lo estoy simulando con un potenciómetro para que me sea más fácil probar si está saliendo bien. Lo aumento un poco y voy viendo en el osciloscopio si verdaderamente cambia la trama, que ahora mismo no lo hace, siempre salen doce ceros en lugar de 1,0,1,0,1,0,0,1,0,0,0,0,0 por ejemplo que es la tecla On. Bueno espero que se haya aclarado un poco, si tienes más dudas me lo preguntas, yo creo que la clave está en ese doble igual, lo que quiero es que comando tome el valor de comandoOn, y será otro operador el que tengo que poner. Gracias por tu respuesta.
lalo_soft:
--- Citar ---tome el valor de esa trama, es decir, al poner comando[13] == comandoOn[13] lo que quiero es que la variable comando pase a valer lo que vale comandoOn, no sé si se entiende
--- Fin de la cita ---
Te entiendo perfectamente, pero estas en un error.
a == b no es la manera en que C o C++ copia valores de una variable a otra la forma correcta es.
a=b;
Por tanto
--- Citar ---if (tecla[0] > 25 && tecla[0] <63) comando[13] == comandoOn[13];
--- Fin de la cita ---
Esto es mal formulado
Se hace asi:
if (tecla[0] > 25 && tecla[0] <63)
{
comando[13] = comandoOn[13];
}
las llaves son optativas si quieres agregar mas lineas de codigo dentro del if(...)
Otra cosa, por que eliges el elemento [13] del arreglo lo que tambien te dara errores de ejecucion ya que un arreglo tipo bool xxx[13] tiene un rango de elementos que va de xxx[0]- xxx[12] como ves el primer elemento del array es [0] y no [1] como parece que crees ,ademas que en el fondo cada elemento que asignas como Bool en la practica para el compilador es un byte y lo trata como tal, asi que estas gastando mas memoria ram del micro y haciendo el codigo mas pesado de lo que crees.Te aconsejo repasar mejor los fundamentos del lenguaje C para no seguir dando tropiezos en cosas basicas que solo provoca atraso en tu proyecto.
Navegación
[#] Página Siguiente
Ir a la versión completa