Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

15/10/2016 #1

Avatar de Fuegomp3

Sentencias "if" sintaxis correctas?
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.
15/10/2016 #2

Avatar de cosmefulanito04

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)
15/10/2016 #3

Avatar de Fuegomp3

Gracias don Cosme Fulano
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.
15/10/2016 #4

Avatar de cosmefulanito04

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.
15/10/2016 #5

Avatar de Fuegomp3

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!
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.