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 información a UART. Cada entrada se define un código. Por ejemplo: si la entrada 1 está ACTIVADA, entonces los datos que se enviarán 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}
. De manera similar, la entrada número 24 está activada, luego 241
, si está desactivada, entonces 240
y lo mismo se aplica a todas las entradas.
Ahora los datos finales que se enviarán a través de UART contendrán información sobre todas las entradas:
10 20 30 41 50 61.....271 280 291 300
Como soy un 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;
e igual para completar 30 entradas. Ahora en 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
*/
luego de todas las declaraciones if, estoy comprobando si input1stat es verdadero y luego lo escribo, como a continuación:
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
Al final, solo estoy poniendo inputs
en UART:
putsUART1(inputs);
de modo que, como resultado, obtengo la cadena de datos anterior en UART. Pero el problema es que hay muchas otras declaraciones en mi código que hacen que el código sea ilegible. Creo que puede haber alguna otra forma de manejar esto. Como soy un principiante, no sé cómo eliminar todas estas afirmaciones si no. Cualquiera puede dar una demostración para eliminar todas las afirmaciones if else. Gracias.
EDIT
La entrada 1 y la entrada 2 no son más que PORTDbits.RD5
& %código%. Usé la entrada 1 y la entrada 2 solo para la demostración. He hecho los cambios.