Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
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.