Casi cualquier aparato electrónico hoy en día incluye una tecla, botón, pulsador o switch. Los proyectos con Arduino no son la excepción y virtualmente cualquier idea que desarrollemos dispondrá de al menos un par de botones.
Para conectar un botón al Arduino conviene tener en mente ciertos puntos:
• Un botón puede conectarse a cualquier pin de Arduino (digital o analógico, ya que los analógicos usualmente funcionan también como digitales).
• Existen dos configuraciones posibles: con resistencia pull-up o resistencia pull-down.
• Configuraremos el pin seleccionado como entrada digital.
• Podemos usar las resistencias pull-up internas del arduino, con la instrucción: INPUT_PULLUP
• Es necesario utilizar una resistencia pull-up o pull-down, ya sea interna o externa.
Las dos formas que existen para conectar un botón al Arduino se visualizan en los siguientes diagramas:
Formas de conectar pulsadores en Arduino
La función primordial de las resistencias en el circuito del botón es mantener un estado lógico conocido cuando el botón no está siendo accionado. Esto es necesario ya que las entradas del microcontrolador, si se dejan al aire, no poseen un estado determinado y pueden ir a cualquiera de dos estados posibles de forma aleatoria. Según la necesidad, se pueden colocar las resistencias en pines de entrada, obteniendo los siguientes efectos:
• La resistencia pull-up mantiene un estado alto en el pin mientras el pulsador no es accionado, el estado activo del botón es BAJO (cuando se presiona).
• La resistencia pull-down mantiene un estado bajo mientras el pulsador no es accionado, el estado activo del botón es ALTO (cuando se presiona).
Arduino posee en cada pin de entrada una resistencia pull-up que se puede activar bajo control de nuestro programa, evitándonos tener que colocar de forma externa este componente.
Para la conexión de un interruptor, no es necesario utilizar resistencias PULL-UP, ya que los interruptores no generan rebotes y se puede definir en todo momento cada estado (LOW, HIGH). Para definir en Arduino la entrada de un interruptor basta con definir el puerto digital como estrada (pinMode(1, INPUT);)
Para la conexión de un interruptor, no es necesario utilizar resistencias PULL-UP, ya que los interruptores no generan rebotes y se puede definir en todo momento cada estado (LOW, HIGH). Para definir en Arduino la entrada de un interruptor basta con definir el puerto digital como estrada (pinMode(1, INPUT);)
If es una instrucción que se utiliza para comprobar si una determinada condición se ha alcanzado, como por ejemplo averiguar si un valor analógico está por encima de un cierto número. Si la condición es TRUE (cierta) se ejecutan una serie de declaraciones (operaciones) que se escriben dentro de llaves.
Sintax de condicional If
Si es FALSE (la condición no se cumple) el programa se salta las llaves y no ejecuta las operaciones que están dentro de ellas. La sintaxis de la sentencia if con Arduino es muy sencilla. Comenzamos escribiendo la palabra reservada if (en español se traduce como si condicional). Luego entre paréntesis ponemos la condición y por último abrimos y cerramos las llaves.
La condición es la que hará que se ejecute el código que hay entre las llaves. Si es verdadera, el flujo del código de Arduino entrará dentro de las llaves y ejecutará todo lo que hay dentro
Realmente, para que algo sea verdadero o falso necesitamos compararlo con algo. Lo típico es utilizar la sentencia condicional if, tradicionalmente solemos utilizar el término igual, con números, pero también se pueden utilizar otro tipo de datos.
Condicional If con operadores de comparación
Podemos comparar temperatura, presión atmosférica, radiación ultravioleta, tiempo, intensidad, voltaje, nivel de agua y cualquier magnitud susceptible de ser medida.
Algo que creo que todos entendemos es la temperatura. Por ejemplo, podemos escribir un código donde dependiendo de la temperatura mueva un servomotor que activa un ventilador.
En este caso estamos diciendo que siempre que la temperatura sea mayor que 25, mueva un servomotor. Pero también podríamos haber programado si la temperatura es menor que 30 o si es mayor o igual que 25.
Todo lo expuesto anteriormente son comparaciones. Lo único que hacemos es comparar dos valores y evaluamos si es verdadero o falso. Para poder comparar se utilizan los operadores de comparación.
Con la sentencia if con Arduino se pueden utilizar 6 operadores de comparación:
• x == y (x es igual a y)
• x! = y (x es diferente de 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)
Un operador booleano nos permite hacer combinaciones entre condiciones dentro de un if en Arduino. Esta herramienta de programación es muy potente y se utiliza en muchos casos. Existen 3 operadores booleanos:
• || or (0)
• && and (y)
• ! not (no)
En español se puede traducir como «o esto o lo otro». Se representa con dos líneas verticales (||). Este operador hace que la condición del if con Arduino sea cierta si se cumple alguna de las dos o varias condiciones. Por ejemplo, si tenemos este código
Condición con booleano AND.
Estamos diciendo que siempre que el valor sea mayor que 300 o que el valor sea menor que 200, muestre un texto por el monitor serie. Esto quiere decir que siempre que el valor esté entre 201 y 299 no mostrará ningún texto. En el resto de los casos, mostrará el texto en el monitor serie.
En español se puede traducir por «esto y aquello». Se representa con dos símbolos ampersand (&&). Este operador hace que la condición del if con Arduino sea cierta sólo si se cumplen las dos o varias condiciones. Por ejemplo, si tenemos el código
Condición con booleano OR.
Quiere decir que sólo será cierta si el valor es mayor que 300 y el valor es menor de 500. Esto nos da un rango de valores de entre 301 y 499 (no olvides que los símbolos > y < excluyen a los números a la derecha). Por lo tanto, sólo cuando se encuentre en ese rango mostrará el texto en el monitor serie.
En español se traduce como «no». Se representa con el signo de admiración final (!). Lo que hace este operador es algo extraño. Si una expresión es verdadera devuelve falso y si es falsa devuelve verdadero. los tipos de datos booleanos son siempre falsos siempre y cuando valga 0, en caso contrario es verdadero
Para poder usar la comunicación serial del Arduino, es necesario el uso de varias funciones. La funciones más importantes que debemos conocer para manejar el puerto serie son: begin(), read(), write(), print() y available()
• begin() – establece la velocidad de la UART en baudios para la transmisión serie, también es posible configurar el número de bits de datos, la paridad y los bits de stop, por defecto es 8 bits de datos, sin paridad y un bit de stop.[Serial.begin()]
• read() – lee el primer byte entrante del buffer serie. [Serial.read ()]
• write() – escribe datos en binario sobre el puerto serie. El dato es enviado como un byte o serie de bytes.[Serial.write()]
• print() – imprime datos al puerto serie como texto ASCII, también permite imprimir en otros formatos.[Serial.print()]
• println()-- Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro (ASCII 13, o ‘\r’) y un carácter de avance de línea (ASCII 10, o ‘\n’). Este comando tiene la misma forma que Serial.print ().[Serial.println()]
El circuito propuesto consta de tres interruptores que van a funcionar como llave para verificar si la combinación es correcta, y un pulsador, que, al presionarlo imprime por puerto serial si es correcta o errónea la clave, para ello usaremos:
• 1 Arduino uno
• 1 Pulsador
• 3 Slideswitch
• 1 Protoboard
Circuito: Enviar por puerto serie si clave es correcta