Sentencias "if" sintaxis correctas?

#1
Hola, vengo hace un buen tiempo tratando de armar una controladora USB HID, y sin saber programacion en C, usando el CCS y codigos que fui juntando termine armando algo que funciona, una interface 8 canales analogicos, 32 botones y 64 leds.

Ahora, esta interface manda constantemente paquetes al usb, aunque no se modifique valor alguno, y quisiera evitar esto, asi que escribí este codigo, en donde:

Las variables serian:
"ejex" analogicos
"ejexa" valores analogicos anteriores para comparacion
"Btnxax" botones

Código:
int8 Eje1=0;
int8 Eje2=0;
int8 Eje3=0;
int8 Eje4=0;
int8 Eje5=0;
int8 Eje6=0;
int8 Eje7=0;
int8 Eje8=0;

int8 Btn1a8=0;
int8 Btn9a16=0;   
int8 Btn17a24=0;  
int8 Btn25a32=0;  

int8 Eje1a=0;
int8 Eje2a=0;
int8 Eje3a=0;
int8 Eje4a=0;
int8 Eje5a=0;
int8 Eje6a=0;
int8 Eje7a=0;
int8 Eje8a=0;


 if(usb_enumerated())             
            { 
               if(eje1 != eje1a)
                 { txusb[4]=eje1;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(eje2 != eje2a)
                 { txusb[5]=eje2;
                      usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(eje3 != eje3a)
                 { txusb[6]=eje3;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(eje4 != eje4a)
                 { txusb[7]=eje4;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(eje5 != eje5a)
                 { txusb[8]=eje5;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(eje6 != eje6a)
                 { txusb[9]=eje6;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(eje7 != eje7a) 
                 { txusb[10]=eje7;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(eje8 != eje8a)
                 { txusb[11]=eje8;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(Btn1a8 != 0)
                 { txusb[12]=Btn1a8;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(Btn9a16 != 0)
                 { txusb[13]=Btn9a16;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(Btn17a24 != 0)
                 { txusb[14]=Btn17a24;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 }
               if(Btn25a32 != 0)
                 { txusb[15]=Btn25a32;
                     usb_put_packet(  1, txusb, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
                 } 
                     delay_us(10);
              }
                     eje1a=eje1;
                     eje2a=eje2;
                     eje3a=eje3;
                     eje4a=eje4;
                     eje5a=eje5;
                     eje6a=eje6;
                     eje7a=eje7;
                     eje8a=eje8;
            
            
 
    }
Seria algo asi:
Si eje1 es distinto a eje1a, cargo la variable TXusb con el valor de eje1 y envio el paquete al USB, si el eje1 es igual a eje1a, sigo de largo.

Con los botones es lo mismo, si no hay alguno pulsado, sigue, si hay alguno pulsado, envio ese valor al usb.

MI consulta es, estan bien las sintaxis de los "if"?

Si es necesario el codigo completo lo subo.

Gracias de antemano.
 
#2
Como anda amigo fuego, lo saludo elpelikano de Btarg.

Están bien las sentencias.

En 1er caso, si eje1 es distinto a eje1a, entonces txusb[4]=eje1

Código:
if(eje1 != eje1a)
eje1 distinto a eje1a.

Código:
if(eje1 == eje1a)
eje1 igual a eje1a.

....

Código:
if(Btn17a24 != 0)
Btn17a24 distinto de 0. O que es lo mismo => if(Btn17a24)
 
#3
Gracias don Cosme Fulano :D
Entonces lo dejo asi como esta, una duda que tengo, si la sentencia es afirmativa, se ejecuta lo que esta dentro de los corchetes siguientes, y si no, sigue a la siguiente, es la duda que tengo, si el lo que se ejecuta va dentro de corchetes como lo puse yo, o de otro modo.
 
#4
Efectivamente eso es lo que sucede, todo lo que está dentro de la llave se ejecuta si se cumple la condición dentro del if. Entonces resumiendo:

Código:
                if(eje1 != eje1a)
                 { 
                    //Código 1
                 }

               if(eje2 != eje2a)
                 { 
                    //Código 2
                 }
1- Si eje1 es distinto a eje1a, entonces se ejecuta "Código 1", de lo contrario sigue.
2- Una vez que termina de ejecutar "Código 1" o no (según el if anterior), sigue al siguiente if => Si eje2 es distinto a eje2a, entonces se ejecuta "Código 2", de lo contrario sigue.

Aclaración: hay veces que necesitás saber si se cumple o no se cumple, en esas situaciones se usa el término "else":

Código:
                if(eje1 != eje1a)
                 { 
                    //Código 1
                 }
                 else
                 {
                    //Código 2
                 }
En este caso, si eje1 es distinto a eje1a, entonces se ejecuta "Código 1", pero si son iguales, entonces se ejecuta el "Código 2". El flujo del programa en este caso es distinto al anterior, ya que se ejecuta un "Código 2" en caso negativo, en cambio en tú código en caso negativo no se ejecuta nada.
 
#5
Perfecto!!! entonces lo dejo como está, porque justamente la idea era que se ejecuten la menor cantidad de envios posibles, es decir, si no toco nada, no mandar paquetes al pepe.

En cuanto termine el PCB, hago las pruebas a ver si todo junto funciona como quiero.

Gracias Pelikano!
 

Temas similares

Arriba