Πίνακας περιεχομένων:

Arduino UNO (δημιουργία μενού και λειτουργιών): 4 βήματα
Arduino UNO (δημιουργία μενού και λειτουργιών): 4 βήματα

Βίντεο: Arduino UNO (δημιουργία μενού και λειτουργιών): 4 βήματα

Βίντεο: Arduino UNO (δημιουργία μενού και λειτουργιών): 4 βήματα
Βίντεο: προγραμματισμός ρελέ με arduino 2024, Νοέμβριος
Anonim
Arduino UNO (δημιουργία μενού και λειτουργιών)
Arduino UNO (δημιουργία μενού και λειτουργιών)
Arduino UNO (δημιουργία μενού και λειτουργιών)
Arduino UNO (δημιουργία μενού και λειτουργιών)

Σε αυτό το διδακτικό θα διερευνήσουμε πώς να δημιουργήσετε μενού, να διαβάσετε τη θερμοκρασία από έναν αισθητήρα 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 Εμφανίζει το όνομα του δημιουργού και το θέμα για το οποίο έχει συνταχθεί με ημερομηνία.

Συνιστάται: