¡Domina Arduino! Guía Definitiva para Declarar y Usar Arrays y Strings Fácilmentepost-template-default single single-post postid-46 single-format-standard et_pb_button_helper_class et_fixed_nav et_show_nav et_secondary_nav_enabled et_primary_nav_dropdown_animation_fade et_secondary_nav_dropdown_animation_fade et_header_style_left et_pb_footer_columns4 et_cover_background et_pb_gutter et_pb_gutters3 et_right_sidebar et_divi_theme et-db
771 715 4434

Microcontroladores son parte de cualquier equipo electrónico moderno, desde radios, celulares, juguetes, equipos industriales, médicos, navegación, control, etc. Conocer y practicar con ellos es muy útil para el desarrollo de sistemas electrónicos. La plataforma Arduino nos permite de una manera fácil, introducirnos en el mundo de los microcontroladores y sus aplicaciones. Arduino es una plataforma de desarrollo que usa computadores pequeños (Microcontroladores) para la creación de equipos electrónicos. Por ser una plataforma abierta (Open), esta popularizándose mucho y ha crecido en los últimos años.

Para escribir el código es necesario tener instalado la IDE de desarrollo de Arduino, la cual se puede bajar del página web de Arduino. El lenguaje de programación de Arduino es C++. Aunque se hable de que hay un lenguaje propio de programación de Arduino, no es cierto, la programación se hace en C++ pero Arduino ofrece unas librerías, también llamado core, que facilitan la programación de los pines de entrada y salida y de los puertos de comunicación, así como otras librerías para operaciones específicas. El propio IDE ya incluye estas librerías de forma automática y no es necesario declararlas expresamente.

Fundamentos de la Programación en Arduino

Variables y Tipos de Datos

La tarjeta Arduino generalmente se utiliza para registrar los cambios de algún fenómeno físico. Estos datos deben ser representados y almacenados de manera que el microcontrolador pueda procesarlos. Un tipo de dato está compuesto por un conjunto de valores (dominio) y un conjunto de operaciones que se pueden realizar sobre dichos valores. Arduino maneja diversos tipos de datos. Una variable es un espacio en memoria donde almacenamos un valor determinado, es decir, un dato.

Lo primero que tienes que saber es que una variable tiene principalmente 3 partes, aunque se le puede añadir alguna más, pero eso ya lo veremos más adelante. La primera es el tipo de dato que vas a guardar, como por ejemplo un número, un carácter, etcétera. La segunda y tercera parte es el nombre de la variable y el valor que va a almacenar respectivamente. Para crear una variable en Arduino debes indicar su tipo de dato y su nombre. La acción de crear una variable es conocida como declarar una variable. El valor de una variable puede cambiar durante la ejecución del programa. Esta acción se realiza mediante una expresión o sentencia de asignación. Las sentencias de asignación inicializan o cambian el valor almacenado en una variable usando el operador de asignación = (signo de igualdad). El valor de la expresión del lado derecho del signo de igualdad (=) es almacenado en la variable del lado izquierdo.

El nombre de una variable, también conocido como identificador de variable, debe seguir algunas reglas. El nombre de una variable debe describir lo que almacena. Un nombre como promedio facilita saber el contenido de la variable, a diferencia de si la nombramos p, ya que éste último no nos da ninguna pista de la clase de datos que está almacenando.

Lea también: aprende a declarar y conectar módulos Bluetooth HC-05 y HC-06

Declaración y Ámbito de Variables

Una variable puede ser declarada al inicio del programa antes de la parte de configuración setup(), a nivel local dentro de las funciones, y, a veces, dentro de un bloque, como para los bucles del tipo if.. for.., etc. La función setup() es donde se configura el microcontrolador y solo se ejecuta una vez, cuando la placa es alimentada por una fuente de voltaje o cuando ejecutamos un reset. La función loop() como su nombre lo indica es un bucle que se repite indefinidamente y es donde se escribe el programa principal.

  • Variables Globales: Una variable global es aquella que puede ser vista y utilizada por cualquier función y estamento de un programa. Una variable global se declara afuera de cualquier función y puede ser utilizada por todas las funciones del sketch. En el siguiente programa, la variable valBtn es global, ya que se declara afuera de las funciones setup y loop.
  • Variables Locales: Una variable local es aquella que se define dentro de una función o como parte de un bucle. Sólo es visible y sólo puede utilizarse dentro de la función en la que se declaró. En este otro sketch, la variable valBtn es local, ya que se declara dentro de la función setup.

