El uso de variables, Entradas digitales y el operador negación

Aquí vamos a ver el uso de las variable.    Las variables son necesarias, para guardar valores que luego se utilizarán cuando sean necesarias o se cambiarán dichos valores por otros valores cuando sea necesario.

Ya vimos como usábamos una variable i en el bucle for.  En este caso la variable se utilizaba para guarda valor que había que comparar para saber si se ejecutaba el código dentro de for o no.

Ahora vamos a ver un uso más general, es decir, vamos a sustituir el número del pin por un nombre, con idea de que sea más fácil de identificar cuando revisemos el código.

Las variables se declaran al principio del código, antes de la función setup, con ellos se consigue que se pueda usar desde cualquier parte del código. 

Para declarar una variable debemos poner el tipo de dato que va a contener la variable

int (integer)
Son números enteros sin parte decimal y pueden ser negativos, positivo o el cero.

float (floating o coma flotante)
Son números reales con y sin parte decimal, tiene que llevar punto a la fuerza

char (carácter)
Son caracteres letra, y siempre se ponen entre comillas simples

Bool (boolean)
Solo admite dos valores true o false

A continuación le vamos a dar a la variable el nombre que queramos siempre que se ajuste a lo siguiente:

El nombre de las variables no puede ser una palabra reservada del lenguaje de programación como por ejemplo pinMode, tampoco pueden llevar espacios en blanco, ni signos de puntuación intercalado, tampoco la Ñ o ñ, ni las vocales con tildes y debe comenzar por una letra, nunca por un número.

y punto y coma.  De esta manera solo declaramos la variable, pero tambien se puede inicializar. 

Inicializar una variable es asignarle un valor inicial para ello utilizamos el signo =  le asignamos el valor correspondiente y finalizamos con el ;

En este caso declararemos e inicializaremos las siguientes variables

int LED = 6;

int boton=10;

ENTRADAS DIGITALES
Dentro de la función void setup() establecíamos con pin mode un pin como salida digital:

void setup()
{
           pinMode (6, OUTPUT);
}

Esta es la manera de establecer el pin 6 como salida digital, pero hemos declarado una variable a la que hemos llamado LED y le asignamos el valor 6, así que podemo utilizarla para declarar el pin 6 como salida y a su vez nombramos el pin 6


void setup()
{
           pinMode (LED, OUTPUT);
}

Del mismo modo que hemos asignado el pin 6 como salida digital, vamos a asignar el pin 10 como entrada digital, solo que en lugar de usar OUTPUT usaremos INPUT


void setup()
{
           pinMode (LED, OUTPUT);
           pinMode (10, INPUT);
}

Del mismo modo, podemos utilizar la variable "boton" en lugar del número 10

void setup()
{
           pinMode (LED, OUTPUT);
           pinMode (boton, INPUT);
}

digitalRead
Vimos que para encender el LED usábamos digitalWrite ( PIN, HIGH); y para apagarlo usábamos digitalWrite (PIN, LOW); siendo PIN un pin digital establecido en modo salida.

Cuando tenemos un pin digital establecido en modo entrada (input) para que Arduino pueda enterder o leer esa entrada vamos a utilizar digitalRead(PIN) como asignación o valor de una variable en la que vamos a guardar lo que haya en el momento en la entrada. Vemos como podría quedar nuestro código de ejemplo

void loop()
{
        int valor = digitalRead(boton);
        digitalWrite(LED, valor);
}

Como vemos arduino guardará el valor leido en boton, dentro de la variable valor, luego mandará al pin LED, el valor guardado en la variable valor que podrá ser un HIGH o un LOW

De esta manera no quedaría el código para conectar un pulsador normalmente abierto o un sensor, etc. que nos permitiera gobernar un LED conectado a un pin de arduino.

OPERADOR DE NEGACIÓN
Con el código utilizado hasta ahora, lo que conseguimos es que cuando se conecte arduino, el LED permanecerá encendido, hasta que presionemos el pulsador, entonces el LED se apagará.  Este uso está muy bien para las puertas, como la puerta de la nevera o del microondas, pero ¿cómo podemos conseguir justo lo contrario sin modificar el circuito?, es justo aquí donde entra el operador de negación

El operador de negación (!) lo que hace es que invierte el valor de lo que recibe o acompaña, en el caso del código de ejemplo, bastaría con poner el operador negación a la variable valor dentro del digitalWrite, con ello le estamos diciendo que es el pin del LED escriba lo contrario de lo que tendría que escribir, así de fácil. Todo lo demás sigue igual. Esto podemos hacerlo con las salidas en digitalWrite(), pero no lo podemos hacer con la entradas con digitalRead().


Esta operación de negación es tan frecuente que existe un tipo de dato llamado bool que solo acepta valores true o false como señalábamos al principio.

Podemos escribir una variante, designando a la variable valor como variable tipo bool usando.