Estoy haciendo un proyecto que tiene un tablero hecho a medida basado en PIC32 MCU
. Tiene 30 Inputs
y 10 Output
. Tengo que monitorear las entradas y enviar la información a la UART. Cada entrada tiene un código definido. Por ejemplo: si la entrada 1 está en ON, entonces los datos a enviar son 11
{'1'--> Input 1, '1' --> ON}
. Si la entrada 1 está en OFF, los datos a enviar son 10
{'1'--> Input 1, '0' --> OFF}
. Del mismo modo, si la entrada 24 está activada, entonces 241
si está apagado, entonces 240
y lo mismo ocurre con todas las entradas.
Ahora los datos finales que se enviarán por UART contendrán información sobre todas las entradas:
10 20 30 41 50 61.....271 280 291 300
Como soy principiante en programación, lo que he hecho para lograr la sintaxis anterior es que he definido variables para cada entrada.
char input1ON[] = "11";
char input1OFF[] = "10";
bool input1Stat = false;
char input2ON[] = "21";
char input2OFF[] = "20";
bool input2Stat = false;
y lo mismo para las 30 entradas completas. Ahora en la función principal:
if(PORTDbits.RD6 == 1) // if input1 is high
{
input1Stat = true; //make input1 status true
}
if(PORTDbits.RD6 == 0) //if input1 is low
{
input1Stat = false; //make input1 status false
}
if(PORTDbits.RD7 == 1) // if input2 is high
{
input2Stat = true; //make input2 status true
}
if(PORTDbits.RD7 == 0) //if input2 is low
{
input2Stat = false; //make input2 status false
}
/*
* same goes for rest of the inputs
*/
entonces después de todas las sentencias if, estoy comprobando si input1stat es verdadero y luego lo strcat, como abajo:
if(input1Stat == true) //if input 1 status is true
{
strcat(inputs,input1ON); //concatenate input1ON variable with inputs variable
}
else
strcat(inputs,input1OFF); //concatenate input1OFF variable with inputs variable
if(input2Stat == true) //if input 2 status is true
{
strcat(inputs,input2ON); //concatenate input2ON variable with inputs variable
}
else
strcat(inputs,input2OFF); //concatenate input2OFF variable with inputs variable
Así que al final sólo estoy poniendo inputs
a la UART:
putsUART1(inputs);
así que como resultado estoy recibiendo la cadena de datos de arriba en UART. Pero el problema es que hay muchas sentencias if else en mi código, lo que hace que el código sea ilegible. Creo que puede haber alguna otra manera de manejar esto. Como soy principiante, no sé cómo eliminar todas estas declaraciones if else. Alguien puede dar una demostración para eliminar todas las sentencias if else. Gracias.
EDITAR
La entrada 1 y la entrada 2 no son más que PORTDbits.RD5
& PORTDbits.RD6
. He utilizado la entrada 1 y la entrada 2 sólo para la demostración. He hecho los cambios.
0 votos
Sólo para aclarar, ¿se trata de C o C++? Ya que estás usando un tipo bool.
1 votos
@VicenteCunha bool es la norma C desde hace 17 años.
0 votos
@pipe Es justo, mi error. En C estoy acostumbrado sobre todo al estándar avr-libc, que no incluye un <stdbool.h>.
4 votos
Voto por cerrar esta pregunta como off-topic porque pertenece a stack overflow
0 votos
@scott SO considera la codificación de microcontroladores fuera de tema y la devolverá aquí.
2 votos
@Passerby Yo creo que se encargarán de las preguntas estándar c sin problemas.
0 votos
@Passerby ¿Existe una regla real del SO que diga que la programación de microcontroladores es off-topic?
0 votos
@dmitry sólo se basa en algunas migraciones que he visto.