Читать книгу Taller de Arduino. Experimentando con Arduino MKR 1010 - German Tojeiro Calaza - Страница 35
2.2.2 Variables
ОглавлениеUna variable es una manera de nombrar y almacenar un valor numérico para su uso posterior en el programa. Como su nombre indica, las variables son números o caracteres que se pueden variar continuamente en contra de lo que ocurre con las constantes, cuyo valor nunca cambia. Todas las variables tienen que declararse antes de que puedan utilizarse. Para declarar una variable se comienza por definir su tipo, asignándoles siempre un nombre y, opcionalmente, un valor inicial. Esto solo debe hacerse una vez en un programa, pero su valor se puede cambiar en cualquier momento. Una variable puede ser declarada en cualquier lugar del programa y, en función de donde se lleve a cabo su definición, se determinará en qué partes del programa se podrá hacer uso de ella.
Una variable puede ser declarada al inicio del programa, a nivel local dentro de las funciones y a veces dentro de un bloque. En función del lugar de declaración de la variable así se determinará su ámbito de aplicación y la capacidad de ciertas partes de un programa para hacer uso de ella. Una variable global es aquella que puede ser vista y utilizada por cualquier función y sentencia de un programa. Esta variable se declara al comienzo del programa, antes de la estructura setup(). Una variable local es aquella que se define dentro de una función o como parte de un bucle. Solo es visible y solo puede utilizarse dentro de la función en la que se declaró. El ámbito de utilización de las variables se entenderá mejor cuando conozca un poco mejor los fundamentos de la programación.
Existen diferentes tipos de variables en concordancia con el tipo de dato que almacenen. Las variables que utilizará más a menudo en sus programas son:
* Tipo entero: int
* Tipo carácter: char
* Tipo booleano: Boolean
El tipo entero denominado “int” almacena valores numéricos de 16 bits sin decimales comprendidos en el rango 32,767 a -32,768. La siguiente sentencia define una variable de tipo entero con el nombre Ventrada. Además, le asigna un valor inicial y numérico de 200.
int Ventrada = 200; // declara una variable de tipo entero.
El tipo carácter llamado “char” de un tamaño de 1 byte que almacena valores tipo carácter. Es decir, que solo puede contener un carácter tipo ASCII. La siguiente sentencia define una variable de tipo carácter con el nombre Ventrada y, además, le asigna un valor inicial con la letra ´a´.
char Ventrada = ’a’; // declara una variable de tipo carácter.
El tipo booleano (Boolean) solo puede contener dos valores: TRUE (verdadero) o FALSE (falso). De esta manera, cada una de estas condiciones ocupa 1 byte de memoria. La siguiente sentencia define una variable de tipo booleano con el nombre Ventrada y, además, le asigna un valor inicial verdadero o TRUE.
boolean Ventrada = true; // declara una variable de tipo booleano.
En cuanto al tipo matriz (array), a diferencia del tipo de variables vistas anteriormente que solo podían almacenar un valor único a la vez, los arrays son un caso especial de variables que pueden almacenar un conjunto de valores, y modificar solo uno, o algunos, o incluso todos los valores contenidos en el mismo en cualquier momento y según nuestra conveniencia. También sería posible evitar el uso de arrays y en vez de ello crear “muchas” variables con distintos nombres. Sin embargo, esto no resultará cómodo de utilizar. La traducción de array es literalmente “colección”, ya que se utiliza para “juntar” varios objetos de un mismo tipo. En otras materias, como matemáticas, se conoce con el nombre de matriz y, generalmente, se usan las de 2 dimensiones, por su facilidad para representarlas en un plano, ya que tienen ancho y alto. Cada elemento de la matriz se identifica por un par de números que indican la fila y la columna en que se ubica el elemento. También podría tener una matriz de 3 dimensiones (cubo). En ese caso, cada elemento de la matriz se identificará con 3 valores ordenados (que indicarán la posición relativa del elemento dentro de la matriz), por ejemplo: el elemento A(1,8,76) habría que encontrarlo dentro de la matriz A, en la fila 1, columna 8, “nivel” o “capa” 76.
En el caso de Arduino es todavía más simple. Utilizará un tipo de matriz de una sola dimensión. Por ejemplo, se podría declarar un array de las siguientes formas:
int minume[6];
//se define un array que tendrá 6 elementos de tipo entero (int).
int minume[] = {2, 4, 8, 3, 6};
//se define el array y se le rellena con valores numéricos.
char mensaje[6] = “hola”;
//ahora almacena caracteres individuales.
Los arrays son “zero indexed”, lo que significa que, al referirse a una matriz, el primer elemento de la matriz está en el índice 0. Por lo tanto:
minume[0] == 2, minume[1] == 4, y sucesivamente.
Esto también quiere decir que en una matriz con 10 elementos el índice 9 es el último elemento. Por lo tanto:
int myArray[10]={9,3,2,4,3,2,7,8,9,11};
// myArray[9] = 11.
// myArray[10] es inválido y contiene información aleatoria.
Las variables de tipo string (‘s’ minúscula) se representan como un tipo particular de arrays de caracteres (tipo char) que terminan con el carácter NULL. Por ejemplo:
char Str1[15];
// Declara un array de caracteres sin inicializarlo.
char Str2[8] = {‘a’, ‘r’, ‘d’, ‘u’, ‘i’, ‘n’, ‘o’};
// Declara un array de caracteres (con un carácter extra) y el compilador añadirá el carácter NULL requerido.
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