Índice:
Vídeo: Arduino UNO (criando menus e funções): 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Neste instrutível estaremos explorando como criar menus, ler a temperatura de um sensor TC74A0 e exibir "valores" (neste caso, números de celular) de uma maneira infinita, mas limitada à memória interna do arduino.
Estaremos usando
-Arrays
-Visor de cristal líquido
-Teclado
Guia do usuário incluído na etapa final.
Etapa 1: Componentes
Arduino Uno
· Teclado 4x4
· Sensor de temperatura digital TC74A0
· Módulo I2c 16x2 LCD
· Tela de cristal líquido 16x2
· Fios de ligação
· Breadboard
· Computador pessoal
· IDE Arduino
· Cabo de transferência
Etapa 2: Fiação do componente
SENSOR DE TEMP. E LCD CONECTADOS NA MESMA LINHA A SDA E SCL (A4, A5)
LCD (Módulo I2c)
o SDA para A5 no Arduino
o SCL para A4 no Arduino
o VCC para 5V no Arduino
o GND para GND no Arduino
· Teclado 4 x 4
o Pino 1 - 8 no teclado conectado ao pino 9 - 2 no Arduino, respectivamente
Sensor de temperatura TC74A0
o TC74A0 pino 2 para SDA no Arduino
o TC74A0 pino 3 para GND no Arduino
o TC74A0 pino 4 para SCL no Arduino
o TC74A0 pino 5 a 5V no Arduino
Etapa 3: Código
#include // Inclui bibliotecas ao compilar
#incluir
#incluir
#define Password_Lenght 5
#define Command_Lenght 3
# define CellNumber 10
usuários internos = 0;
exibição int = 0;
endereço interno = 72; // tc74a0 ENDEREÇO
int I = 0;
int USER;
int X = 0;
int XY = 0;
int temp;
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
Dados de char [Password_Lenght];
char Master [Password_Lenght] = "5466"; //SENHA
char ExitData [Command_Lenght]; //
char Master1 [Command_Lenght] = "**"; //
char MenuItem;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
const byte ROWS = 4; // quatro linhas
const byte COLS = 4; // quatro colunas
byte rowPins [ROWS] = {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);
void setup ()
{
Serial.begin (9600); // isso cria o Monitor Serial
Wire.begin (); // isso cria um objeto Wire
lcd.begin (16, 2);
lcd.backlight ();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Aguarde 3"); // TELA DE CARREGAMENTO
atraso (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Aguarde 2");
atraso (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Aguarde 1");
atraso (300);
lcd.clear ();
String myString = "ARDUINO INSTRUCTABLE";
lcd.setCursor (2, 2);
lcd.print (myString);
atraso (2500);
for (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
atraso (300);
}
lcd.clear ();
lcd.print ("Digite a senha");
}
void loop ()
{
switch (Display) // ONDE ESTAMOS NO MENU PRINCIPAL
{// O USUÁRIO PRESSIONOU A, B, C, D
caso 0:
{
Senha();
}
pausa;
caso 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Menu principal");
Exibir = 2;
atraso (100);
pausa;
}
caso 2:
{
char customKey = customKeypad.getKey ();
switch (customKey)
{
caso 'A':
{
Serial.println ("A foi pressionado");
StoreUser ();
pausa;
}
caso 'B':
{
Serial.println ("B foi pressionado");
if (usuários == 0) {
lcd.clear ();
lcd.print ("NENHUM USUÁRIO SALVO");
atraso (3000);
lcd.clear ();
Display = 1;
pausa;
}
DisplayUsers (); pausa;
}
caso 'C':
{
Serial.println ("C foi pressionado"); // USADO DURANTE O TESTE
int ext = 0;
while (! ext) {
char ch;
temp = TempMenu ();
if (temp! = tempPre) {
lcd.clear ();
lcd.print ("Temparature");
lcd.setCursor (0, 1);
lcd.print (temp);
lcd.print ("C");
tempPre = temp;
atraso (500);
}
ch = customKeypad.getKey ();
if (ch == '*') // SAIR DO MENU DE TEMPERATURA (se * PRESSIONADO)
{
ext = 1;
lcd.clear ();
Display = 1;
}
}
pausa;
TempMenu ();
pausa;
}
caso 'D':
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
atraso (3000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("MAIO 2019");
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
atraso (3000);
lcd.clear ();
Display = 1;
}
}
}
}
}
// FUNÇÕES PERSONALIZADAS PARA VALORES OU PROCEDIMENTOS DE CHAMADA
void Password ()
{
char customKey = customKeypad.getKey ();
if (customKey) // garante que uma tecla seja realmente pressionada, igual a (customKey! = NO_KEY)
{
Dados [data_count] = customKey; // armazena char na matriz de dados
lcd.setCursor (data_count, 1); // move o cursor para mostrar cada novo caractere
lcd.print ("*"); // imprime o caractere no referido cursor
data_count ++; // incrementa a matriz de dados em 1 para armazenar novos caracteres, também mantém o controle do número de caracteres inseridos
}
if (data_count == Password_Lenght-1) // se o índice da matriz é igual ao número de caracteres esperados, compare os dados com o mestre
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("A senha é");
if (! strcmp (Dados, Mestre)) // igual a (strcmp (Dados, Mestre) == 0)
{
lcd.print ("Bom");
lcd.clear ();
Exibição = 1;
}
outro
lcd.print ("Ruim");
delay (1000); // adicionado 1 segundo de atraso para garantir que a senha seja completamente exibida na tela antes de ser apagada.
lcd.clear ();
apagar os dados();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Digite a senha");
}
}
int TempMenu ()
{
Wire.beginTransmission (endereço);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (endereço, 1);
while (Wire.available () == 0);
int c = Wire.read ();
return c;
}
void clearData ()
{
while (data_count! = 0)
{// Isso pode ser usado para qualquer tamanho de array, Dados [data_count--] = 0; // limpar array para novos dados
}
}
void StoreUser ()
{
int ext = 0;
usuário int;
char ch;
while (! ext) {
lcd.clear ();
lcd.print ("Insira o usuário");
usuário = usuários + 1;
lcd.print (usuário);
int x = 0;
enquanto (! x) {
para (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (ch);
userNum [usuário - 1] = ch;
}
atraso (500);
lcd.clear ();
lcd.print ("Continuar");
lcd.setCursor (0, 1);
lcd.print ("* sim # não");
ch = customKeypad.waitForKey ();
if (ch == '*') {
x = 1;
}
if (ch == '#') {
x = 1;
ext = 1;
lcd.clear ();
Exibição = 1;
}
}
usuários ++;
}
}
void DisplayUsers ()
{
lcd.clear ();
para (int i = 0; i <usuários; i ++) {
lcd.print ("Usuário salvo");
lcd.print (i + 1);
para (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (userNum [u]);
}
atraso (2000);
lcd.clear ();
Display = 1;
}
}
Etapa 4: GUIA DO USUÁRIO
1. Ao ligar o projeto, uma tela de carregamento ou de boas-vindas aparecerá.
2. Uma tela “Enter Password” irá aparecer, esta tela permite que você insira 4 caracteres, letras ou números, a senha correta é: 5466, isso irá permitir o acesso ao menu principal.
3. Ao inserir a senha correta, o menu principal aparecerá com 4 opções possíveis para navegar pelas diferentes funções disponíveis.
· A - Insira os números de telefone celular do usuário.
o Insira 10 dígitos para salvar um usuário no sistema
o Depois de inserir os 10 dígitos, pressione “*“para adicionar mais usuários ou pressione “#” para voltar ao menu principal
· B - Exibir usuários salvos
o Os usuários irão rolar além da tela, eles são exibidos por 3 segundos cada, assim que todos os usuários forem exibidos a página será fechada e retornará ao menu principal.
o Se nenhum usuário foi adicionado na opção A do menu, será exibido “NENHUM USUÁRIO SALVO”.
· C - Exibe a temperatura ao vivo
o Pressione “*“para voltar ao menu principal
· D - Exibir texto curto
o Exibe o nome do criador e o assunto para o qual foi compilado com uma data.
Recomendado:
FERRAMENTA DE MEDIÇÃO DIGITAL MULTI-FUNÇÕES: 21 etapas (com imagens)
FERRAMENTA DE MEDIÇÃO DIGITAL MULTI-FUNÇÕES: Olá a todos. Sempre quis um dispositivo que me ajudasse a nivelar minha mesa de impressora 3D e algum outro dispositivo que me ajudasse a obter um comprimento aproximado de uma superfície curva para que eu pudesse cortar facilmente o comprimento certo do adesivo para
Como usar o terminal Mac e como usar as funções principais: 4 etapas
Como usar o Terminal Mac e como usar as funções principais: Mostraremos como abrir o Terminal MAC. Também mostraremos alguns recursos do Terminal, como ifconfig, alteração de diretórios, acesso a arquivos e arp. Ifconfig permitirá que você verifique seu endereço IP e seu anúncio MAC
Funções de bit IoT: 6 etapas
Funções de bit de IoT: Neste instrutível, mostraremos como usar a GUI de funções de bit de IoT para seus minicomputadores como o Raspberry Pi 1,2 e 3. As funções que a GUI terá em V1 são: " Enviar SMS ", " Exibir SMS ", " De
Gerenciar 100 dispositivos em aplicativos, organizações, funções e usuários Ubidots: 11 etapas
Gerenciar 100 dispositivos em aplicativos, organizações, funções e usuários Ubidots: nesta oportunidade, decidi testar a praticidade da plataforma IoT Ubidots para gerenciamento de usuários no caso de haver muitos dispositivos para várias organizações ou empresas sob o mesmo Plataforma Ubidots. Informação do prefeito: u
Gerador de tons Arduino sem biblioteca ou funções seriais (com interrupções): 10 etapas
Gerador de tons do Arduino sem biblioteca ou funções seriais (com interrupções): Isso não é algo que eu normalmente faria um instrutivo, eu prefiro meu trabalho em metal, mas como sou um estudante de engenharia elétrica e tenho que fazer uma aula sobre microcontroladores ( Embedded Systems Design), pensei em fazer um instrutível em um dos meus p