Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
În acest instructable vom explora cum să creăm meniuri, să citim temperatura de la un senzor TC74A0 și să afișăm „valori” (în acest caz numerele de telefon mobil) într-un mod infinit, dar limitat la memoria arduino de la bord.
Vom folosi
-Matrici
-Ecran cu cristale lichide
-Tastatura
Ghidul utilizatorului inclus în pasul final.
Pasul 1: Componente
Arduino Uno
· Tastatură 4x4
· Senzor digital de temperatură TC74A0
· Modul LCD I2c 16x2
· Afișaj cu cristale lichide 16x2
· Firele jumperului
· Pană de pâine
· Calculator personal
· IDE Arduino
· Cablu de transfer
Pasul 2: Cablarea componentelor
SENZOR DE TEMP ȘI LCD CONECTAT PE ACEEAȘI LINIE LA SDA ȘI SCL (A4, A5)
LCD (modul I2c)
o SDA la A5 pe Arduino
o SCL la A4 pe Arduino
o VCC la 5V pe Arduino
o GND la GND pe Arduino
· Tastatură 4 x 4
o Pinul 1 - 8 de pe tastatură conectat la pinul 9 - 2 de pe Arduino, respectiv
Senzor de temperatură TC74A0
o TC74A0 pin 2 la SDA pe Arduino
o TC74A0 pinul 3 la GND pe Arduino
o TC74A0 pinul 4 la SCL pe Arduino
o TC74A0 pin 5 la 5V pe Arduino
Pasul 3: Cod
#include // Include biblioteci la compilare
#include
#include
#define Password_Lenght 5
#define Command_Lenght 3
#define Numărul de celulă 10
utilizatori int = 0;
int Afișaj = 0;
adresa int = 72; // tc74a0 ADRESA
int I = 0;
int UTILIZATOR;
int X = 0;
int XY = 0;
int temp;
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
char Data [Password_Lenght];
char Master [Password_Lenght] = "5466"; //PAROLA
char ExitData [Command_Lenght]; //
char Master1 [Command_Lenght] = "**"; //
char MenuItem;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
octet const ROWS = 4; // patru rânduri
octet const COLS = 4; // patru coloane
byte rowPins [ROWS] = {5, 4, 3, 2};
octet colPins [COLS] = {9, 8, 7, 6};
octet date_count = 0, master_count = 0;
bool Pass_is_good;
LiquidCrystal_I2C lcd (0x26, 16, 2);
char hexaKeys [ROWS] [COLS] = // INITIATING KEYPAD
{
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}
};
Tastatură personalizatăTastatură = Tastatură (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
configurare nulă ()
{
Serial.begin (9600); // se creează Serial Monitor
Wire.begin (); // aceasta creează un obiect Wire
lcd.inceput (16, 2);
lcd.backlight ();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print („Vă rugăm să așteptați 3”); // ECRANUL DE ÎNCĂRCARE
întârziere (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print („Vă rugăm să așteptați 2”);
întârziere (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print („Vă rugăm să așteptați 1”);
întârziere (300);
lcd.clear ();
String myString = "ARDUINO INSTRUCTABLE";
lcd.setCursor (2, 2);
lcd.print (myString);
întârziere (2500);
for (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
întârziere (300);
}
lcd.clear ();
lcd.print („Introduceți parola”);
}
bucla nulă ()
{
comutați (Afișați) // UNDE ÎN MENIUL PRINCIPAL SUNTEM
{// UTILIZATORUL A APĂSAT A, B, C, D
caz 0:
{
Parola();
}
pauză;
cazul 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print („Meniul principal”);
Afișaj = 2;
întârziere (100);
pauză;
}
cazul 2:
{
char customKey = customKeypad.getKey ();
comutare (customKey)
{
cazul „A”:
{
Serial.println ("A a fost apăsat");
StoreUser ();
pauză;
}
cazul „B”:
{
Serial.println ("B a fost apăsat");
if (utilizatori == 0) {
lcd.clear ();
lcd.print („FĂRĂ UTILIZATORI SALVATI”);
întârziere (3000);
lcd.clear ();
Afișaj = 1;
pauză;
}
DisplayUsers (); pauză;
}
cazul „C”:
{
Serial.println ("C a fost apăsat"); // FOLOSIT ÎN TIMP
int ext = 0;
while (! ext) {
char ch;
temp = TempMenu ();
if (temp! = tempPre) {
lcd.clear ();
lcd.print ("Temparatura");
lcd.setCursor (0, 1);
lcd.print (temp);
lcd.print ("C");
tempPre = temp;
întârziere (500);
}
ch = customKeypad.getKey ();
if (ch == '*') // IEȘIȚI DIN MENIUL DE TEMPERATURĂ (dacă * APĂSAȚI)
{
ext = 1;
lcd.clear ();
Afișaj = 1;
}
}
pauză;
TempMenu ();
pauză;
}
cazul „D”:
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
întârziere (3000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print („MAI 2019”);
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
întârziere (3000);
lcd.clear ();
Afișaj = 1;
}
}
}
}
}
// FUNCȚII PERSONALIZATE DE A APELA VALORI SAU PROCEDURI
anula parola ()
{
char customKey = customKeypad.getKey ();
dacă (customKey) // se asigură că o tastă este de fapt apăsată, egal cu (customKey! = NO_KEY)
{
Date [date_count] = customKey; // stochează caracterele în matrice de date
lcd.setCursor (date_count, 1); // mutați cursorul pentru a afișa fiecare caracter nou
lcd.print ("*"); // imprimați caracterul la cursorul menționat
date_count ++; // creșteți matricea de date cu 1 pentru a stoca noi caractere, de asemenea, țineți evidența numărului de caractere introduse
}
if (data_count == Password_Lenght-1) // dacă indexul matricei este egal cu numărul de caractere așteptate, comparați datele cu masterul
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print („Parola este”);
if (! strcmp (Data, Master)) // egal cu (strcmp (Data, Master) == 0)
{
lcd.print („Bun”);
lcd.clear ();
Afișaj = 1;
}
altceva
lcd.print („Bad”);
delay (1000); // a adăugat 1 second întârziere pentru a vă asigura că parola este complet afișată pe ecran înainte de a fi ștearsă.
lcd.clear ();
date clare();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print („Introduceți parola”);
}
}
int TempMenu ()
{
Wire.beginTransmission (adresa);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (adresa, 1);
while (Wire.available () == 0);
int c = Wire.read ();
retur c;
}
void clearData ()
{
while (date_count! = 0)
{// Aceasta poate fi utilizată pentru orice dimensiune de matrice, Date [date_count--] = 0; // ștergeți matricea pentru date noi
}
}
void StoreUser ()
{
int ext = 0;
int utilizator;
char ch;
while (! ext) {
lcd.clear ();
lcd.print („Introduceți utilizatorul”);
utilizator = utilizatori + 1;
lcd.print (utilizator);
int x = 0;
while (! x) {
for (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (ch);
userNum [utilizator - 1] = ch;
}
întârziere (500);
lcd.clear ();
lcd.print („Continuați”);
lcd.setCursor (0, 1);
lcd.print ("* da # nu");
ch = customKeypad.waitForKey ();
if (ch == '*') {
x = 1;
}
if (ch == '#') {
x = 1;
ext = 1;
lcd.clear ();
Afișaj = 1;
}
}
utilizatori ++;
}
}
void DisplayUsers ()
{
lcd.clear ();
for (int i = 0; i <utilizatori; i ++) {
lcd.print („Utilizator salvat”);
lcd.print (i + 1);
for (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (userNum [u]);
}
întârziere (2000);
lcd.clear ();
Afișaj = 1;
}
}
Pasul 4: GHIDUL UTILIZATORULUI
1. La pornirea proiectului, va apărea un ecran de încărcare sau de întâmpinare.
2. Va apărea un ecran „Introduceți parola”, acest ecran vă permite să introduceți 4 caractere, litere sau cifre, parola corectă este: 5466, aceasta vă va permite accesul la meniul principal.
3. La introducerea parolei corecte, va apărea meniul principal cu 4 opțiuni posibile pentru a naviga diferitele funcții disponibile.
· A - Introduceți numerele de telefon mobil ale utilizatorului.
o Introduceți 10 cifre pentru a salva un utilizator în sistem
o După introducerea a 10 cifre, apăsați „*“pentru a adăuga mai mulți utilizatori sau apăsați „#” pentru a ieși din nou în meniul principal
· B - Afișează utilizatorii salvați
o Utilizatorii vor parcurge ecranul, vor fi afișați timp de 3 secunde fiecare, de îndată ce sunt afișați toți utilizatorii, pagina se va închide și va reveni la meniul principal.
o Dacă nu a fost adăugat niciun utilizator în opțiunea de meniu A, acesta va afișa „NICI UN UTILIZATOR SALVAT”.
· C - Afișează temperatura curentă
o Apăsați „*“pentru a reveni la meniul principal
· D - Afișează text scurt
o Afișează numele creatorului și subiectul pentru care a fost compilat cu o dată.