Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
U ovom uputstvu ćemo istražiti kako stvoriti izbornike, očitati temperaturu s senzora TC74A0 i prikazati "vrijednosti" (u ovom slučaju brojeve mobitela) na način koji je beskonačan, ali ograničen na memoriju arduina na ploči.
Koristit ćemo
-Nizovi
-Zaslon s tekućim kristalima
-Tipkovnica
Korisnički priručnik uključen u posljednji korak.
Korak 1: Komponente
Arduino Uno
· 4x4 tipkovnica
· TC74A0 digitalni osjetnik temperature
· I2c 16x2 LCD modul
· Zaslon s tekućim kristalima 16x2
· Kratkospojne žice
· Oglasna ploča
· Osobno računalo
· Arduino IDE
· Prijenosni kabel
Korak 2: Komponentno ožičenje
TEMP. SENZOR I LCD POVEZANI NA ISTOJ LINIJI NA SDA I SCL (A4, A5)
LCD (I2c modul)
o SDA do A5 na Arduinu
o SCL do A4 na Arduinu
o VCC na 5V na Arduinu
o GND do GND na Arduinu
· 4 x 4 tipkovnica
o Pin 1 - 8 na tipkovnici spojen na pin 9 - 2 na Arduinu
TC74A0 senzor temperature
o TC74A0 pin 2 na SDA na Arduinu
o TC74A0 pin 3 na GND na Arduinu
o TC74A0 pin 4 za SCL na Arduinu
o TC74A0 pin 5 do 5V na Arduinu
Korak 3: Kodirajte
#include // Uključuje knjižnice pri prevođenju
#uključi
#uključi
#define Password_Lenght 5
#define Command_Lenght 3
#define CellNumber 10
int korisnici = 0;
int Prikaz = 0;
int adresa = 72; // tc74a0 ADRESA
int I = 0;
int KORISNIK;
int X = 0;
int XY = 0;
int temp;
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
char Podaci [Lozinka_dužina];
char Master [Password_Lenght] = "5466"; //LOZINKA
char ExitData [Command_Lenght]; //
char Master1 [Command_Lenght] = "**"; //
char Izbornik;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
const byte ROWS = 4; // četiri reda
const bajt COLS = 4; // četiri stupca
byte rowPins [ROWS] = {5, 4, 3, 2};
bajt colPins [COLS] = {9, 8, 7, 6};
bajt data_count = 0, master_count = 0;
bool Pass_is_dood;
LiquidCrystal_I2C LCD (0x26, 16, 2);
char hexaKeys [ROWS] [COLS] = // POČETNA TASTATURA
{
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}
};
Tipkovnica customKeypad = Tipkovnica (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
void setup ()
{
Serial.begin (9600); // ovo stvara serijski monitor
Wire.begin (); // ovo stvara objekt Wire
lcd.begin (16, 2);
lcd.backlight ();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Molimo pričekajte 3"); // EKRAN ZA UČITAVANJE
kašnjenje (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Molimo pričekajte 2");
kašnjenje (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Molimo pričekajte 1");
kašnjenje (300);
lcd.clear ();
String myString = "ARDUINO INSTRUCTABLE";
lcd.setCursor (2, 2);
lcd.print (myString);
kašnjenje (2500);
for (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
kašnjenje (300);
}
lcd.clear ();
lcd.print ("Unesite lozinku");
}
void loop ()
{
prekidač (zaslon) // GDJE SMO U GLAVNOM IZBORNIKU
{// JE LI KORISNIK TISAO A, B, C, D
slučaj 0:
{
Lozinka();
}
pauza;
slučaj 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Glavni izbornik");
Zaslon = 2;
kašnjenje (100);
pauza;
}
slučaj 2:
{
char customKey = customKeypad.getKey ();
prekidač (customKey)
{
slučaj 'A':
{
Serial.println ("A je pritisnuto");
StoreUser ();
pauza;
}
slučaj 'B':
{
Serial.println ("B je pritisnuto");
if (korisnici == 0) {
lcd.clear ();
lcd.print ("BEZ SPASENIH KORISNIKA");
kašnjenje (3000);
lcd.clear ();
Zaslon = 1;
pauza;
}
DisplayUsers (); pauza;
}
slučaj 'C':
{
Serial.println ("C je pritisnut"); // KORIŠTENO TIJEKOM TESTIRANJA
int ext = 0;
dok (! 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;
kašnjenje (500);
}
ch = customKeypad.getKey ();
if (ch == ' *') // IZLAZAK IZ TEMPERATURNOG IZBORNIKA (ako je * PRITISAN)
{
ext = 1;
lcd.clear ();
Zaslon = 1;
}
}
pauza;
TempMenu ();
pauza;
}
slučaj 'D':
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
kašnjenje (3000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("MAJ 2019");
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
kašnjenje (3000);
lcd.clear ();
Zaslon = 1;
}
}
}
}
}
// PRILAGOĐENE FUNKCIJE ZA POZIVANJE VRIJEDNOSTI ILI POSTUPAKA
void lozinka ()
{
char customKey = customKeypad.getKey ();
if (customKey) // osigurava da je tipka zapravo pritisnuta, jednako (customKey! = NO_KEY)
{
Data [data_count] = customKey; // spremi char u niz podataka
lcd.setCursor (broj_data, 1); // pomicanje kursora za prikaz svakog novog znaka
lcd.print ("*"); // ispisati char na navedenom kurzoru
data_count ++; // uvećava niz podataka za 1 za spremanje novog znaka, također prati broj unesenih znakova
}
if (data_count == Password_Lenght-1) // ako je indeks niza jednak broju očekivanih znakova, usporedite podatke s master
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Lozinka je");
if (! strcmp (Data, Master)) // jednako (strcmp (Data, Master) == 0)
{
lcd.print ("Dobro");
lcd.clear ();
Zaslon = 1;
}
drugo
lcd.print ("Loše");
delay (1000); // dodano je 1 sekundno kašnjenje kako bi se osiguralo da je lozinka u potpunosti prikazana na ekranu prije nego što se obriše.
lcd.clear ();
Obriši podatke();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Unesite lozinku");
}
}
int TempMenu ()
{
Wire.beginTransmission (adresa);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (adresa, 1);
while (Wire.available () == 0);
int c = Wire.read ();
return c;
}
void clearData ()
{
while (broj_data! = 0)
{// Ovo se može koristiti za bilo koju veličinu polja, Podaci [broj_podataka--] = 0; // očisti niz za nove podatke
}
}
void StoreUser ()
{
int ext = 0;
int korisnik;
char ch;
dok (! ext) {
lcd.clear ();
lcd.print ("Unesite korisnika");
korisnik = korisnici + 1;
lcd.print (korisnik);
int x = 0;
dok (! x) {
za (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.tisak (ch);
userNum [korisnik - 1] = ch;
}
kašnjenje (500);
lcd.clear ();
lcd.print ("Nastavi");
lcd.setCursor (0, 1);
lcd.print ("* da # ne");
ch = customKeypad.waitForKey ();
if (ch == '*') {
x = 1;
}
if (ch == '#') {
x = 1;
ext = 1;
lcd.clear ();
Zaslon = 1;
}
}
korisnici ++;
}
}
void DisplayUsers ()
{
lcd.clear ();
for (int i = 0; i <korisnici; i ++) {
lcd.print ("Spremljeni korisnik");
lcd.tisak (i + 1);
za (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (broj korisnika [u]);
}
odgoda (2000);
lcd.clear ();
Zaslon = 1;
}
}
Korak 4: VODIČ ZA KORISNIKE
1. Nakon uključivanja projekta pojavit će se zaslon za učitavanje ili dobrodošlicu.
2. Pojavit će se zaslon “Enter Password”, koji vam omogućuje unos 4 znaka, slova ili brojki, ispravna lozinka je: 5466, što će vam omogućiti pristup glavnom izborniku.
3. Nakon unosa ispravne lozinke, pojavit će se glavni izbornik s 4 moguće opcije za navigaciju različitim dostupnim funkcijama.
· A - Unesite brojeve mobitela korisnika.
o Unesite 10 znamenki za spremanje korisnika u sustav
o Nakon unosa 10 znamenki pritisnite “*” za dodavanje više korisnika ili pritisnite “#” za povratak na glavni izbornik
· B - Prikaz spremljenih korisnika
o Korisnici će se pomicati pored zaslona, prikazani su po 3 sekunde, čim se prikažu svi korisnici, stranica će se zatvoriti i vratiti na glavni izbornik.
o Ako u opciju izbornika A nisu dodani korisnici, prikazat će se "NO SAVED USERS".
· C - Prikazuje temperaturu uživo
o Pritisnite “*” za povratak na glavni izbornik
· D - Prikaz kratkog teksta
o Prikazuje ime autora i temu za koju je sastavljen s datumom.