Constantes

En ocasiones necesitamos almacenar algún valor en una variable, pero ese valor no tendrá ninguna modificación durante la ejecución del programa. Podemos definir los pines de conexión de nuestros dispositivos como constantes. En el inicio del programa definimos 2 constantes enteras, es decir que estos valores no van a cambiar durante la ejecución del programa. Para ello puedes utilizar la palabra clave «const» al definir una variable. Si utilizas dicha palabra clave y hay alguna línea de código que cambie el valor de la variable, dará error al compilar. Gracias a esto te puedes asegurar de que el valor de dicha variable no cambie, y prevenir futuros errores de ejecución, mucho más difíciles de encontrar y resolver. Las constantes son generalmente definidas a nivel módulo, escritas con todas las letras en mayúscula y con guiones bajos separando palabras. Por ejemplo, MAX_OVERFLOW y TOTAL.

Directivas de Precompilador

Lo primero que veremos son las directivas de precompilador. Estas directivas se ejecutan antes de compilar el código y no se ejecutan en tiempo de ejecución como el resto de código.

  • #include: Con esta directiva podemos incluir ficheros externos a nuestro proyecto. Un ejemplo sería el uso de alguna librería que haga una función especial. Se puede definir de dos maneras diferentes: #include (Busca en los directorios de librerías por defecto) y #include "C:\librerias\fichero.h" (Una ruta completa al archivo).
  • #define: Esta directiva permite definir un alias a un texto y su uso más extendido es la declaración de constantes. La principal utilidad es que se puede reutilizar en cualquier parte del código afectando a todas las referencias que se hagan a partir de entonces. La norma aconseja poner todos los define en mayúsculas para identificarlos claramente. Por ejemplo: #define BAUDIOS 9600.

Tipos de Datos Fundamentales en Arduino

Ahora veremos los tipos de datos que podemos usar cuando programamos para Arduino.

Tipo de Dato Descripción
byte Números sin signo que ocupan hasta 8 bits [0,255].
(unsigned) int Números enteros de 16 bits, 2 bytes.
float Se utiliza para guardar cualquier tipo de número, incluidos los números decimales.
double Es exactamente igual que float, pero los números que almacena pueden ser más largos.
char Sirve para guardar un único carácter. Los caracteres son datos de 8 bits representados en ASCII.
boolean Solo toma valores true o false. Ocupan un byte entero.
void Solo se utiliza en los valores de retorno de las funciones para indicar que esa función no devuelve valor.
enum Variables para almacenar estados predefinidos. Un ejemplo claro sería los estados de un sensor.
typedef Este elemento genera un nuevo tipo de variable con el nombre que queramos darle. Se puede utilizar con cualquier tipo de dato que queramos.
union Permite apuntar a dos variables al mismo espacio de memoria. Almacena la dirección de memoria de otra variable.
array Colección ordenada de variables del mismo tipo.

Manejo de Colecciones de Datos: Arrays

¿Qué es un Array?

Un array es un conjunto de valores a los que se accede con un número índice. Cualquier valor puede ser recogido haciendo uso del nombre de la matriz y el número del índice. El primer valor de la matriz es el que está indicado con el índice 0, es decir el primer valor del conjunto es el de la posición 0. Los arrays sólo pueden contener elementos del mismo tipo de datos. Una de las cosas que nos tendremos que dar cuenta, es que los índices de los vectores empiezan por el 0.

Lea también: aprende a usar Serial.begin() en tus proyectos Arduino

Acceso y Recorrido de Arrays

