Programación arduino uno

Programar un microcontrolador con arduino es bastante simple, esta pensado para simplificar las tareas mas complejas mediante librerías disponibles para el uso, utiliza un lenguaje de programación que esta basado en C y C++, su sintaxis es muy similar.

La estructura de todo programa de arduino cuenta con dos subrutinas elementales denominadas void setup() y void loop(), en ellas se encierran bloques de código donde se hacen declaraciones e instrucciones lógicas.

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

 

La subrutina setup() es la encargada de recoger la configuración y parametrizaciones estáticas del programa mientras que  loop() es la que contienen las sentencias lógicas del programa.

Funcion setup()

Se invoca una sola vez al comienzo del programa, en ella se setean el funcionamiento de los pines, si serán de entrada o salida y que pines se utilizaran en el proyecto y muchas mas cuestiones.

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

 

Funcion loop()

Luego de ser invocada la función setup() se ejecuta la función loop(), en forma cíclica conteniendo toda la lógica del programa en ejecución, todo las acciones deben ser programadas dentro de esta función.

Por ejemplo el código que mostramos debajo pone un pin en uno durante un segundo, luego lo pone en cero durante otro segundo y se vuelve a repetir infinitas veces, el código forma parte de la sección de ejemplos del compilador de arduino

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

Controles de flujo y saltos condicionales

Como todo lenguaje de programación, existen saltos condicionales que se pueden utilizar según sea el objetivo que se necesita cumplir, no es el objetivo de este articulo comentar para que sirve cada uno, asumimos que el lector tiene un grado de conocimientos mínimos de lenguajes de programación. Al igual que en C o C++ tenemos disponibles para nuestro uso los siguientes saltos condicionales o controles de flujo.

  • If/Else
  • For
  • While
  • Do While

Cambien existen otros saltos condicionales conocidos como interrupciones, pueden ser interrupciones externas debido al suceso de algún evento externo, esto es muy común y utilizado en rebotica. Estudiar el uso de las interrupciones es un tema extenso que no vamos a comentar en este articulo.

Funciones básicas arduino

Como dijimos, arduino cuenta con una infinidad de librerías y funciones disponibles para nuestro uso, pero hay que conocer algunas que no podemos pasar por alto y necesitamos conocer como punta pie inicial en este maravilloso mundo.

Función delay()

Es una función destinada a generar retardos, solo sirve para eso, en el ejemplo anterior la utilizamos para conseguir un retardo de un segundo hasta producir el nuevo evento.

Esta función es muy útil pero no es recomendable utilizarla en algunas situaciones,  si el proyecto que estamos encarando tiene un complejidad elevada o manejamos interrupciones en nuestro programa, yo recomiendo no utilizar, esta función al ser utilizada mueve unos registros internos del microprocesador que son comunes a otras funcionalidades del programa, lo que puede ocurrir es que esperemos que se comporte de una manera y haga algo totalmente diferente.

Comento algunos de los motivos para no utilizar la función delay.

  • No puedes hacer otra cosa mientras se esta ejecutando.
  • Es incompatible con las interrupciones.
  • Aumenta el consumo del proyecto.
  • No se pueden detectar eventos externos (interrupciones) e internos (interrupciones por timer)

Función millis()

Esta función tiene un valor de retorno, nos devuelve el tiempo en mili segundos que transcurrido desde el inicio de programa hasta que se ejecuto la función, generalmente sera un valor grande dependiendo del tiempo entre una ejecución y la próxima.

La ventaja de esta función es que nos permite obtener los mismos resultados que con la función delay pero podemos hacer cualquier otra cosa mientras ese evento aun no sea disparado.

La desventaja de utilizar esta función es que nos complica un poco la lógica del programa pero trae grandes ventajas si la sabemos utilizar.

  • Es compatible con las interrupciones.
  • Podemos hacer otra cosa mientras esperamos que un evento ocurra.
  • No generamos carga innecesaria a nuestro procesador.

Abajo comparto un código de ejemplo de como se debería utilizar.

unsigned long tiempo = 0;
 
/*
 Se declara una variable que almacenará el último valor de tiempo en el que se
 ejecutó la instrucción (delay).
*/
 
unsigned long t_actualizado = 0;
 
/*
 Se declara una variable que almacenará el tiempo que se desea que dure el delay.
 unsigned long t_delay = 20;
*/
 
void setup(){
 
/*
  Se configura el setup
*/
}
 
void loop() {
 
/*
 Se almacena el tiempo que ha transcurrido desde que se encendió el Arduino.
*/
  tiempo = millis();
  
/*
  Si ese tiempo es mayor que el intervalo de deseado (equivalente al tiempo
  de delay) se actualiza el intervalo y se ejecutan las instruciones relacionadas.
  La idea detrás de este algoritmo consiste en pensar que si han transcurrido
  20ms y se desea un delay de 30ms cada vez, cuando se superen esos 30ms la
  variable con la que se compara pasa a ser 60ms. Una vez se alcanzan los 60ms
  pasa a ser 90ms y así sucesivamente.
*/
      
  if( tiempo > t_actualizado + t_delay) {
  
 /*
  Se actualiza el tiempo que ha de transcurrir para el próximo delay.
 */
 
    t_actualizado = tiempo;
    
 /*
  Se define el conjunto de instruciones que se desea que se realicen cada vez
  que transcurra el tiempo establecido anteriormente (mover un motor, cambiar
  de estado un LED, enviar datos...).
  */
  }
 
  /*
    Se ejecutan el resto de instrucciones del programa.
  */
 
}

Función digitalWrite y digitalRead

Estas dos funciones se utilizan para interactuar con los pines del arduino, una es para leer un pin y la otra es para setearle algún valor al pin.

La función digitalWirite cuenta con dos argumentos, el primero es a que pin va destinado el evento y el segundo es el valor que ese pin va a recibir.

La función digitalRead tan solo tiene un argumento, en el ponemos el numero del pin que queremos leer. Como pueden ver es una función simple pero de las mas básicas y utilizadas al programar con arduino.

 

int valor;

void setup() {

}

void loop() {
    digitalWrite(13, 1);
    valor = digitalRead(12);
}

Como siempre digo, espero que les sea de utilidad y respondo todos sus comentarios, todo lo que quieran aportar sera bienvenido y ayuda a mejorar.

No dudes en dejar tu opinión.

ANÍMATE A DAR EL PRIMER PASO

Si todavía no tenes tu Arduino no pierdas mas tiempo, nosotros te recomendamos cualquiera de los siguientes productos, para comenzar son los mas indicados.

[amazon_link asins=’B008GRTSV6,B01MXGST4I,B01C2Q0NNS,B00L7Z0PNY,B01KPKBO5Y’ template=’CarruselCustom’ store=’electrontoo01-21′ marketplace=’ES’ link_id=’3da70da7-5c70-11e7-9dd0-a9d0207a27ca’]

ARTICULOS RELACIONADOS

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *