Kazalo:
Video: Arduino UNO (ustvarjanje menijev in funkcij): 4 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
V tem navodilu bomo raziskovali, kako ustvariti menije, prebrati temperaturo s senzorja TC74A0 in prikazati "vrednosti" (v tem primeru številke mobilnih telefonov) na neskončen način, vendar omejen na pomnilnik arduina na krovu.
Uporabljali bomo
-Nizki
-Zaslon s tekočimi kristali
-Tipkovnica
Navodila za uporabo so vključena v zadnji korak.
1. korak: Komponente
Arduino Uno
· 4x4 tipkovnica
· TC74A0 digitalni temperaturni senzor
· I2c 16x2 LCD modul
· Zaslon s tekočimi kristali 16x2
· Mostične žice
· Ogledna plošča
· Osebni računalnik
· Arduino IDE
· Prenosni kabel
2. korak: ožičenje komponent
TEMP. SENZOR IN LCD, POVEZANI NA ISTO LINIJO NA SDA IN SCL (A4, A5)
LCD (modul I2c)
o SDA do A5 na Arduinu
o SCL do A4 na Arduinu
o VCC do 5V na Arduinu
o GND do GND na Arduinu
· 4 x 4 tipkovnica
o Pin 1 - 8 na tipkovnici, priključen na pin 9 - 2 na Arduinu
TC74A0 temperaturni senzor
o TC74A0 pin 2 na SDA na Arduinu
o TC74A0 pin 3 do GND na Arduinu
o TC74A0 pin 4 do SCL na Arduinu
o TC74A0 pin 5 do 5V na Arduinu
3. korak: Koda
#include // Vključuje knjižnice pri sestavljanju
#vključi
#vključi
#define Password_Lenght 5
#define Command_Lenght 3
#define CellNumber 10
int uporabniki = 0;
int Prikaz = 0;
int naslov = 72; // tc74a0 NASLOV
int I = 0;
int UPORABNIK;
int X = 0;
int XY = 0;
int temp;
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
char Podatki [Password_Lenght];
char Master [Password_Lenght] = "5466"; // GESLO
char ExitData [Command_Lenght]; //
char Master1 [Command_Lenght] = "**"; //
char MenuItem;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
const byte ROWS = 4; // štiri vrstice
const bajt COLS = 4; // štirje stolpci
byte rowPins [ROWS] = {5, 4, 3, 2};
bajt 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] = // ZAČ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); // s tem se ustvari serijski monitor
Wire.begin (); // s tem se ustvari objekt Wire
lcd.begin (16, 2);
lcd.backlight ();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Prosim, počakajte 3"); // NALOŽITVENI EKRAN
zamuda (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Prosim počakajte 2");
zamuda (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Prosim, počakajte 1");
zamuda (300);
lcd.clear ();
String myString = "ARDUINO INSTRUCTABLE";
lcd.setCursor (2, 2);
lcd.print (myString);
zamuda (2500);
for (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
zamuda (300);
}
lcd.clear ();
lcd.print ("Vnesite geslo");
}
void loop ()
{
stikalo (Zaslon) // KJE V GLAVNEM MENIU SMO
{// ALI JE UPORABNIK TISKAL A, B, C, D
primer 0:
{
Geslo ();
}
zlom;
primer 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Glavni meni");
Zaslon = 2;
zamuda (100);
zlom;
}
primer 2:
{
char customKey = customKeypad.getKey ();
stikalo (customKey)
{
primer 'A':
{
Serial.println ("A je bil pritisnjen");
StoreUser ();
zlom;
}
primer 'B':
{
Serial.println ("B je bil pritisnjen");
če (uporabniki == 0) {
lcd.clear ();
lcd.print ("NO SAVED UPORABNIKOV");
zamuda (3000);
lcd.clear ();
Zaslon = 1;
zlom;
}
DisplayUsers (); zlom;
}
primer 'C':
{
Serial.println ("C je bil pritisnjen"); // UPORABLJENO MED TESTIRANJEM
int ext = 0;
medtem ko (! 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;
zamuda (500);
}
ch = customKeypad.getKey ();
if (ch == ' *') // IZHODI TEMPERATURNI MENI (če * PRESSED)
{
ext = 1;
lcd.clear ();
Zaslon = 1;
}
}
zlom;
TempMenu ();
zlom;
}
primer 'D':
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
zamuda (3000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("MAJ 2019");
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
zamuda (3000);
lcd.clear ();
Zaslon = 1;
}
}
}
}
}
// PRILAGOJENE FUNKCIJE ZA KLICANJE VREDNOSTI ALI POSTOPKOV
void Password ()
{
char customKey = customKeypad.getKey ();
if (customKey) // poskrbi, da je tipka dejansko pritisnjena, enako (customKey! = NO_KEY)
{
Data [data_count] = customKey; // shrani char v podatkovno polje
lcd.setCursor (data_count, 1); // premaknite kazalec za prikaz vsakega novega znaka
lcd.print ("*"); // natisni znak na kazalec
data_count ++; // povečanje matrike podatkov za 1 za shranjevanje novega znaka in tudi spremljanje števila vnesenih znakov
}
if (data_count == Password_Lenght-1) // če je indeks polja enak številu pričakovanih znakov, primerjajte podatke z glavnim
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Geslo je");
if (! strcmp (Data, Master)) // enako (strcmp (Data, Master) == 0)
{
lcd.print ("Dobro");
lcd.clear ();
Zaslon = 1;
}
drugače
lcd.print ("Slabo");
delay (1000); // dodamo 1 sekundo zakasnitve, da se prepričamo, da je geslo v celoti prikazano na zaslonu, preden se počisti.
lcd.clear ();
Počisti podatke();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Vnesite geslo");
}
}
int TempMenu ()
{
Wire.beginTransmission (naslov);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (naslov, 1);
while (Wire.available () == 0);
int c = Wire.read ();
vrnitev c;
}
void clearData ()
{
while (podatkovni_števek! = 0)
{// To lahko uporabimo za poljubno velikost matrike, Podatki [data_count--] = 0; // počisti matriko za nove podatke
}
}
void StoreUser ()
{
int ext = 0;
int uporabnik;
char ch;
medtem ko (! ext) {
lcd.clear ();
lcd.print ("Vnesite uporabnika");
uporabnik = uporabniki + 1;
lcd.print (uporabnik);
int x = 0;
medtem ko (! x) {
za (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (ch);
userNum [uporabnik - 1] = ch;
}
zamuda (500);
lcd.clear ();
lcd.print ("Nadaljuj");
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;
}
}
uporabniki ++;
}
}
void DisplayUsers ()
{
lcd.clear ();
for (int i = 0; i <uporabniki; i ++) {
lcd.print ("Shranjeni uporabnik");
lcd.print (i + 1);
za (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (uporabniška številka [u]);
}
zamuda (2000);
lcd.clear ();
Zaslon = 1;
}
}
4. korak: NAVODILA ZA UPORABO
1. Ob vklopu projekta se prikaže zaslon za nalaganje ali dobrodošlico.
2. Prikaže se zaslon “Enter Password”, ki vam omogoča vnos 4 znakov, črk ali številk, pravilno geslo je: 5466, s tem boste imeli dostop do glavnega menija.
3. Ko vnesete pravilno geslo, se prikaže glavni meni s 4 možnimi možnostmi za krmarjenje po različnih razpoložljivih funkcijah.
· A - Vnesite številke mobilnega telefona uporabnika.
o Vnesite 10 mest, da shranite uporabnika v sistem
o Ko vnesete 10 številk, pritisnite “*”, da dodate več uporabnikov, ali pritisnite “#”, da se vrnete v glavni meni
· B - Prikaz shranjenih uporabnikov
o Uporabniki se bodo pomikali mimo zaslona, prikazani so po 3 sekunde, takoj ko bodo prikazani vsi uporabniki, se bo stran zaprla in vrnila v glavni meni.
o Če v menijski možnosti A ni bil dodan noben uporabnik, bo prikazano »NO SAVED UPORABNIKOV«.
· C - Prikazuje temperaturo v živo
o Pritisnite “*” za izhod nazaj v glavni meni
· D - Prikaz kratkega besedila
o Prikaže ime ustvarjalca in predmet, za katerega je bil sestavljen, z datumom.
Priporočena:
Generator funkcij: 12 korakov (s slikami)
Generator funkcij: Ta navodila opisujejo zasnovo funkcijskega generatorja, ki temelji na Maxims -ovem analognem integriranem vezju MAX038. Funkcijski generator je zelo uporabno orodje za čudake elektronike. Potreben je za uglaševanje resonančnih vezij, testiranje aud
Prenosni generator funkcij za WiFi in Android: 10 korakov
Prenosni generator funkcij za WiFi in Android: Ob koncu 20. stoletja so se pojavile različne tehnološke inovacije, zlasti na področju komunikacij; ampak ne samo. Za nas, uporabnike, potrošnike in inženirje je prišel na dan hiter razvoj elektronskih naprav, ki nam lahko spremenijo življenje
Razširitvena plošča RaspberryPi 3/4 za dodajanje dodatnih funkcij Raspberry Pi: 15 korakov (s slikami)
Razširitvena plošča RaspberryPi 3/4 za dodajanje dodatnih funkcij Raspberry Pi: vemo, da malina pi 3/4 ni opremljena z vgrajenim ADC (analogno -digitalni pretvornik) in RTC (ura v realnem času), zato oblikujem tiskano vezje, ki vsebuje 16 kanalni 12 -bitni ADC, RTC, modul 4G SIM7600, potisni gumbi, releji, izhod USB, izhod 5 V, izhod 12 V
Generator funkcij: 4 koraki
Generator funkcij: Pozdravljeni vsi, potrebujete poceni generator funkcij?, Ali ga ne želite kupiti ….? …. iz te vadnice ga lahko naredite ….. Generator funkcij je lastna potreba …. V večini projektov sem ga uporabil za izdelavo brezžičnega modula za prenos energije
Generator tonov Arduino brez knjižnice ali zaporednih funkcij (s prekinitvami): 10 korakov
Arduino Tone Generator brez knjižnice ali zaporednih funkcij (s prekinitvami): To ni nekaj, za kar bi običajno poučeval, raje imam kovinsko obdelavo, a ker sem študent elektrotehnike in moram opraviti tečaj mikrokrmilnikov ( Embedded Systems Design), mislil sem, da bom na enem od svojih p