Las matrices se utilizan a menudo con estamentos de tipo bucle, en los que la variable de incremento del contador del bucle se utiliza como índice o puntero del array. Para operar con todos los elementos de un array, vamos a utilizar los bucles mediante un contador que define el índice. Utilizando un bucle tipo for, el contador comienza en cero 0 y escribe el valor que figura en la posición de índice 0 en la serie que realizada sigue escribiendo en las siguientes posiciones. El ejemplo anterior de las luces con el efecto del coche fantástico puede hacerse de una forma más eficiente con el uso de los arrays y la estructura de control for.

Consideraciones sobre la Memoria y Eficiencia

La lógica detrás de este hecho, es que la memoria de nuestro Arduino es finita y limitada. Cuando definimos el tamaño de un array, podemos estar seguros de que se va a dejar ese espacio para manipular las variables dentro de ese rango. El conjunto de datos array definido no nos ofrece un método que nos proporcione el valor de la longitud, a menos que la definamos como constante. Pero la podemos deducir gracias a la función sizeof. Este método se recomienda solamente para listas cortas de unos 1000 elementos, ya que se considera uno de los más simples de programar, pero por contra ineficiente en cuanto a su velocidad. El algoritmo quicksort es uno de los algoritmos más eficientes para ordenar arrays. Se puede usar con Arduino a través de una librería que podemos descargar desde el siguiente enlace.

Strings y la Clase String en Arduino

Strings como Arrays de Caracteres (C-style strings)

Un string es una cadena de caracteres, o lo que es lo mismo un string es un array de chars. Cuando se trabaja con grandes cantidades de texto, es conveniente usar un array de strings. Una características de los strings es el carácter de terminación del string que nos indica dónde acaba la cadena de caracteres. Podemos tener un string de tamaño 50 para almacenar una cadena de caracteres, pero unas veces puede tener una sola palabra o una frase completa. Esto significa que un string para almacenar la palabra “hola” debe tener un tamaño de 5 y no de 4 para poder guardar el null termination.

También una variable String siempre DEBE de terminar en un carácter nullo. Es decir, en \0.

La Clase String de Arduino

Se trata de una clase que permite usar y manipular cadenas de texto de una forma más sencilla que los strings. Tener en cuenta que al no ser un tipo de dato propiamente dicho sino una clase, tienes unas funciones asociadas (métodos), operadores y unas propiedades. En Arduino String es un tipo de datos que es usado para guardar cadenas de caracteres. En Arduino String se guarda en un vector de datos tipo carácter.

Lea también: aprende a declarar un potenciómetro en tu código Arduino

La sintaxis para declarar una variable de la clase String es la siguiente:

String nombreVariable;

En el ejemplo anterior se declara una variable String, la cual es una variable sin inicializar. Por ejemplo, se podría inicializar en la declaración o posteriormente en el programa:

String ejemplo1 = "Hola Mundo";

Operaciones con la Clase String

Una de las principales ventajas de las variables String es su capacidad de concatenar cadenas de caracteres. Una concatenación es la unión de dos o más strings. Para limpiar una String, simplemente se usa el siguiente ejemplo:

ejemplo1 = "";

Consideraciones de Memoria con la Clase String

Una variable String, cuando no se inicializa y no contiene ningún valor, se le asigna un espacio de 16 bytes en la memoria RAM. Recordemos que en realidad sólo se usarían 15 bytes, dado que un string DEBE de terminar en el carácter nulo \0. Por el contrario, si se inicializa con un valor que supera el valor anterior, se le asignara un valor que considere el byte nulo. Entonces es muy importante resaltar que cuando se usan variables del tipo String se hará un uso excesivo de la memoria de Arduino. Considere el siguiente codigo de ejemplo.

Aplicaciones de la Clase String

En Arduino, la variable String es de mucha utilidad para manejar datos recibidos y enviados por el puerto Serial. También es muy utilizado para formar mensajes que después puedan ser enviados por un servidor web, ya sea vía Ethernet o por Wifi.

tags: #arduino #declarar #de #lista #ejemplos