Estructura de decision IF

Hola a todos una vez mas:

En esta ocasión veremos la estructura de decisión IF. Cuando queremos comenzar a darle un poco mas de "inteligencia" a nuestros programas es ideal poner partes en las que nuestro programa tome decisiones del tipo:

Si pasa "ESTO", haga "ESTO OTRO".

La sintaxis es la siguiente:

If (condición)
    {
           Instrucciones;

           Instrucciones;
    }
Todo lo que esta dentro de las llaves se ejecuta cuando se cumple la condición entre el paréntesis, de modo contrario el programa ignora todo el bloque que esta entre las llaves.

Para evaluar la condición se ocupa lo que se llama, "Operadores de comparación".

A continuación  los operadores usados en Arduino:

If (a == b)   a es igual a b. Notar que "=" es asignación, y "==" es comparación.
If (a != b)    a es distinto de b.
If (a < b)     a es menor que b.
If (a > b)     a es mayor que b.
If (a <= b)   a es menor o igual a b.
If (a >= b)   a es mayor o igual a b.


Esta estructura es fundamental para la toma de decisiones de nuestros robots. Ahora un ejemplo de como podemos usar esta estructura. Junto a la comunicación serial para poder controlar luces desde el teclado del PC.

Materiales necesarios:
1.- Arduino uno.
2.- 3 diodos led rojo, verde y amarillo
3.- Computador con entorno Arduino instalado.

Montaje:


Codigo:

#define ledRojo 7
#define ledVerde 8
#define ledAmarillo 9

char lecturaDeTeclado;

void setup()
{
  Serial.begin(9600);
  pinMode(ledRojo,OUTPUT);
  pinMode(ledVerde,OUTPUT);
  pinMode(ledAmarillo,OUTPUT);
}

void loop()
{
  if(Serial.available() > 0)
  {
    digitalWrite(ledRojo,LOW);
    digitalWrite(ledVerde,LOW);
    digitalWrite(ledAmarillo,LOW);
    
    lecturaDeTeclado = Serial.read();
    
    if(lecturaDeTeclado == 'a')
    {
      digitalWrite(ledRojo,HIGH);
    }
    
    if(lecturaDeTeclado == 's');
    {
      digitalWrite(ledVerde,HIGH);
    }
    
    if(lecturaDeTeclado == 'd')
    {
      digitalWrite(ledAmarillo,HIGH);
    }
  }

}





Comunicación Serial en Arduino

¿Que es la comunicación serial?

La comunicación serial consiste en el envio de un bit de informacion por vez, por eso es serial, y se realiza a un cierto ritmo acordado entre el emisor y receptor.

Este ritmo es conocido como "baud rate" , que es la cantidad de baudios por segundo que manejará nuestro puerto serie. El baudio es una unidad de medida que representa la cantidad de simbolos por segundo en un medio de transmision analógico.


Para que arduino se comunique con tu computadora, necesita una especie de traductor que transforme esta señal. Arduino usa el integrado FT232R, que es un conversor Serial - USB.

En el programa o Sketch no es necesario incluir la libreria Serial al principio. Solo se debe iniciar la comunicación en el bloque de setup con el comando Serial.begin(baud rate);.

Luego de eso, en el bloque loop(), podemos usar las distintas funciones incluidas en la librería Serial, que a continuación se describen.



write()

Escribe datos en forma de bytes o series de bytes y los envía por el puerto serie. Su sintaxis, o la forma de insertar esta función dentro de tu código es la siguiente:

Serial.write(dato_a_enviar);



print() y println()
A diferencia del comando anterior, la función print() y println(), Imprime datos en el puerto serie, los que pueden ser leídos desde el monitor serial incluido en el IDE de Arduino.
La diferencia entre estas dos funciones es que print(), imprime los valores seguido uno de otro. En cambio println() imprime un salto de linea al termino de cada sentencia
La sintaxis y el resultado a continuación, para poder analizar la diferencia.


Serial.print("Saludos");
Serial.print("desde");
Serial.print("ArduRobotics");

SaludosdesdeArduRobotics


Serial.println("Saludos");
Serial.println("desde");
Serial.println("ArduRobotics");

Saludos
desde
ArduRobotics

Ademas, la funcion print() puede imprimir en distintos formatos que son especificados en el segundo argumento de la función quedando la sintaxis como sigue:

Serial.print(dato,FORMATO);

Las opciones para FORMATO son:
BIN: formato binario, base 2
OCT: formato octal, base 8
DEC: formato decimal, base 10
HEX: formato hexdecimal, base 16

Carga en tu Arduino el siguiente código y podrás ver el valor que entrega la función print() con los diferentes formatos.

int entrada = 0;
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if(Serial.available()>0)
  {
    entrada = Serial.read();
    Serial.print("Formato Binario: ");
    Serial.println(entrada,BIN);
    Serial.print("Fomato Octal: ");
    Serial.println(entrada,OCT);
    Serial.print("Formato Decimal: ");
    Serial.println(entrada,DEC);
    Serial.print("Formato Hexadecimal: ");
    Serial.println(entrada,HEX);
    Serial.println("**************************");
  }
}


read()
La función read lee los datos que se escriban en el puerto serie, si se hace un programa en el que el usuario tenga que ingresar información, este comando haría posible leer y luego procesar el ingreso de información, por ejemplo desde teclado.
También se puede usar una variable para almacenar el dato que se lea desde el puerto serial.
Si se analiza el código anterior se puede ver que se usa Serial.read() para leer lo que se ingresa por el teclado y se guarda en la variable 'entrada'.

available()
 Esta función devuelve el numero de bytes disponibles para lectura, o sea, que si es mayor que cero es por que hay datos disponibles para lectura. Estos bytes se guardan provisoriamente en un buffer o espacio de memoria disponible para tal fin.
Entonces si se quiere que un programa solo reaccione cuando hayan datos en el puerto serie, se puede usar esta función.