Indholdsfortegnelse:
Video: Arduino UNO (oprettelse af menuer og funktioner): 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
I denne instruktive vil vi undersøge, hvordan man opretter menuer, læser temperatur fra en TC74A0 -sensor og viser "værdier" (i dette tilfælde mobiltelefonnumre) på en måde, der er uendelig, men begrænset til arduinoens hukommelse om bord.
Vi vil bruge
-Arrays
-Flydende krystaldisplay
-Tastatur
Brugervejledning inkluderet i det sidste trin.
Trin 1: Komponenter
Arduino Uno
· 4x4 tastatur
· TC74A0 digital temperatursensor
· I2c 16x2 LCD -modul
· 16x2 flydende krystaldisplay
· Jumper ledninger
· Brødbræt
· Personlig computer
· Arduino IDE
· Overførselskabel
Trin 2: Komponentledninger
TEMP SENSOR OG LCD TILSLUTTET PÅ LINE TIL SDA OG SCL (A4, A5)
LCD (I2c -modul)
o SDA til A5 på Arduino
o SCL til A4 på Arduino
o VCC til 5V på Arduino
o GND til GND på Arduino
· 4 x 4 Tastatur
o Pin 1 - 8 på tastatur tilsluttet henholdsvis pin 9 - 2 på Arduino
TC74A0 temp sensor
o TC74A0 pin 2 til SDA på Arduino
o TC74A0 pin 3 til GND på Arduino
o TC74A0 pin 4 til SCL på Arduino
o TC74A0 pin 5 til 5V på Arduino
Trin 3: Kode
#include // Inkluderer biblioteker ved kompilering
#omfatte
#omfatte
#define Password_Lengde 5
#define kommando_længde 3
#define CellNumber 10
int brugere = 0;
int Display = 0;
int adresse = 72; // tc74a0 ADRESSE
int I = 0;
int BRUGER;
int X = 0;
int XY = 0;
int temp;
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
char Data [Password_Lenght];
char Master [Password_Lenght] = "5466"; //ADGANGSKODE
char ExitData [Command_Lenght]; //
char Master1 [Command_Lenght] = "**"; //
char MenuItem;
kul CELLArrayA [10];
char CELLArrayB [10];
kul CELLArrayC [10];
const byte Rækker = 4; // fire rækker
const byte COLS = 4; // fire kolonner
byte rowPins [ROWS] = {5, 4, 3, 2};
byte colPins [COLS] = {9, 8, 7, 6};
byte data_count = 0, master_count = 0;
bool Pass_is_good;
LiquidCrystal_I2C lcd (0x26, 16, 2);
char hexaKeys [ROWS] [COLS] = // INITIERENDE TASTATUR
{
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}
};
Tastatur customKeypad = Tastatur (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
ugyldig opsætning ()
{
Serial.begin (9600); // dette opretter Serial Monitor
Wire.begin (); // dette opretter et Wire -objekt
lcd.begin (16, 2);
lcd.backlight ();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Vent venligst 3"); // LOADING SCREEN
forsinkelse (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Vent venligst 2");
forsinkelse (1000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Vent venligst 1");
forsinkelse (300);
lcd.clear ();
String myString = "ARDUINO INSTRUKTABEL";
lcd.setCursor (2, 2);
lcd.print (myString);
forsinkelse (2500);
for (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
forsinkelse (300);
}
lcd.clear ();
lcd.print ("Indtast adgangskode");
}
hulrum ()
{
switch (Display) // HVOR ER I Hovedmenuen ER VI
{// GAV BRUGEREN TRYK A, B, C, D
sag 0:
{
Adgangskode();
}
pause;
sag 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Hovedmenu");
Display = 2;
forsinkelse (100);
pause;
}
sag 2:
{
char customKey = customKeypad.getKey ();
switch (customKey)
{
tilfælde 'A':
{
Serial.println ("A blev trykket");
StoreUser ();
pause;
}
sag 'B':
{
Serial.println ("B blev trykket");
hvis (brugere == 0) {
lcd.clear ();
lcd.print ("INGEN GEMTE BRUGERE");
forsinkelse (3000);
lcd.clear ();
Display = 1;
pause;
}
DisplayUsers (); pause;
}
tilfælde 'C':
{
Serial.println ("C blev trykket"); // BRUGT UNDER TESTNING
int ext = 0;
mens (! ext) {
char ch;
temp = TempMenu ();
hvis (temp! = tempPre) {
lcd.clear ();
lcd.print ("Temparatur");
lcd.setCursor (0, 1);
lcd.print (temp);
lcd.print ("C");
tempPre = temp;
forsinkelse (500);
}
ch = customKeypad.getKey ();
hvis (ch == ' *') // EXIT TEMPERATURE MENU (hvis * TRYKT)
{
ext = 1;
lcd.clear ();
Display = 1;
}
}
pause;
TempMenu ();
pause;
}
tilfælde 'D':
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
forsinkelse (3000);
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("MAJ 2019");
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
forsinkelse (3000);
lcd.clear ();
Display = 1;
}
}
}
}
}
// TILPASSEDE FUNKTIONER TIL OPKALDING AF VÆRDIER ELLER PROCEDURER
ugyldig adgangskode ()
{
char customKey = customKeypad.getKey ();
hvis (customKey) // sørger for, at der faktisk trykkes på en tast, svarende til (customKey! = NO_KEY)
{
Data [data_count] = brugerdefineret nøgle; // gem char i data array
lcd.setCursor (data_count, 1); // flyt markøren for at vise hvert nyt tegn
lcd.print ("*"); // print char ved nævnte markør
data_count ++; // øge datamængden med 1 for at gemme ny kul, også holde styr på antallet af indtastede tegn
}
hvis (data_count == Password_Lenght-1) // hvis arrayindekset er lig med antallet af forventede tegninger, sammenlign data til master
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Adgangskode er");
hvis (! strcmp (Data, Master)) // lig med (strcmp (Data, Master) == 0)
{
lcd.print ("Godt");
lcd.clear ();
Display = 1;
}
andet
lcd.print ("dårlig");
forsinkelse (1000); // tilføjet 1 sekund forsinkelse for at sikre, at adgangskoden vises fuldstændigt på skærmen, før den slettes.
lcd.clear ();
slet data();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Indtast adgangskode");
}
}
int TempMenu ()
{
Wire.beginTransmission (adresse);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (adresse, 1);
mens (Wire.available () == 0);
int c = Wire.read ();
returnere c;
}
void clearData ()
{
mens (data_count! = 0)
{// Dette kan bruges til alle matrixstørrelser, Data [data_count--] = 0; // ryd array for nye data
}
}
void StoreUser ()
{
int ext = 0;
int bruger;
char ch;
mens (! ext) {
lcd.clear ();
lcd.print ("Indtast bruger");
bruger = brugere + 1;
lcd.print (bruger);
int x = 0;
mens (! x) {
for (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (ch);
userNum [bruger - 1] = ch;
}
forsinkelse (500);
lcd.clear ();
lcd.print ("Fortsæt");
lcd.setCursor (0, 1);
lcd.print ("* ja # nej");
ch = customKeypad.waitForKey ();
hvis (ch == '*') {
x = 1;
}
hvis (ch == '#') {
x = 1;
ext = 1;
lcd.clear ();
Display = 1;
}
}
brugere ++;
}
}
ugyldige DisplayUsers ()
{
lcd.clear ();
for (int i = 0; i <brugere; i ++) {
lcd.print ("gemt bruger");
lcd.print (i + 1);
for (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (userNum [u]);
}
forsinkelse (2000);
lcd.clear ();
Display = 1;
}
}
Trin 4: BRUGERVEJLEDNING
1. Når projektet tændes, vises en indlæsnings- eller velkomstskærm.
2. En "Indtast adgangskode" skærm vises, denne skærm giver dig mulighed for at indtaste 4 tegn, bogstaver eller tal, den korrekte adgangskode er: 5466, dette giver dig adgang til hovedmenuen.
3. Når du indtaster den korrekte adgangskode, vises hovedmenuen med 4 mulige muligheder for at navigere i de forskellige tilgængelige funktioner.
· A - Indtast brugerens mobiltelefonnumre.
o Indtast 10 cifre for at gemme en bruger i systemet
o Når der er indtastet 10 cifre, skal du trykke på " *" for at tilføje flere brugere, eller trykke på "#" for at gå tilbage til hovedmenuen
· B - Vis gemte brugere
o Brugerne ruller forbi skærmen, de vises i 3 sekunder hver, så snart alle brugere vises, vil siden lukke og vende tilbage til hovedmenuen.
o Hvis der ikke blev tilføjet nogen brugere i menuindstilling A, viser det "INGEN GEMTE BRUGERE".
· C - Viser levende temperatur
o Tryk på “*” for at gå tilbage til hovedmenuen
· D - Vis kort tekst
o Viser skaberens navn og emnet, det blev kompileret til med en dato.
Anbefalede:
SmartHome trådløs kommunikation: MQTT's ekstreme grundlæggende funktioner: 3 trin
SmartHome trådløs kommunikation: MQTT's ekstreme grundlæggende funktioner: MQTT Basics: ** Jeg skal lave en hjemmeautomatiseringsserie, jeg vil gennemgå de trin, jeg tog for at lære alt, hvad jeg har gjort i fremtiden. Denne instruktionsbog er grundlinjen for, hvordan jeg opsætter MQTT til brug i mine fremtidige instruktioner. Howeve
RaspberryPi 3/4 forlængerkort til tilføjelse af ekstra funktioner til Raspberry Pi: 15 trin (med billeder)
RaspberryPi 3/4 udvidelseskort til tilføjelse af ekstra funktioner til Raspberry Pi: vi ved, at hindbær pi 3/4 ikke leveres med indbygget ADC (analog til digital konverter) og RTC (ur i realtid), så jeg designer et printkort, der indeholder 16 kanal 12bit ADC, RTC, SIM7600 4G -modul, trykknapper, relæer, USB -strømafbrydelse, 5V strømafbrydelse, 12V strømforsyning
Arduino Mindre kendte funktioner: 9 trin
Arduino mindre kendte funktioner: Dette er mere en liste over ikke så ofte nævnte funktioner på Arduino -platforme, der typisk bruges (f.eks. Uno, Nano). Denne fortegnelse bør fungere som en reference, når du har brug for at slå disse funktioner op og sprede ordet. Se på koden for at se
Arduino -tonegenerator uden bibliotek eller serielle funktioner (med afbrydelser): 10 trin
Arduino -tonegenerator uden bibliotek eller serielle funktioner (med afbrydelser): Dette er normalt ikke noget, jeg normalt ville instruere om, jeg foretrækker mit metalarbejde, men da jeg er el -ingeniørstuderende og skal tage en klasse om mikrokontrollere ( Embedded Systems Design), jeg tænkte, at jeg ville lave en instruerbar på en af mine sider
Montering af "Wise Clock 2" (Arduino-baseret vækkeur med masser af ekstra funktioner): 6 trin
Montering af "Wise Clock 2" (Arduino-baseret vækkeur med masser af ekstra funktioner): Denne vejledning viser, hvordan du samler sættet til Wise Clock 2, et open source (hardware og software) projekt. Et komplet Wise Clock 2 -sæt kan købes her. Sammenfattende er dette, hvad Wise Clock 2 kan gøre (med den nuværende open source softwa