![Arduino UNO (creación de menús y funciones): 4 pasos Arduino UNO (creación de menús y funciones): 4 pasos](https://i.howwhatproduce.com/images/004/image-9747-10-j.webp)
Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:39
![Arduino UNO (creación de menús y funciones) Arduino UNO (creación de menús y funciones)](https://i.howwhatproduce.com/images/004/image-9747-11-j.webp)
![Arduino UNO (creación de menús y funciones) Arduino UNO (creación de menús y funciones)](https://i.howwhatproduce.com/images/004/image-9747-12-j.webp)
En este instructivo exploraremos cómo crear menús, leer la temperatura de un sensor TC74A0 y mostrar "valores" (en este caso, números de teléfono celular) de una manera infinita, pero limitada a la memoria interna del arduino.
Nosotros usaremos
-Arreglos
-Pantalla de cristal líquido
-Teclado
Guía de usuario incluida en el paso final.
Paso 1: componentes
Arduino Uno
· Teclado 4x4
· Sensor de temperatura digital TC74A0
· Módulo LCD I2c 16x2
· Pantalla de cristal líquido 16x2
· Cables de puente
· Protoboard
· Computadora personal
· IDE de Arduino
· Cable de transferencia
Paso 2: cableado de componentes
SENSOR DE TEMPERATURA Y LCD CONECTADOS EN LA MISMA LÍNEA A SDA Y SCL (A4, A5)
LCD (módulo I2c)
o SDA a A5 en Arduino
o SCL a A4 en Arduino
o VCC a 5V en Arduino
o GND a GND en Arduino
· Teclado 4 x 4
o Pin 1-8 en el teclado conectado al pin 9-2 en Arduino respectivamente
Sensor de temperatura TC74A0
o TC74A0 pin 2 a SDA en Arduino
o TC74A0 pin 3 a GND en Arduino
o TC74A0 pin 4 a SCL en Arduino
o TC74A0 pin 5 a 5V en Arduino
Paso 3: Código
#include // Incluye bibliotecas al compilar
#incluir
#incluir
#define Password_Lenght 5
#define Command_Lenght 3
#define CellNumber 10
int users = 0;
int Display = 0;
int dirección = 72; // tc74a0 DIRECCIÓN
int I = 0;
int USER;
int X = 0;
int XY = 0;
int temp;
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
char Data [Password_Lenght];
char Master [Password_Lenght] = "5466"; //CONTRASEÑA
char ExitData [Command_Lenght]; //
char Master1 [Command_Lenght] = "**"; //
char MenuItem;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
const byte FILAS = 4; // cuatro filas
const byte COLS = 4; // cuatro columnas
byte rowPins [FILAS] = {5, 4, 3, 2};
byte colPins [COLS] = {9, 8, 7, 6};
byte data_count = 0, master_count = 0;
bool Pass_is_good;
LiquidCrystal_I2C lcd (0x26, 16, 2);
char hexaKeys [ROWS] [COLS] = // INICIANDO TECLADO
{
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}
};
Teclado customKeypad = Teclado (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
configuración vacía ()
{
Serial.begin (9600); // esto crea el monitor serial
Wire.begin (); // esto crea un objeto Wire
lcd. comienzo (16, 2);
LCD luz de fondo();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Espere 3"); //CARGANDO PANTALLA
retraso (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Espere 2");
retraso (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Espere 1");
retraso (300);
lcd.clear ();
String myString = "ARDUINO INSTRUCTABLE";
lcd.setCursor (2, 2);
lcd.print (myString);
retraso (2500);
para (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
retraso (300);
}
lcd.clear ();
lcd.print ("Ingresar contraseña");
}
bucle vacío ()
{
switch (Display) // DÓNDE ESTAMOS EN EL MENÚ PRINCIPAL
{// ¿EL USUARIO PRESIONÓ A, B, C, D?
caso 0:
{
Contraseña();
}
rotura;
caso 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Menú principal");
Pantalla = 2;
retraso (100);
rotura;
}
caso 2:
{
char customKey = customKeypad.getKey ();
cambiar (customKey)
{
caso 'A':
{
Serial.println ("Se presionó A");
StoreUser ();
rotura;
}
caso 'B':
{
Serial.println ("Se presionó B");
si (usuarios == 0) {
lcd.clear ();
lcd.print ("NO HAY USUARIOS GUARDADOS");
retraso (3000);
lcd.clear ();
Pantalla = 1;
rotura;
}
DisplayUsers (); rotura;
}
caso 'C':
{
Serial.println ("Se presionó C"); // UTILIZADO DURANTE LAS PRUEBAS
int ext = 0;
while (! ext) {
char ch;
temp = TempMenu ();
if (temp! = tempPre) {
lcd.clear ();
lcd.print ("Temperatura");
lcd.setCursor (0, 1);
lcd.print (temp);
lcd.print ("C");
tempPre = temp;
retraso (500);
}
ch = customKeypad.getKey ();
if (ch == '*') // SALIR DEL MENÚ DE TEMPERATURA (si * PULSADO)
{
ext = 1;
lcd.clear ();
Pantalla = 1;
}
}
rotura;
TempMenu ();
rotura;
}
caso 'D':
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
retraso (3000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("MAYO 2019");
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
retraso (3000);
lcd.clear ();
Pantalla = 1;
}
}
}
}
}
// FUNCIONES PERSONALIZADAS PARA LLAMAR VALORES O PROCEDIMIENTOS
Void Password ()
{
char customKey = customKeypad.getKey ();
if (customKey) // se asegura de que una tecla esté realmente presionada, igual a (customKey! = NO_KEY)
{
Datos [recuento_datos] = customKey; // almacena char en la matriz de datos
lcd.setCursor (recuento_datos, 1); // mueve el cursor para mostrar cada nuevo carácter
lcd.print ("*"); // imprimir char en dicho cursor
cuenta_datos ++; // incrementa la matriz de datos en 1 para almacenar nuevos caracteres, también realiza un seguimiento del número de caracteres ingresados
}
if (data_count == Password_Lenght-1) // si el índice de la matriz es igual al número de caracteres esperados, compare los datos con el maestro
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("La contraseña es");
if (! strcmp (Datos, Maestro)) // igual a (strcmp (Datos, Maestro) == 0)
{
lcd.print ("Bueno");
lcd.clear ();
Pantalla = 1;
}
demás
lcd.print ("Malo");
delay (1000); // se agregó 1 segundo de retraso para asegurarse de que la contraseña se muestre completamente en la pantalla antes de que se borre.
lcd.clear ();
borrar datos();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Ingresar contraseña");
}
}
int TempMenu ()
{
Wire.beginTransmission (dirección);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (dirección, 1);
while (Wire.available () == 0);
int c = Wire.read ();
return c;
}
void clearData ()
{
while (recuento_datos! = 0)
{// Esto se puede utilizar para cualquier tamaño de matriz, Datos [recuento_datos--] = 0; // borrar matriz para nuevos datos
}
}
anular StoreUser ()
{
int ext = 0;
int usuario;
char ch;
while (! ext) {
lcd.clear ();
lcd.print ("Ingresar usuario");
usuario = usuarios + 1;
lcd.print (usuario);
int x = 0;
while (! x) {
para (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (ch);
userNum [usuario - 1] = ch;
}
retraso (500);
lcd.clear ();
lcd.print ("Continuar");
lcd.setCursor (0, 1);
lcd.print ("* sí # no");
ch = customKeypad.waitForKey ();
if (ch == '*') {
x = 1;
}
if (ch == '#') {
x = 1;
ext = 1;
lcd.clear ();
Pantalla = 1;
}
}
usuarios ++;
}
}
anular DisplayUsers ()
{
lcd.clear ();
para (int i = 0; i <usuarios; i ++) {
lcd.print ("Usuario guardado");
impresión lcd (i + 1);
para (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (userNum [u]);
}
retraso (2000);
lcd.clear ();
Pantalla = 1;
}
}
Paso 4: GUÍA DEL USUARIO
1. Al encender el proyecto, aparecerá una pantalla de carga o de bienvenida.
2. Aparecerá una pantalla de “Ingresar Contraseña”, esta pantalla le permite ingresar 4 caracteres, letras o números, la contraseña correcta es: 5466, esto le dará acceso al menú principal.
3. Al ingresar la contraseña correcta, aparecerá el menú principal con 4 opciones posibles para navegar por las diferentes funciones disponibles.
· A - Ingrese los números de teléfono celular del usuario.
o Ingrese 10 dígitos para guardar un usuario en el sistema
o Después de haber ingresado 10 dígitos, presione "*" para agregar más usuarios, o presione "#" para volver al menú principal
· B - Mostrar usuarios guardados
o Los usuarios se desplazarán más allá de la pantalla, se mostrarán durante 3 segundos cada uno, tan pronto como se muestren todos los usuarios, la página se cerrará y volverá al menú principal.
o Si no se agregaron usuarios en la opción A del menú, se mostrará “NO HAY USUARIOS GUARDADOS”.
· C: muestra la temperatura en vivo
o Presione "*" para volver al menú principal
· D - Mostrar texto corto
o Muestra el nombre del creador y el tema para el que se compiló con una fecha.
Recomendado:
Generador de funciones portátil en Arduino: 7 pasos (con imágenes)
![Generador de funciones portátil en Arduino: 7 pasos (con imágenes) Generador de funciones portátil en Arduino: 7 pasos (con imágenes)](https://i.howwhatproduce.com/images/002/image-4650-19-j.webp)
Generador de funciones portátil en Arduino: El generador de funciones es una herramienta muy útil, especialmente cuando estamos considerando probar la respuesta de nuestro circuito a una determinada señal. En este instructivo, describiré la secuencia de construcción de un generador de funciones portátil, pequeño y fácil de usar. Características de
Generador de tonos Arduino sin biblioteca o funciones en serie (con interrupciones): 10 pasos
![Generador de tonos Arduino sin biblioteca o funciones en serie (con interrupciones): 10 pasos Generador de tonos Arduino sin biblioteca o funciones en serie (con interrupciones): 10 pasos](https://i.howwhatproduce.com/images/001/image-2689-38-j.webp)
Generador de tonos Arduino sin funciones de biblioteca o serie (con interrupciones): esto no es algo en lo que normalmente haría un instructivo, prefiero mi trabajo en metal, pero como soy un estudiante de ingeniería eléctrica y tengo que tomar una clase sobre microcontroladores ( Embedded Systems Design), pensé en hacer un instructable en uno de mis p
Robot de bricolaje con múltiples funciones con Arduino: 13 pasos (con imágenes)
![Robot de bricolaje con múltiples funciones con Arduino: 13 pasos (con imágenes) Robot de bricolaje con múltiples funciones con Arduino: 13 pasos (con imágenes)](https://i.howwhatproduce.com/images/003/image-6431-103-j.webp)
Robot de bricolaje con múltiples funciones con Arduino: este robot se construyó principalmente para comprender Arduino y combinar varios proyectos de Arduino para formar un robot Arduino con múltiples funciones. Y además, ¿quién no quiere tener un robot como mascota? Así que lo llamé BLUE ROVIER 316. Podría haber comprado un hermoso
Guardián V1.0 --- Actualización de la cámara de mirilla de la puerta con Arduino (funciones de grabación por detección de movimiento y descarga eléctrica): 5 pasos
![Guardián V1.0 --- Actualización de la cámara de mirilla de la puerta con Arduino (funciones de grabación por detección de movimiento y descarga eléctrica): 5 pasos Guardián V1.0 --- Actualización de la cámara de mirilla de la puerta con Arduino (funciones de grabación por detección de movimiento y descarga eléctrica): 5 pasos](https://i.howwhatproduce.com/images/001/image-1694-84-j.webp)
Guardián V1.0 ||| Actualización de la cámara de mirilla de puerta con Arduino (funciones de grabación por detección de movimiento y descarga eléctrica): he pedido una cámara de mirilla, pero cuando la uso, me di cuenta de que no hay una función de grabación automática (activada por detección de movimiento). Luego comencé a investigar cómo funciona. Para grabar un video, debes 1- mantener presionado el botón de encendido casi 2 segundos
Montaje de "Wise Clock 2" (reloj despertador basado en Arduino con muchas funciones adicionales): 6 pasos
![Montaje de "Wise Clock 2" (reloj despertador basado en Arduino con muchas funciones adicionales): 6 pasos Montaje de "Wise Clock 2" (reloj despertador basado en Arduino con muchas funciones adicionales): 6 pasos](https://i.howwhatproduce.com/preview/how-and-what-to-produce/11138912-assembling-wise-clock-2-arduino-based-alarm-clock-with-lots-of-extra-features-6-steps-j.webp)
Montaje de "Wise Clock 2" (reloj despertador basado en Arduino con muchas funciones adicionales): este tutorial muestra cómo montar el kit para Wise Clock 2, un proyecto de código abierto (hardware y software). Un kit completo de Wise Clock 2 se puede comprar aquí. En resumen, esto es lo que puede hacer Wise Clock 2 (con el software de código abierto actual