Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Bu yo'riqnomada menyu tuzish, TC74A0 sensori orqali haroratni o'qish va "qadriyatlar" ni (bu holda mobil telefon raqamlari) cheksiz, lekin bort xotirasi bilan chegaralanadigan tarzda ko'rsatishni o'rganamiz.
Biz foydalanamiz
-Array
-Suyuq kristalli displey
-Klaviatura
Foydalanuvchi qo'llanmasi oxirgi bosqichga kiritilgan.
1 -qadam: komponentlar
Arduino Uno
· 4x4 klaviatura
· TC74A0 raqamli harorat sensori
· I2c 16x2 LCD moduli
· 16x2 lik suyuq kristalli displey
· O'tish simlari
· Non paneli
· Shaxsiy kompyuter
· Arduino IDE
· Uzatish kabeli
2 -qadam: Komponentli simlarni ulash
TEMP SENSORI va LCD SDA VA SCL (A4, A5) ga bir chiziqda ulangan
LCD (I2c moduli)
o SDA -dan A5 -ga Arduino -da
o Arduino -da A4 -ga SCL
o Arduino -da 5V ga VCC
o Arduino -da GND dan GNDgacha
· 4 x 4 klaviatura
o Klaviaturadagi 1-8 -pin, mos ravishda Arduino -dagi 9 - 2 -pinlarga ulangan
TC74A0 harorat sensori
o TC74A0 pin 2 Arduino -dagi SDA -ga
o TC74A0 pin 3 Arduino -dagi GND -ga
o TC74A0 pin 4 Arduino -dagi SCL -ga
o TC74A0 pin 5 dan 5 V gacha Arduino
3 -qadam: kod
#include // Kompilyatsiya paytida kutubxonalarni o'z ichiga oladi
#qo'shing
#qo'shing
#parolni belgilash_uzi 5
#buyruq_ uzunligini belgilang 3
#hujayra raqami 10 ni belgilang
int foydalanuvchilar = 0;
int ko'rsatish = 0;
int manzili = 72; // tc74a0 MANZILI
int I = 0;
int USER;
int X = 0;
int XY = 0;
int temp;
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
char Ma'lumotlar [Password_Lenght];
char Master [Password_Lenght] = "5466"; // parol
char ExitData [Buyruq_Uzunligi]; //
char Master1 [Command_Lenght] = "**"; //
char MenuItem;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
const bayt ROWS = 4; // to'rt qator
const bayt COLS = 4; // to'rtta ustun
bayt rowPins [ROWS] = {5, 4, 3, 2};
bayt colPins [COLS] = {9, 8, 7, 6};
bayt data_count = 0, master_count = 0;
bool Pass_is_good;
LiquidCrystal_I2C lcd (0x26, 16, 2);
char hexaKeys [ROWS] [COLS] = // Klaviaturani ishga tushirish
{
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}
};
CustomKeypad klaviaturasi = Klaviatura (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
bo'sh o'rnatish ()
{
Serial.begin (9600); // bu ketma -ket monitorni yaratadi
Wire.begin (); // bu Wire ob'ektini yaratadi
lcd.begin (16, 2);
lcd.backlight ();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Iltimos 3 kuting"); // EKRAN yuklanmoqda
kechikish (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Iltimos, 2 kuting");
kechikish (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Iltimos, 1 kuting");
kechikish (300);
lcd.clear ();
String myString = "ARDUINO INSTRUCTABLE";
lcd.setCursor (2, 2);
lcd.print (myString);
kechikish (2500);
uchun (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
kechikish (300);
}
lcd.clear ();
lcd.print ("Parolni kiriting");
}
bo'sh halqa ()
{
switch (Displey) // ASOSI MENYUDA QAYERDA BIZ
{// USER A, B, C, D bosdi
0 holat:
{
Parol ();
}
tanaffus;
1 -holat:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Asosiy menyu");
Ko'rsatish = 2;
kechikish (100);
tanaffus;
}
2 -holat:
{
char customKey = customKeypad.getKey ();
almashtirish (customKey)
{
"A" holati:
{
Serial.println ("A bosildi");
StoreUser ();
tanaffus;
}
"B" holati:
{
Serial.println ("B bosildi");
agar (foydalanuvchilar == 0) {
lcd.clear ();
lcd.print ("SAVDALANILGAN FOYDALANIShLAR YO'Q");
kechikish (3000);
lcd.clear ();
Ko'rsatish = 1;
tanaffus;
}
DisplayUsers (); tanaffus;
}
"C" holati:
{
Serial.println ("C bosildi"); // TESTDAN KO'RSATILADI
int ext = 0;
while (! ext) {
char ch;
temp = TempMenu ();
agar (temp! = tempPre) {
lcd.clear ();
lcd.print ("Harorat");
lcd.setCursor (0, 1);
lcd.print (temp);
lcd.print ("C");
tempPre = temp;
kechikish (500);
}
ch = customKeypad.getKey ();
if (ch == ' *') // TEMPERATURE MENYUSIDAN CHIQISH (agar * BASILGAN bo'lsa)
{
ext = 1;
lcd.clear ();
Ko'rsatish = 1;
}
}
tanaffus;
TempMenu ();
tanaffus;
}
"D" holati:
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
kechikish (3000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("2019 yil MAY");
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
kechikish (3000);
lcd.clear ();
Ko'rsatish = 1;
}
}
}
}
}
// QIMMATLAR VA TARTIBLARNI QO'NG'IR QILISH UChUN MAXSUS FUNKSIYALAR
parolni bekor qilish ()
{
char customKey = customKeypad.getKey ();
agar (customKey) // tugma bosilganligiga ishonch hosil qilsa, (customKey! = NO_KEY)
{
Ma'lumotlar [data_count] = customKey; // charni ma'lumotlar qatoriga saqlang
lcd.setCursor (data_count, 1); // har bir yangi belgini ko'rsatish uchun kursorni siljiting
lcd.print ("*"); // ko'rsatilgan kursorga char yozing
data_count ++; // yangi simlarni saqlash uchun ma'lumotlar qatorini 1 ga oshirish, shuningdek kiritilgan belgilar sonini kuzatib borish
}
agar (data_count == Password_Lenght-1) // agar massiv indeksi kutilgan belgilar soniga teng bo'lsa, ma'lumotlarni master bilan solishtiring
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Parol - bu");
if (! strcmp (Data, Master)) // teng (strcmp (Data, Master) == 0)
{
lcd.print ("Yaxshi");
lcd.clear ();
Ko'rsatish = 1;
}
boshqa
lcd.print ("Yomon");
kechikish (1000); // parolni tozalashdan oldin ekranda to'liq ko'rsatilishini ta'minlash uchun 1 soniya kechiktirish qo'shildi.
lcd.clear ();
clearData ();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Parolni kiriting");
}
}
int TempMenu ()
{
Wire.beginTransmission (manzil);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (manzil, 1);
while (Wire.available () == 0);
int c = Wire.read ();
qaytish c;
}
void clearData ()
{
vaqt (data_count! = 0)
{// Buni har qanday massiv o'lchami uchun ishlatish mumkin, Ma'lumotlar [data_count--] = 0; // yangi ma'lumotlar uchun aniq qator
}
}
void StoreUser ()
{
int ext = 0;
int foydalanuvchi;
char ch;
while (! ext) {
lcd.clear ();
lcd.print ("Foydalanuvchini kiriting");
foydalanuvchi = foydalanuvchilar + 1;
lcd.print (foydalanuvchi);
int x = 0;
vaqt (! x) {
uchun (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (ch);
userNum [foydalanuvchi - 1] = ch;
}
kechikish (500);
lcd.clear ();
lcd.print ("Davom etish");
lcd.setCursor (0, 1);
lcd.print ("* ha # yo'q");
ch = customKeypad.waitForKey ();
agar (ch == '*') {
x = 1;
}
agar (ch == '#') {
x = 1;
ext = 1;
lcd.clear ();
Ko'rsatish = 1;
}
}
foydalanuvchilar ++;
}
}
void DisplayUsers ()
{
lcd.clear ();
uchun (int i = 0; i <foydalanuvchilar; i ++) {
lcd.print ("Saqlangan foydalanuvchi");
lcd.print (i + 1);
uchun (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (userNum [u]);
}
kechikish (2000);
lcd.clear ();
Ko'rsatish = 1;
}
}
4 -qadam: Foydalanuvchi qo'llanmasi
1. Loyihani ishga tushirgandan so'ng, yuklash yoki qabul qilish ekrani paydo bo'ladi.
2. "Parolni kiriting" ekrani paydo bo'ladi, bu ekran sizga 4 ta belgini, harflarni yoki raqamlarni kiritishga imkon beradi, to'g'ri parol: 5466, bu sizga asosiy menyuga kirishga ruxsat beradi.
3. Parolni to'g'ri kiritganingizda, asosiy menyu mavjud bo'lgan turli xil funktsiyalarni boshqarish uchun 4 ta variant bilan paydo bo'ladi.
· A - Foydalanuvchining mobil telefon raqamlarini kiriting.
o Foydalanuvchini tizimga saqlash uchun 10 ta raqamni kiriting
10 ta raqam kiritilgandan so'ng ko'proq foydalanuvchilarni qo'shish uchun " *" tugmasini bosing yoki asosiy menyuga qaytish uchun "#" tugmasini bosing.
· B - saqlangan foydalanuvchilarni ko'rsatish
o Foydalanuvchilar ekran bo'ylab o'tadilar, ular har biri 3 soniya davomida ko'rsatiladi, barcha foydalanuvchilar ko'rsatilgandan so'ng, sahifa yopiladi va asosiy menyuga qaytadi.
o Agar A menyusida hech qanday foydalanuvchi qo'shilmagan bo'lsa, unda "SAVDATLANILGANLAR YO'Q" ko'rsatiladi.
· C - jonli haroratni ko'rsatadi
o Asosiy menyuga qaytish uchun " *" tugmasini bosing
· D - Qisqa matnni ko'rsatish
o Yaratuvchining ismi va sanasi bilan tuzilgan mavzuni ko'rsatadi.