Taller de Arduino. Experimentando con Arduino MKR 1010. German Tojeiro Calaza
char Str3[8] = {‘a’, ‘r’, ‘d’, ‘u’, ‘i’, ‘n’, ‘o’, ‘\0’};
// Explicita el carácter NULL.
char Str4[ ] = “Arduino”;
// Inicializa con un string constante entre comillas dobles; el compilador medirá el tamaño del array para ajustar el string constante y carácter NULL para finalizar,
char Str5[8] = “Arduino”;
// Inicializa el array con un tamaño explícito y un string constante,
char Str6[15] = “Arduino”;
//Inicializar el array, dejando un espacio extra para un string más largo,
Generalmente, los string se finalizan con un carácter NULL (código ASCII: 0). Esto permite a funciones como Serial.print(), establecer dónde está el final del string. De otra forma, seguiría leyendo los siguientes bytes de la memoria que no forman parte del string. Los string siempre se definen entre comillas dobles (“Abc”) y los caracteres siempre se definen dentro de comillas simples (‘A’). A menudo es conveniente, al trabajar con grandes cantidades de texto, como proyectos con displays o LCD, configurar un array de string, es decir: una matriz de cadenas de textos.
El tipo String (‘S’ mayúscula) merece una explicación, ya que es un poco más que un tipo de variable. De hecho, es un objeto (en el sentido de la programación orientada a objetos). Los objetos cuentan con propiedades y funciones especiales. Propiedades y funciones son disponibles de forma nativa en el núcleo de Arduino y se pueden ver como una entidad preexistente, incluso si su IDE no contiene ninguna línea. Una vez más, el núcleo de Arduino proporciona funciones de gran alcance ya preparadas para utilizar directamente.
El tipo de datos String es diferente que el tipo de datos de cadena (nótese la mayúscula S para este tipo de datos en comparación con el anterior). Este tipo de datos es en realidad una construcción a partir del tipo de datos de cadena, pero se trata como un objeto o instancia en lugar de una sencilla matriz de caracteres. Lo que esto significa es que tiene una gran cantidad de funcionalidad integrada con el tipo de datos String. Se ha establecido con anterioridad la definición de las variables, pero los objetos tienen un concepto similar llamado: “construcción”. Para objetos String, se hace referencia a la construcción en términos similares a la declaración de una variable. Declarar un tipo String en el núcleo de Arduino incluye un constructor de objeto, que es un concepto de programación orientada a objetos que se pueden obviar, ya que el núcleo de Arduino lo hace por usted, de tal manera que es mucho más fácil.
Por ejemplo, suponga que tiene una secuencia de caracteres que se leen de un sensor en una variable de cadena denominada miDato. Además, suponga que necesita convertir todos los caracteres en letras mayúsculas. Con el tipo de datos de cadena string, tendría que escribir el código para hacer la conversión.
Si define miDato como un objeto String, entonces podría escribir la conversión simplemente como:
miDato = miDato.ToUpperCase ();
Y ya está. La razón por la que esto funciona es porque dentro del objeto String existe una función (también denominada método) que contiene el código para hacer la conversión por usted. Solo tiene que definir la variable como:
miDato = String (100);
Así define una cadena denominada miDato con espacio suficiente para 99 caracteres. Para utilizar una función integrada de este tipo, escriba el nombre de la variable seguida de un punto (llamado el operador de punto), seguida por la función que desea llamar.
Por ejemplo:
miDato = miDato.ToLowerCase ();
Dicha funcionalidad es común con los lenguajes de programación como C++, C # y Java (programación orientada a objetos). Aunque Arduino C no es exactamente un lenguaje de programación orientada a objetos, contiene algunas de las características. En la tabla 2.1 se muestran algunas de las funciones incorporadas que están disponibles cuando se utilizan objetos String (puede consultar la tabla completa en la web oficial de Arduino).
Existen más tipos de variables que irá conociendo a medida que avance en la programación de Arduino MKR. Si desea consultarlos ahora puede visitar la página: http://Arduino.cc/en/Reference/HomePage.
Las variables deberán tomar nombres descriptivos para hacer el código más legible. Nombres de variables pueden ser contactoSensor o pulsador. Sirven para ayudar al programador y a cualquier otra persona a “leer” el código y entender lo que representa la variable. Nombres de variables como var o valor facilitan muy poco que el código sea inteligible. Una variable puede ser cualquier nombre o palabra que no sea una palabra reservada en el entorno de Arduino.
Función | Descripción |
compareTo(String two) | Comprueba si dos cadenas son iguales |
concat(String two) | Combina dos cadenas en una nueva cadena |
equals(String two) | Realiza la comparación entre mayúsculas y minúsculas entre dos cadenas |
replace(String one, String two) | Reemplaza todas las apariciones de un carácter o de una subcadena por otra |
toLowerCase() | Devuelve una copia de la cadena original con todos los caracteres en minúsculas |
length() | Devuelve la longitud en caracteres de la cadena |
Trim() | Devuelve una copia de la cadena original con todos los espacios en blanco, antes y después de la cadena, eliminados |
Tabla 2.1
2.2.3 Operadores aritméticos, lógicos y booleanos
Los operadores aritméticos que se incluyen en el entorno de programación de Arduino son: la suma, la resta, la multiplicación y la división. Estos devuelven la suma, diferencia, producto o cociente de dos operandos. Esto es lo que normalmente se denominan matemáticas de andar por casa.
y = y + 3; // Sume 3 a la variable y
x = x - 7; // Reste 7 a la variable x
i = j * 6; // Realice el producto de 6 y de la variable j
r = r / 5; // Divida la variable r entre 5
Los operadores de comparación de una variable se utilizan con frecuencia en las sentencias condicionales del tipo IF (las veremos más adelante) para comprobar si una condición es verdadera o falsa; es decir, para tomar decisiones en el programa. Los símbolos de los operadores de comparación se muestran a continuación.
x == y // x es igual a y
x != y // x no es igual a y
x < y // x es menor que y
x > y // x es mayor que y
x <= y // x es menor o igual que y
x >= y // x es mayor o igual que y
Los operadores booleanos son una forma de comparar dos expresiones y devolver un TRUE o FALSE dependiendo del operador. Existen tres operadores lógicos:
&& Operador AND
|| Operador OR
! Operador NOT
Desde nuestro punto de vista es más productivo memorizar los diferentes tipos de operadores que los diferentes y variados tipos de variables. La razón se asienta en la experiencia que afirma que los operadores constituyen la toma de decisiones fundamental en los programas y elegir un operador u otro puede determinar el funcionamiento correcto o no de su proyecto. En cambio, la elección de una variable u otra no tiene por qué ser determinante.
2.2.4 Estructuras de control: condicionales y ciclos