Estructuras de Control en Arduino

Estructuras de control

No importa qué tipo de lenguajes de programación estés usando, por ejemplo C/C++, Visual Basic, PHP, etc., siempre hay algunos caminos lógicos con los que quieres que tu software decida cómo debe reaccionar basándose en ciertos criterios. Aquí es donde se necesita una estructura de control.

Puedes hacer tus programas de Arduino más flexibles aprendiendo a usar las estructuras de control del lenguaje Arduino. Para escribir códigos de tus programas se necesita un mínimo conocimiento del lenguaje C. De hecho, Arduino utiliza un lenguaje de programación C para la compilación de los scketchs. Algunas construcciones son particulares del lenguaje Arduino, como la escritura de los pines de E/S.

Este artículo trata de proporcionar una base sobre las estructuras y la sintaxis de la programación de Arduino. Ilustrará la estructura básica del raspado, las funciones, las estructuras de control de flujo como «si», «si no», «para», «mientras» y «mientras» y las variables y sus posibles tipos, como los puntos flotantes (números de coma) o los bytes (números de 8 bits).

Las estructuras de control de un lenguaje de programación le permiten tomar acciones basadas en ciertas condiciones. Las estructuras de control de Arduino son muy similares a la estructura de control del lenguaje C e incluyen:

  • if
  • if…else
  • for
  • switch case
  • while
  • do… while
  • break
  • continue
  • return
  • goto

En este tutorial, discutiremos las estructuras de control más utilizadas:

  • for loop
  • switch statement
  • if-else
  • while loop

Declaraciones condicionales

Si las declaraciones y mientras las declaraciones se llaman declaraciones condicionales. Evalúan una condición particular y ejecutan una serie de declaraciones entre paréntesis si la condición es verdadera. Aquí hay un ejemplo:

