En algún momento, es necesario implementar la entrada de datos de usuario en nuestro código Arduino, utilizando la salida del monitor como un dispositivo de entrada.
La entrada de usuario será necesaria cuando se requiera crear un menú de selección u otros proyectos como por ejemplo una calculadora. El objetivo es registrar la entrada de información al usuario y enviarla a nuestra placa Arduino para procesarla y obtener un resultado basadoa en dicha entrada.
En esta sección aprenderás a mostrar una entrada de datos para el usuario en el monitor de Arduino y luego algunos ejemplos para implementar una interfaz de entrada de datos.
Entrada de datos de usuario en Arduino
Para obtener una entrada de un dato a un usuario desde el monitor, lo primero es solicitar la información al usuario.
Por lo general se muestra un mensaje en pantalla, indicando que debe ingresar un valor, un dato o hacer una selección.
Este mensaje será a través de una linea de texto predefinida por el programador. Se puede realizar mediante una función Serial.print()
para mostrar el mensaje en el monitor.
Luego el usuario debe registrar una entrada de datos que pueden ser de varios tipos: int, float o string.
Luego se implementa la funcion Serial.available()
dentro de un bucle while vacío, devolviendo el número de bytes disponibles para leer desde el puerto serie.
Cuando no hay entrada del usuario la función Serial.available()
devolverá un valor de cero.
Sin embargo, si el usuario ingresa datos y presiona la tecla de entrada, la función Serial.available()
devolverá un valor distinto de cero.
Esta característica es la que se usa en la lógica establecida en la condición del ciclo while vacío. De esta forma hacemos que el programa espere hasta que haya una entrada de datos del usuario:
while (Serial.available() == 0) {
}
Nuestro Sketch permanece dentro del ciclo while hasta el momento donde el usuario ingresa el dato y la función Serial.available()
devuelve un valor distinto a cero.
Finalmente se debe leer la información ingresada por el usuario y luego realizar una acción basada en esa entrada.
Para procesar los datos ingresados por el usuario, necesitamos leer dicha información que ha sido previamente almacenada en el búfer seriala través de una de estas tres funciones:
Serial.parseInt()
Serial.parseFloat()
Serial.readString()
El tipo de datos que vamos a pedir en nuestro código definirá qué función usar.
Si la selección será un número entero, por ejemplo, que selecciones la opción 1,2 o 3 se debe usar un Serial.parseInt()
.
Sin embargo si el dato que vamos a pedir será un número, que puede ser decimal usaremos un Serial.parseFloat()
.
Finalmente si queremos que se ingrese una cadena, usamos Serial.readString()
.
Leyendo los datos que ha ingresado el usuario
Antes de poder usar las funciones anteriores, es necesario declarar una variable para almacenar los datos que se van a procesar.
El tipo de datos de la variable debe coincidir con el tipo de datos de la función de entrada.
Por ejemplo, necesitaremos procesar la entrada de un número entero. Se debe declarar una variable de tipo int con el nombre que quieras, en este caso la llamaremos: Variable
y luego igualar a la función Serial.parseInt()
.
int Variable = Serial.parseInt();
Así de igual forma para otros tipos de datos como Float o String.
Ahora implementemos lo aprendido con algunos ejemplos.
Ejemplo de entrada de datos de usuario en Arduino
En este ejemplo se pide al usuario seleccione un valor entero en un menú que muestra unos valores de medida de un sensor de presión barométrica y humedad:
int temp;
int Rh;
int presion;
void setup() {
Serial.begin(9600);
Serial.println("1. Temperatura");
Serial.println("2. Humedad");
Serial.println("3. Presion Barometrica");
}
void loop() {
Serial.println("¿Cuál sensor desea medir? ");
while (Serial.available() == 0) {
}
int seleccionMenu = Serial.parseInt();
switch (seleccionMenu) {
case 1:
// Sensor de temperatura
Serial.print("La temperatura es: ");
Serial.println(temp);
break;
case 2:
// Sensor de humedad
Serial.print("La humedad es: ");
Serial.println(Rh);
break;
case 3:
// Sensor de presión barométrica
Serial.print("La presión barométrica es: ");
Serial.println(presion);
break;
default:
Serial.println("Por favor selecciona una opción:");
}
}
El código para controlar el sensor no se incluye en este Sketch.
Ejemplo de entrada de datos tipo Float
El siguiente ejemplo muestra como obtener un tipo de datos flotante de un usuario.
Este Sketch muestra una calculadora de conversión de peso en kilogramos a libras:
void setup() {
Serial.begin(9600);
Serial.println("**** Calculadora kilogramos a libras ****");
}
void loop() {
Serial.print("Por favor ingresa el peso en kg: ");
while (Serial.available() == 0) {
}
float pesoKg = Serial.parseFloat();
Serial.println(pesoKg);
float pesoLbs = pesoKg * 2.2046;
Serial.print("El peso en libras es: ");
Serial.println(pesoLbs);
}
Esperamos que esta sección te haya mostrado como implementar obtener la entrada de datos de usuario en un código de Arduino.