Sadržaj:
Video: Arduino UNO (stvaranje menija i funkcija): 4 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
U ovom uputstvu ćemo istraživati kako stvoriti menije, očitati temperaturu sa senzora TC74A0 i prikazati "vrijednosti" (u ovom slučaju brojeve mobilnih telefona) na način koji je beskonačan, ali ograničen na memoriju arduina na ploči.
Koristit ćemo
-Nizovi
-Ekran sa tečnim kristalima
-Tastavica
Korisnički vodič uključen u posljednji korak.
Korak 1: Komponente
Arduino Uno
· 4x4 tastatura
· TC74A0 digitalni senzor temperature
· I2c 16x2 LCD modul
· Ekran sa tečnim kristalima 16x2
· Premosne žice
· Oglasna ploča
· PC
· Arduino IDE
· Kabl za prenos
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 tastatura
o Pin 1 - 8 na tastaturi spojen na pin 9 - 2 na Arduinu
TC74A0 senzor temperature
o TC74A0 pin 2 na SDA na Arduinu
o TC74A0 pin 3 za 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 biblioteke pri prevođenju
#include
#include
#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 USER;
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 MenuItem;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
const bajt ROWS = 4; // četiri reda
const bajt COLS = 4; // četiri kolone
bajtovi rowPins [ROWS] = {5, 4, 3, 2};
bajtovi colPins [COLS] = {9, 8, 7, 6};
bajt data_count = 0, master_count = 0;
bool Pass_is_good;
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'}
};
Tastatura customKeypad = Tastatura (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
void setup ()
{
Serial.begin (9600); // ovo stvara serijski monitor
Wire.begin (); // ovo stvara Wire objekt
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č (prikaz) // GDJE SMO U GLAVNOM IZBORNIKU
{// DA LI JE KORISNIK TISAO A, B, C, D
slučaj 0:
{
Lozinka ();
}
break;
slučaj 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Glavni meni");
Prikaz = 2;
kašnjenje (100);
break;
}
slučaj 2:
{
char customKey = customKeypad.getKey ();
prekidač (customKey)
{
slučaj 'A':
{
Serial.println ("A je pritisnuto");
StoreUser ();
break;
}
slučaj 'B':
{
Serial.println ("B je pritisnuto");
if (korisnici == 0) {
lcd.clear ();
lcd.print ("NO SAVED USERS");
kašnjenje (3000);
lcd.clear ();
Prikaz = 1;
break;
}
DisplayUsers (); break;
}
slučaj 'C':
{
Serial.println ("C je pritisnut"); // KORIŠTENO TOKOM TESTIRANJA
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;
kašnjenje (500);
}
ch = customKeypad.getKey ();
if (ch == ' *') // IZLAZAK IZ TEMPERATURNOG IZBORNIKA (ako je * PRESSED)
{
ext = 1;
lcd.clear ();
Prikaz = 1;
}
}
break;
TempMenu ();
break;
}
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 ();
Prikaz = 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; // sprema char u niz podataka
lcd.setCursor (data_count, 1); // pomicanje kursora za prikaz svakog novog znaka
lcd.print ("*"); // ispisuje 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 ();
Prikaz = 1;
}
else
lcd.print ("Loše");
delay (1000); // dodano kašnjenje od 1 sekunde kako bi se osiguralo da je lozinka u potpunosti prikazana na ekranu prije nego što se obriše.
lcd.clear ();
clearData ();
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 niza, Podaci [data_count--] = 0; // briše niz za nove podatke
}
}
void StoreUser ()
{
int ext = 0;
int korisnik;
char ch;
while (! ext) {
lcd.clear ();
lcd.print ("Unesite korisnika");
korisnik = korisnici + 1;
lcd.print (korisnik);
int x = 0;
while (! x) {
za (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (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 ();
Prikaz = 1;
}
}
korisnici ++;
}
}
void DisplayUsers ()
{
lcd.clear ();
for (int i = 0; i <korisnici; i ++) {
lcd.print ("Sačuvani korisnik");
lcd.print (i + 1);
za (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (broj korisnika [u]);
}
kašnjenje (2000);
lcd.clear ();
Prikaz = 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 ekran “Enter Password” (Unesi lozinku), koji vam omogućava da unesete 4 znaka, slova ili brojke, ispravna lozinka je: 5466, to će vam omogućiti pristup glavnom meniju.
3. Nakon unosa ispravne lozinke, pojavit će se glavni izbornik s 4 moguće opcije za navigaciju različitim dostupnim funkcijama.
· A - Unesite brojeve mobilnih telefona korisnika.
o Unesite 10 znamenki za spremanje korisnika u sistem
o Nakon što ste unijeli 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 ekrana, biće prikazani po 3 sekunde, čim se prikažu svi korisnici, stranica će se zatvoriti i vratiti u glavni meni.
o Ako u opciju menija A nije dodat nijedan korisnik, prikazaće se „NO SAVED USERS“.
· C - Prikazuje temperaturu uživo
o Pritisnite „ *“za povratak na glavni meni
· D - Prikaz kratkog teksta
o Prikazuje ime autora i temu za koju je sastavljen s datumom.
Preporučuje se:
Upoznavanje sa "Profesionalnim kompletom za izradu generatora funkcija ILC8038": 5 koraka
Upoznavanje sa "Profesionalnim kompletom za izradu generatora funkcija ILC8038": Bavio sam se nekim novim projektima elektronike kada sam naišao na slatki mali komplet generatora funkcija. Naplaćuje se kao "Profesionalni komplet za generiranje sinusnog trokuta kvadratnog vala za profesionalni ILC8038" i dostupan je od brojnih prodavača
Generator funkcija: 12 koraka (sa slikama)
Generator funkcija: Ova instrukcija opisuje dizajn generatora funkcija zasnovanog na Maxims -ovom analognom integriranom krugu MAX038. Generator funkcija je vrlo koristan alat za nakaze elektronike. Potrebno je za podešavanje rezonantnih kola, ispitivanje aud
Prijenosni generator funkcija na WiFi i Androidu: 10 koraka
Prijenosni generator funkcija na WiFi i Androidu: Krajem 20. stoljeća pojavile su se razne tehnološke inovacije, posebno u području komunikacija; ali ne samo. Za nas, korisnike, potrošače i inženjere došlo je do brzog razvoja elektroničkih uređaja koji nam mogu učiniti živote
Windows 7: Nedostaju stavke kontekstnog menija: 3 koraka
Windows 7: Nedostaju stavke kontekstnog menija: Kad god izaberemo više od 15 datoteka u prozorima. određene stavke iz kontekstnog izbornika nestaju … Ovaj vodič će vam pokazati kako vratiti te stvari u kontekstni izbornik
Arduino generator tonova bez biblioteke ili serijskih funkcija (sa prekidima): 10 koraka
Arduino generator tonova bez biblioteke ili serijskih funkcija (sa prekidima): Ovo nije nešto na čemu bih obično imao instrukcije, više volim svoje metalne radove, ali pošto sam student elektrotehnike i moram pohađati predmet o mikrokontrolerima ( Dizajn ugrađenih sistema), mislio sam da ću napraviti instrukciju na jednom od svojih računara