Πίνακας περιεχομένων:
Βίντεο: Arduino UNO (δημιουργία μενού και λειτουργιών): 4 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:35
Σε αυτό το διδακτικό θα διερευνήσουμε πώς να δημιουργήσετε μενού, να διαβάσετε τη θερμοκρασία από έναν αισθητήρα TC74A0 και να εμφανίσετε "τιμές" (στην περίπτωση αυτή αριθμούς κινητών τηλεφώνων) με τρόπο που είναι άπειρο, αλλά περιορίζεται στη μνήμη του arduino επί του σκάφους.
Θα χρησιμοποιήσουμε
-Συστοιχίες
-Οθόνη υγρών κρυστάλλων
-Πληκτρολόγιο
Οδηγός χρήσης περιλαμβάνεται στο τελευταίο βήμα.
Βήμα 1: Στοιχεία
Arduino Uno
· Πληκτρολόγιο 4x4
· Digitalηφιακός αισθητήρας θερμοκρασίας TC74A0
· Μονάδα LCD I2c 16x2
· Οθόνη υγρού κρυστάλλου 16x2
· Καλώδια βραχυκυκλωτήρων
· Breadboard
· Προσωπικός υπολογιστής
· Arduino IDE
· Καλώδιο μεταφοράς
Βήμα 2: Καλωδίωση εξαρτήματος
ΑΙΣΘΗΤΗΡΑΣ ΘΕΡΜΟΚΡΑΣΙΑΣ ΚΑΙ ΣΥΝΔΕΣΗ LCD ΣΤΗΝ ΙΔΙΑ ΓΡΑΜΜΗ ΣΕ SDA ΚΑΙ SCL (A4, A5)
LCD (μονάδα I2c)
o SDA έως A5 στο Arduino
o SCL έως A4 στο Arduino
o VCC σε 5V στο Arduino
o GND σε GND στο Arduino
· Πληκτρολόγιο 4 x 4
o Καρφίτσα 1 - 8 στο πληκτρολόγιο που συνδέεται με τον πείρο 9 - 2 στο Arduino αντίστοιχα
Αισθητήρας θερμοκρασίας TC74A0
o TC74A0 pin 2 στο SDA στο Arduino
o TC74A0 pin 3 to GND στο Arduino
o TC74A0 pin 4 to SCL στο Arduino
o TC74A0 pin 5 έως 5V στο Arduino
Βήμα 3: Κωδικός
#include // Περιλαμβάνει βιβλιοθήκες κατά τη μεταγλώττιση
#περιλαμβάνω
#περιλαμβάνω
#define Password_Lenngt 5
#define Command_Lenght 3
#define CellNumber 10
int χρήστες = 0;
int Οθόνη = 0;
int διεύθυνση = 72; // tc74a0 ΔΙΕΥΘΥΝΣΗ
int I = 0;
int USER;
int X = 0;
int XY = 0;
int temp?
int tempPre = 0;
char userNum [10] [10] = {{}, {}, {}};
char Δεδομένα [Password_Lenght];
char Master [Password_Lenght] = "5466"; //ΚΩΔΙΚΟΣ ΠΡΟΣΒΑΣΗΣ
char ExitData [Command_Lenght]; //
char Master1 [Command_Lenght] = "**"; //
char MenuItem;
char CELLArrayA [10];
char CELLArrayB [10];
char CELLArrayC [10];
const byte ROWS = 4; // τέσσερις σειρές
const byte COLS = 4; // τέσσερις στήλες
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] = // ΠΡΟΣΚΛΗΣΗ ΠΛΗΚΤΡΟΛΟΓΙΟΥ
{
{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}
};
Πληκτρολόγιο customKeypad = Πληκτρολόγιο (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
void setup ()
{
Serial.begin (9600); // αυτό δημιουργεί το Serial Monitor
Wire.begin (); // αυτό δημιουργεί ένα αντικείμενο Wire
lcd. αρχή (16, 2);
lcd. backlight ();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Περιμένετε 3"); // ΦΟΡΤΩΣΗ ΟΘΟΝΗΣ
καθυστέρηση (1000)?
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Περιμένετε 2");
καθυστέρηση (1000)?
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Περιμένετε 1");
καθυστέρηση (300)?
lcd.clear ();
String myString = "ARDUINO INSTRUCTABLE";
lcd.setCursor (2, 2);
lcd.print (myString);
καθυστέρηση (2500)?
για (int scrollCounter = 0; scrollCounter <24; scrollCounter ++)
{
lcd.scrollDisplayLeft ();
καθυστέρηση (300)?
}
lcd.clear ();
lcd.print ("Εισαγωγή κωδικού πρόσβασης");
}
κενός βρόχος ()
{
διακόπτης (Οθόνη) // ΠΟΥ ΣΤΟ ΚΥΡΙΟ ΜΕΝΟΥ ΕΙΜΑΣΤΕ
{// ΜΗΠΩΣ Ο ΤΥΠΟΣ ΤΗΣ ΧΡΗΣΤΗΣ Α, Β, Γ, Δ
θήκη 0:
{
Κωδικός πρόσβασης();
}
Διακοπή;
περίπτωση 1:
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("A B C D");
lcd.setCursor (0, 0);
lcd.print ("Κύριο μενού");
Οθόνη = 2?
καθυστέρηση (100)?
Διακοπή;
}
περίπτωση 2:
{
char customKey = customKeypad.getKey ();
διακόπτης (customKey)
{
περίπτωση «Α»:
{
Serial.println ("Το Α πιέστηκε");
StoreUser ();
Διακοπή;
}
περίπτωση «Β»:
{
Serial.println ("Πιέστηκε το Β");
εάν (χρήστες == 0) {
lcd.clear ();
lcd.print ("ΟΧΙ ΣΩΣΜΕΝΟΙ ΧΡΗΣΤΕΣ");
καθυστέρηση (3000)?
lcd.clear ();
Οθόνη = 1;
Διακοπή;
}
DisplayUsers (); Διακοπή;
}
περίπτωση «Γ»:
{
Serial.println ("Το C πιέστηκε"); // ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΚΑΤΑ ΤΗΝ ΔΟΚΙΜΗ
int ext = 0;
ενώ (! ext) {
char ch?
temp = TempMenu ();
αν (temp! = tempPre) {
lcd.clear ();
lcd.print ("Temparature");
lcd.setCursor (0, 1);
lcd.print (temp);
lcd.print ("C");
tempPre = temp;
καθυστέρηση (500)?
}
ch = customKeypad.getKey ();
αν (ch == ' *') // ΕΞΟΔΟΣ ΜΕΝΟΥ ΘΕΡΜΟΚΡΑΣΙΑΣ (εάν * ΠΙΕΣΕΤΑΙ)
{
ext = 1;
lcd.clear ();
Οθόνη = 1;
}
}
Διακοπή;
TempMenu ();
Διακοπή;
}
περίπτωση «D»:
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("NUA PRAC");
lcd.setCursor (0, 1);
lcd.print ("JB SCHOEMAN");
καθυστέρηση (3000)?
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("MAY 2019");
lcd.setCursor (0, 1);
lcd.print ("CC OOSTHUIZEN");
καθυστέρηση (3000)?
lcd.clear ();
Οθόνη = 1;
}
}
}
}
}
// ΠΡΟΣΑΡΜΟΓΕΣ ΛΕΙΤΟΥΡΓΙΕΣ ΓΙΑ ΚΛΗΣΗ ΑΞΙΩΝ OR ΔΙΑΔΙΚΑΣΙΩΝ
άκυρος κωδικός πρόσβασης ()
{
char customKey = customKeypad.getKey ();
εάν (customKey) // βεβαιωθεί ότι ένα πλήκτρο είναι πραγματικά πατημένο, ίσο με (customKey! = NO_KEY)
{
Δεδομένα [data_count] = customKey; // αποθηκεύστε το char σε πίνακα δεδομένων
lcd.setCursor (data_count, 1); // μετακίνηση δρομέα για εμφάνιση κάθε νέου χαρακτήρα
lcd.print ("*"); // εκτύπωση χαρακτήρα στον εν λόγω δρομέα
data_count ++; // Αύξηση συστοιχίας δεδομένων κατά 1 για αποθήκευση νέου χαρακτήρα, επίσης παρακολούθηση του αριθμού των χαρακτήρων που έχουν εισαχθεί
}
εάν (data_count == Password_Lenght-1) // εάν ο δείκτης πίνακα είναι ίσος με τον αριθμό των αναμενόμενων χαρακτήρων, συγκρίνετε δεδομένα με κύρια
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Ο κωδικός πρόσβασης είναι");
εάν (! strcmp (Δεδομένα, Master)) // ίσο με (strcmp (Δεδομένα, Master) == 0)
{
lcd.print ("Καλό");
lcd.clear ();
Οθόνη = 1;
}
αλλού
lcd.print ("Bad");
καθυστέρηση (1000); // πρόσθεσε καθυστέρηση 1 δευτερολέπτου για να βεβαιωθείτε ότι ο κωδικός πρόσβασης εμφανίζεται πλήρως στην οθόνη πριν διαγραφεί.
lcd.clear ();
καθαρισμός δεδομένων();
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Εισαγωγή κωδικού πρόσβασης");
}
}
int TempMenu ()
{
Wire.beginTransmission (διεύθυνση);
Wire.write (0);
Wire.endTransmission ();
Wire.requestFrom (διεύθυνση, 1)?
ενώ (Wire.available () == 0)?
int c = Wire.read ();
επιστροφή c?
}
void clearData ()
{
ενώ (data_count! = 0)
{// Αυτό μπορεί να χρησιμοποιηθεί για οποιοδήποτε μέγεθος πίνακα, Δεδομένα [data_count--] = 0; // καθαρός πίνακας για νέα δεδομένα
}
}
void StoreUser ()
{
int ext = 0;
int χρήστης;
char ch?
ενώ (! ext) {
lcd.clear ();
lcd.print ("Εισαγωγή χρήστη");
χρήστης = χρήστες + 1;
lcd.print (χρήστης);
int x = 0;
ενώ (! x) {
για (int i = 0; i <10; i ++) {
ch = customKeypad.waitForKey ();
lcd.setCursor (i, 1);
lcd.print (ch);
userNum [χρήστης - 1] = ch;
}
καθυστέρηση (500)?
lcd.clear ();
lcd.print ("Συνέχεια");
lcd.setCursor (0, 1);
lcd.print ("* ναι # όχι");
ch = customKeypad.waitForKey ();
αν (ch == '*') {
x = 1;
}
αν (ch == '#') {
x = 1;
ext = 1;
lcd.clear ();
Οθόνη = 1;
}
}
χρήστες ++;
}
}
void DisplayUsers ()
{
lcd.clear ();
για (int i = 0; i <χρήστες; i ++) {
lcd.print ("Αποθηκευμένος χρήστης");
lcd.print (i + 1);
για (int u = 0; u <10; u ++) {
lcd.setCursor (u, 1);
lcd.print (userNum [u]);
}
καθυστέρηση (2000).
lcd.clear ();
Οθόνη = 1;
}
}
Βήμα 4: ΟΔΗΓΟΣ ΧΡΗΣΤΗ
1. Κατά την ενεργοποίηση του έργου, θα εμφανιστεί μια οθόνη φόρτωσης ή καλωσορίσματος.
2. Θα εμφανιστεί μια οθόνη "Εισαγωγή κωδικού πρόσβασης", αυτή η οθόνη σας επιτρέπει να εισαγάγετε 4 χαρακτήρες, γράμματα ή αριθμούς, ο σωστός κωδικός πρόσβασης είναι: 5466, αυτό θα σας δώσει πρόσβαση στο κύριο μενού.
3. Με την εισαγωγή του σωστού κωδικού πρόσβασης, θα εμφανιστεί το κύριο μενού με 4 πιθανές επιλογές για πλοήγηση στις διάφορες διαθέσιμες λειτουργίες.
· A - Εισαγάγετε αριθμούς κινητού τηλεφώνου χρήστη.
o Εισαγάγετε 10 ψηφία για να αποθηκεύσετε έναν χρήστη στο σύστημα
o Αφού εισαχθούν 10 ψηφία πατήστε " *" για να προσθέσετε περισσότερους χρήστες ή πατήστε "#" για έξοδο στο κύριο μενού
· B - Εμφάνιση αποθηκευμένων χρηστών
o Οι χρήστες μετακινούνται με κύλιση στην οθόνη, εμφανίζονται για 3 δευτερόλεπτα ο καθένας, μόλις εμφανιστούν όλοι οι χρήστες, η σελίδα θα κλείσει και θα επιστρέψει στο κύριο μενού.
o Εάν δεν έχουν προστεθεί χρήστες στην επιλογή A του μενού, θα εμφανιστεί η ένδειξη "NO SAVED USERS".
· C - Εμφανίζει τη ζωντανή θερμοκρασία
o Πατήστε « *» για έξοδο στο κύριο μενού
· D - Εμφάνιση σύντομου κειμένου
o Εμφανίζει το όνομα του δημιουργού και το θέμα για το οποίο έχει συνταχθεί με ημερομηνία.
Συνιστάται:
M5StickC Cool Looking Watch με μενού και Έλεγχος φωτεινότητας: 8 βήματα
M5StickC Cool Looking Watch με μενού και Brightness Control: Σε αυτό το σεμινάριο θα μάθουμε πώς να προγραμματίζουμε το ESP32 M5Stack StickC με Arduino IDE και Visuino να εμφανίζει μια ώρα στην οθόνη LCD και επίσης να ρυθμίζουμε την ώρα και τη φωτεινότητα χρησιμοποιώντας το μενού και τα κουμπιά StickC . Παρακολουθήστε ένα βίντεο επίδειξης
Φορητή γεννήτρια λειτουργιών σε WiFi και Android: 10 βήματα
Φορητή γεννήτρια λειτουργιών σε WiFi και Android: Κοντά στα τέλη του 20ού αιώνα, εμφανίστηκαν διάφορες τεχνολογικές καινοτομίες, ειδικά στον τομέα των επικοινωνιών. αλλά όχι μόνο. Για εμάς, οι χρήστες, οι καταναλωτές και οι μηχανικοί ήρθαν στο φως ραγδαία ανάπτυξη ηλεκτρονικών συσκευών, που μπορούν να κάνουν τη ζωή μας
Δημιουργία προσαρμογέα Bluetooth Pt.2 (Δημιουργία συμβατού ηχείου): 16 βήματα
Δημιουργία προσαρμογέα Bluetooth Pt.2 (Δημιουργία συμβατού ηχείου): Σε αυτό το εκπαιδευτικό εγχειρίδιο, θα σας δείξω πώς να χρησιμοποιήσετε τον προσαρμογέα Bluetooth για να κάνετε συμβατό το παλιό ηχείο με Bluetooth. έναν προσαρμογέα Bluetooth " Σας προτείνω να το κάνετε πριν συνεχίσετε.C
Ένα μενού στο Arduino και πώς να χρησιμοποιήσετε τα κουμπιά: 10 βήματα (με εικόνες)
Ένα μενού στο Arduino και πώς να χρησιμοποιήσετε τα κουμπιά: Στο σεμινάριο μου στο Arduino 101, θα διδαχτείτε πώς να ρυθμίσετε το περιβάλλον σας στο Tinkercad. Χρησιμοποιώ το Tinkercad επειδή είναι μια αρκετά ισχυρή διαδικτυακή πλατφόρμα που μου επιτρέπει να επιδείξω μια σειρά δεξιοτήτων στους μαθητές για την κατασκευή κυκλωμάτων. Μη διστάσετε να
Δημιουργία μικρών ρομπότ: Δημιουργία ενός ρομπότ μικρού κυβικού ίντσας Micro-Sumo και μικρότερο: 5 βήματα (με εικόνες)
Δημιουργία Μικρών Ρομπότ: Δημιουργία Ρομπότ Μικρού Σούμο και Μικρότερων Κυβικών ίντσας: Ακολουθούν μερικές λεπτομέρειες σχετικά με την κατασκευή μικροσκοπικών ρομπότ και κυκλωμάτων. Αυτό το διδακτικό θα καλύψει επίσης μερικές βασικές συμβουλές και τεχνικές που είναι χρήσιμες στην κατασκευή ρομπότ οποιουδήποτε μεγέθους. Για μένα, μία από τις μεγάλες προκλήσεις στα ηλεκτρονικά είναι να δούμε πόσο μικρό είναι ένα