Hemos ido jugando con variables de una forma más o menos informal, por una decisión deliberada. Hemos usado los diferentes tipos de variables y hemos operado con ellas, pero sin entrar en muchos detalles.
En concreto hemos utilizado variables locales y globales, pero evitando, discretamente, hacer comentarios sobre el tema. Sin embargo, ha llegado el momento de entrar en detalle en una propiedad clave de las variables.
¿Qué es una variable?
Una variable es un lugar donde almacenar un dato, tiene un nombre, un valor y un tipo.
Los nombres de variables pueden tener letras, números y el símbolo ’_’. Deben empezar por una letra (pueden empezar por ’_ ’ pero no es recomendable pues es el criterio que usan las rutinas de la biblioteca). Pueden llevar mayúsculas y minúsculas. La convención es que las variables van en minúscula y las constantes en mayúscula
Usa las mismas reglas dentro del código para el nombramiento de variables, ya sea en minúscula con palabras separadas con guiones bajos, tantos como sea necesario para mejorar la legibilidad
Las palabras reservadas if, else,etc . . . no pueden usarse como nombres de variables.
Nombres para evitar: Nunca uses los caracteres ‘l’ (letra ele en minúscula), ‘O’ (letra o mayúscula), o ‘I’ (letra i mayúscula) como simples caracteres para nombres de variables, para evitar confusiones a la hora de leer el código.
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. En función del lugar de declaración de la variable así se determinará el ámbito de aplicación, o 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 estamento de un programa. Esta variable se declara al comienzo del programa, antes de setup(). Recordar que, al declarar una variable global, está siendo utilizado un espacio en memoria permanente en la zona de static data y el abuso de variables globales supone un uso ineficiente de la memoria.
Las variables que se declaran dentro de un bloque, se llaman variables locales, y solo existen dentro del bloque en que se definen y no fuera. Cuando nuestro programa entra en el bloque, la variable que se declara, se crea sobre la marcha para su uso interno. Cuando el programa abandona el bloque, esa variable local se destruye y desaparece en el olvido. La próxima vez que regresemos al bloque se creará de nuevo, sin recordar si ha tenido existencia previa.
Los datos que guardamos en las variables pueden ser de diferentes tipos, vamos a listar algunos de ellos.
• char, se utilizan para almacenar caracteres, ocupan un byte.
• byte, pueden almacenar un número entre 0 y 255.
• int, ocupan 2 bytes (16 bits), y por lo tanto almacenan número entre 2-15 y 215-1, es decir, entre -32,768 y 32,767.
• unsigned int, ocupa también 2 bytes, pero al no tener signo puede tomar valores entre 0 y 216-1, es decir entre 0 y 65,535.
• long, ocupa 32 bits (4 bytes), desde -2,147,483,648 a 2,147,483,647.
• float, son números decimales que ocupan 32 bits (4 bytes). Pueden tomar valores entre -3.4028235E+38 y +3.4028235E+38.
• double, también almacena números decimales, pero disponen de 8-bytes (64 bit).
Siempre que elegimos un tipo de dato debemos escoger el que menos tamaño necesite y que cubra nuestras necesidades, ya que ocuparán espacio en la memoria de nuestra placa y podría darse el caso de que nuestro programa requiera más memoria de la disponible.
Pero, ¿cómo “hacemos” variables en nuestro código?
Es muy sencillo: indicando el tipo y el nombre de la variable. Además, podemos darle o no un valor inicial
Una variable tiene un nombre, un valor y un tipo. Con la asignación, se puede cambiar el valor de la variable.
Todas las variables deben ser declaradas antes de su uso. Las declaraciones deben aparecer al principio de cada función o bloque de sentencias. Al declarar una variable se debe indicar primero el tipo de variable y luego su nombre, opcionalmente se le puede dar un valor, lo que se llama inicializar la variable.
La declaración consta de un tipo de variable y una lista de variables separadas por coma.
nt i,j;
float x,pi;
unsigned long longitud, contador;
Las variables pueden inicializarse en la declaración
• float pi=3.1416;
• unsigned long contador=0;
Puede utilizarse el modificador const para indicar que la variable no puede ser cambiada en tiempo de ejecución.
const float e=2.7182;
La declaración de una variable sólo debe hacerse una vez en un programa, pero el valor de la variable se puede cambiar en cualquier momento usando aritmética y reasignaciones diversas.
En programación, una constante es un valor que no puede ser alterado/modificado durante la ejecución de un programa, únicamente puede ser leído. Una constante corresponde a una longitud fija de un área reservada en la memoria principal del ordenador, donde el programa almacena valores fijos. Por ejemplo, el valor de PI = 3.1416.
El modificador const, modifica el comportamiento de una variable haciéndola “read-only”, esto significa que puede usarse como cualquier otra variable, pero su valor no puede ser cambiado.
Con Arduino muchas veces lo que queremos es medir algo con un sensor, y luego actuar de alguna manera, encendiendo una luz o moviendo un motor dependiendo de los valores medidos.
Para hacer esto se necesita lo que se llama condicionales. Una condicional evalúa una situación, y dependiendo si esta es verdadera o falsa, entonces ejecuta una u otra acción.
Hasta ahora lo que hemos visto es que si cumple una condición ejecuta el código que hay dentro de un if. Pero ¿Qué pasa si tenemos más de una condición? Por ejemplo, si la temperatura es mayor de 25 mueve el servomotor 135º, si es menor de 25 mueve el servomotor 45º.
Con lo que sabemos hasta ahora, podríamos hacer dos if con Arduino.
Series de If
No estaría mal, pero hay una forma más óptima de hacerlo, utilizando la sentencia condicional else con Arduino.
Else se puede traducir en español como «si no». Siempre va unido a una sentencia condicional if de Arduino, nunca puede ir sólo. Por lo tanto, if/else se traduciría como si se cumple la condición ejecuta el código, si no ejecuta este otro código.
Es lógico pensar que cuando estamos evaluando la misma variable, no puede tener dos valores. En este caso, la temperatura o es mayor que 25 o es menor o igual que 25, no queda otra.
La mayor ventaja de utilizar if/else es que haremos nuestro código más eficiente. En el primer caso (con dos if), siempre se evaluarán las dos condiciones, aunque una de ellas sea cierta.
Si por ejemplo la temperatura es 27º, cuando llegue al primer if, al ser la temperatura mayor que 25 ejecutará el código que hay dentro. Cuando termine, saldrá del if e irá al siguiente if. Comprobará si la temperatura es menor o igual que 25 algo absurdo si no se ha modificado nada dentro del primer if.
Aquí es donde entra en juego if/else.
Uso de If/else
Se sustituye el segundo if con la condición por un else. Estas sentencias condicionales no tienen ninguna condición, es decir, si no se cumple la condición o condiciones anteriores, siempre entrará por el else. La ventaja es que, si se cumple la primera condición, dejará de comprobar el resto de condiciones.
El circuito propuesto consta de un Arduino y pulsador que al presionarlo va a cambiar el estado del led,
ejmplo: si se pulsa se enciende el led y me mantiene encendido, si se vuelve a presionar se apaga el led, para ello usaremos:
• 1 Arduino uno
• 1 Diodos Leds color rojo
• 1 Resistencia 330Ω
• 1 Protoboard
• 1 Pulsador
Cambiar el estado del Led
Diagrama de flujo programa “Cambiar el estado del pulsador”