if (pin_b == LOW) { digitalWrite(ledPin, HIGH);// This tells the LED to turn on }

La declaración «si» consiste en la palabra «si» seguida de una condición entre paréntesis. Si la condición es verdadera, entonces las declaraciones entre los paréntesis que siguen se ejecutarán. En este caso, si el valor digital del pin_b es LOW (bajo), entonces el programa pondrá el valor de ledPin en HIGH (alto). Las declaraciones entre los corchetes se ejecutan una sola vez.

El bucle while es similar a la sentencia if, pero en este caso, las sentencias entre los corchetes se ejecutan una y otra vez hasta que la condición se vuelve falsa. Aquí hay un ejemplo:
while (pin_0 == LOW) {

digitalWrite(ledPin, HIGH);


delay(100);


digitalWrite(ledPin, LOW);


delay(100);


switchValue = digitalRead(pin_0); // This stores a new value into the variable switchValue


}

En este ejemplo, el programa conmutará el estado del LED (es decir, parpadeará) hasta que el usuario pulse un interruptor que haga que el valor digital del pin_0 se ponga HIGH.

if y if…else… declaraciones

if y if…else… son la declaración de control de comprobación de condiciones más directa. La sintaxis de la declaración «if» debería ser como la siguiente:
if (myVar > 0)
{
// do something here if myVar is greater than 0
}

A veces puedes necesitar una declaración if…else… de control para más de una condición.
if (myVar < 10) { // do Thing A } else if (myVar >= 100)
{
// do Thing B
}
else
{
// do Thing C
}

for declaración

Otra estructura de control útil es el bucle for. Se utiliza para repetir un bloque de declaraciones entre sus opciones. Un contador de incremento/decremento se usa normalmente para incrementar/decremento y terminar el bucle. Normalmente la sentencia for se usa en combinación con matrices para operar en colecciones de datos/pines en Arduino.

for (int iBright=0; iBright <= 255; iBright++){
analogWrite(PWMpin, iBright);
delay(50);
}

El ejemplo de programación de Arduino para el bucle anterior se desvanece un LED lentamente desde el apagado hasta el brillo total.

Switch…case… declaración

Otra declaración de control para la programación de Arduino que es bastante similar a if…else… es la declaración de «switch… case…». Como las declaraciones if, switch…case… controla el flujo de programas permitiendo a los programadores especificar el código que debe ser ejecutado en varias condiciones. A continuación se muestra el ejemplo de sintaxis de la declaración switch…case… de programación de Arduino.

switch (MyVar) {
case 1:
//do something when MyVar equals 1
break;
case 2:
//do something when MyVar equals 2
break;
default:
// if nothing else matches, do the default
// default is optional
}

Los códigos switch…case… de Arduino son muy similares a la declaración de if…else….

while and do…while… declaraciones

while and do…while… Las declaraciones de control se usan para hacer un bucle en un bloque de código hasta alcanzar ciertas condiciones. Aquí hay un ejemplo de sentencia de bucle while.

myVar = 0;
while(var < 50){
// do something repetitive 50 times
myVar=myVar + 1;
}

A continuación se muestra el ejemplo del do…while… loop.

do
{
delay(50); // wait for sensors to stabilize
sensorVal = readSensors(); // check the sensors
} while (sensorVal < 100);

La principal diferencia entre while loop y do…while… loop es que while loop comprueba la condición antes de ejecutar la acción, pero do…while… loop ejecuta la acción al menos una vez antes de salir del bucle cumpliendo la condición de salida.

Ejemplo, Declaraciones condicionales

En este ejemplo, encenderemos o apagaremos dos LEDs dependiendo del contenido de un mensaje enviado en serie al Arduino. El programa utiliza las siguientes estructuras de control:

  • Switch Statement
  • If-else if- else
  • While Loop

La declaración del interruptor es mucho más compacta, especialmente si hay que comprobar muchas condiciones. Los compiladores también pueden optimizar las sentencias switch, lo que resulta en una ejecución más rápida del código.

El bucle while es diferente del bucle for en el sentido de que no tiene un número de bucles limitantes. La única forma de salir del bucle while es insatisfaciendo la condición dentro del paréntesis.

Hardware requerido:

  • 1 x Arduino Mega2560
  • 1 x protoboard
  • 2 x LEDs
  • 2 X 220 ohmios de resistencia
  • 3 x cables de puente

Diagrama:

Declaraciones condicionales

Los dos LEDs están conectados a dos pines de salida de Arduino, y el Arduino los enciende o apaga usando declaraciones condicionales. Hay cuatro estados diferentes:

  • Si el serial data == 1, sólo se encenderá el LED verde.
  • Si el serial data ==2, sólo se encenderá el LED amarillo.
  • Si el serial data ==3, ambos LEDs se encenderán.
  • Si el serial data son iguales a cualquier otro valor, los LEDs se apagarán.

Código 1 Declaración de cambio, Switch

// Use of Switch Structure
const int green = 8;
const int yellow = 9;

char i;
void setup()
{
pinMode(green , OUTPUT); //setting pins output
pinMode(yellow , OUTPUT);
Serial.begin(9600);
}
void loop()
{
i = Serial.read(); // To serially send data to switch statements
Serial.println(i);
delay(50) ;

switch(i) //Typical switch structure
{
case '1': //Condition for Green LED
digitalWrite(green,HIGH);
digitalWrite(yellow,LOW);
delay(350);
break;

case '2': //Condition for Yellow LED
digitalWrite(green,LOW);
digitalWrite(yellow,HIGH);
delay(350);
break;

case '3': //Condition for Both LED
digitalWrite(green,HIGH);
digitalWrite(yellow,HIGH);
delay(350);
break;

default: //Leds are off
digitalWrite(green,LOW);
digitalWrite(yellow,LOW);
break;
}

}

Código 2: Usando declaraciones de If-Else

// Use of If - else statements
const int green = 8;
const int yellow = 9;

char i ;
void setup()
{
pinMode(green , OUTPUT); //setting pins output
pinMode(yellow , OUTPUT);
Serial.begin(9600) ;
}
void loop()
{
i = Serial.read(); // To serially send data to switch statements
Serial.println(i);
delay(50);

if(i=='1')
{
digitalWrite(green,HIGH);
digitalWrite(yellow,LOW);
delay(350);
}

else if(i=='2')
{
digitalWrite(green,LOW);
digitalWrite(yellow,HIGH);
delay(350);
}

else if(i=='3')
{
digitalWrite(green,HIGH);
digitalWrite(yellow,HIGH);
delay(350);
}

else
{
digitalWrite(green,LOW) ;
digitalWrite(yellow,LOW) ;
}

}

Código 3: Usando while Loops

// Use of while Loop  
   const int green  = 8 ; 
   const int yellow = 9 ; 
   
   char i ; 
   void setup()
   {
   pinMode(green  , OUTPUT) ;		   //setting pins output
   pinMode(yellow , OUTPUT) ; 
   Serial.begin(9600) ; 
   }
   
   void loop()
   {

    i = Serial.read() ;		  // To serially send data to switch statements 
    Serial.println(i) ;
    delay(50) ; 
      
    digitalWrite(green,LOW) ;
    digitalWrite(yellow,LOW) ;
      
    while(i=='1')
    {
    digitalWrite(green,HIGH) ;
    digitalWrite(yellow,LOW) ;
    i = Serial.read() ;  
    Serial.println(i) ;
    delay(350) ;
    }
     
    while(i=='2')
    {
    digitalWrite(green,LOW) ;
    digitalWrite(yellow,HIGH) ;
    i = Serial.read() ;  
    Serial.println(i) ;
    delay(350) ;
    }
     
    while(i=='3')
   { 
    digitalWrite(green,HIGH) ;
    digitalWrite(yellow,HIGH) ;
    i = Serial.read() ;  
    Serial.println(i) ;
    delay(350) ;
   }
         
   }

Pin It on Pinterest

Shares