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

Πληκτρολόγιο One Pin 4 × 4: 10 Βήματα
Πληκτρολόγιο One Pin 4 × 4: 10 Βήματα

Βίντεο: Πληκτρολόγιο One Pin 4 × 4: 10 Βήματα

Βίντεο: Πληκτρολόγιο One Pin 4 × 4: 10 Βήματα
Βίντεο: Η γκουγκου δεν σεβεται τον πατερα της 2024, Νοέμβριος
Anonim
Πληκτρολόγιο One Pin 4 × 4
Πληκτρολόγιο One Pin 4 × 4

Κάθε φορά που βλέπω ένα πληκτρολόγιο, έρχεται με πολλές καρφίτσες, είναι μια μεγάλη σπατάλη των καρφιών σας Arduino, οπότε μπορούμε να εκτελέσουμε ένα πληκτρολόγιο με έναν και μόνο έναν πείρο;. Η απάντηση είναι εδώ.

Βήμα 1: Λογαριασμός Υλικών

Λογαριασμός Υλικών
Λογαριασμός Υλικών

Σκεύη, εξαρτήματα:

01 Arduino UNO

02 Breadboards

01 LCD με I2C

16 Πιέστε τα κουμπιά

04 αντιστάσεις 1,5 kΩ

04 αντιστάσεις 620 Ω

04 αντιστάσεις 220 Ω

08 αντιστάσεις 100 Ω

01 αντίσταση 1 kΩ

07 Σύρματα βραχυκυκλωτήρων

Λογισμικό:

Το Arduino IDE είναι εγκατεστημένο στον υπολογιστή σας

Βήμα 2: Σχηματικό και Cicruit

Schematic και Cicruit
Schematic και Cicruit
Schematic και Cicruit
Schematic και Cicruit

Όλη η ιδέα είναι ότι έχουμε 4*4 μήτρα κουμπιών πίεσης που συνδέονται κάθετα στο έδαφος με το σωστό καλώδιο και οριζόντια από το άλλο καλώδιο (το κουμπί) και αντιστάσεις 1,5 kΩ, 620Ω, 220Ω και 100Ω, τα άκρα του οι 4 σειρές συνδέονται με τέσσερις αντιστάσεις 100Ω όπως φαίνεται στο σχήμα.

Κάθε φορά που πατάτε ένα κουμπί κλείνετε το κύκλωμα και το ρεύμα περνάει από διαφορετική διαδρομή και διαφορετική αλυσίδα αντιστάσεων, γι 'αυτό το pin A0 λαμβάνει διαφορετική αναλογική ανάγνωση για κάθε κουμπί. Το μόνο που χρειάζεστε τώρα είναι η κωδικοποίηση.

Βήμα 3: Ο κώδικας

#περιλαμβάνω

#περιλαμβάνω

LiquidCrystal_I2C LCD (0x3f, 20, 4);

int Κουμπί = A0;

int readvalue?

void setup ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Κουμπί, ΕΙΣΟΔΟΣ);

lcd. backlight ();

lcd.print ("Hello World");

καθυστέρηση (2000).

lcd.clear ();

lcd.print ("Ένα pin 4*4 πληκτρολόγιο");

καθυστέρηση (2000). }

κενός βρόχος ()

{

readvalue = analogRead (Κουμπί);

Serial.println (readvalue);

if (readvalue == 852) {lcd.clear (); lcd.print ("A");}

else {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}

else {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}

else {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}

else {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}

else {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}

else {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}

else {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}

else {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}

else {if (readvalue == 349) {lcd.clear (); lcd.print ("5");}

else {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}

else {if (readvalue == 279) {lcd.clear (); lcd.print ("0");}

else {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}

else {if (readvalue == 271) {lcd.clear (); lcd.print ("4");}

else {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}

else {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} else {}}}}}}}}}}}}}}}}

Βήμα 4: Διόρθωση τιμών

Διόρθωση Αξιών
Διόρθωση Αξιών

Όταν ανοίξετε το σειριακό μόνιτορ, θα εμφανιστεί μια τιμή 1023, αν πατήσετε ένα κουμπί θα σας δώσει άλλη ανάγνωση, πρέπει να λάβετε αυτές τις τιμές και να κάνετε κάποιες αλλαγές στον κώδικα

Βήμα 5: Έργο μετά από κριτική και ανασκόπηση

Project After Criticics and Review
Project After Criticics and Review

Δεν υπάρχει αμφιβολία ότι όλοι είμαστε εδώ για να μάθουμε και να μοιραστούμε τις γνώσεις μας, χάρη σε κάποια σχόλια που άφησαν κάποιοι από την κοινότητα που ήταν πολύ χρήσιμα, αποφάσισα να κάνω κάποιες προσαρμογές και βελτιώσεις στο έργο μου:

Το υλικό:

Αποφάσισα να κολλήσω όλα τα εξαρτήματα σε ένα PCB για να αποφύγω το πρόβλημα της κακής σύνδεσης στις σανίδες ψωμιού.

Ο κώδικας:

Ένας φίλος με συμβούλεψε να χρησιμοποιήσω ένα λογισμικό αποσυναρμολόγησης και είναι απλώς ένας βρόχος (για παράδειγμα ο βρόχος "για") για να κάνει το πρόγραμμα να πάρει λίγο χρόνο για να διαβάσει, σημαίνει ότι διαβάζει πολλά (500 στην εξέτασή μου) αλλά διαρκεί μόνο το τελευταίο.

για (i = 1; i <= 500; i ++) {// πάρτε μόνο την 500η αναλογική ανάγνωση

value = analogRead (Κουμπί);} // αυτό θα σας βοηθήσει να αφιερώσετε λίγο χρόνο και να αποφύγετε κακές αναγνώσεις

Ένας άλλος φίλος χάρη σε αυτόν με συμβούλεψε να συγκρίνω το "readvalue" με ένα εύρος τιμών όχι μία επειδή η "readvalue" παίρνει πολλές τιμές για το ίδιο κουμπί. Το "A" για παράδειγμα δίνει μια ανάγνωση των: 849, 850, 851 852, 853, 854, 855 άρα είναι ένα εύρος 7 τιμών: ένα κατώφλι (852) και 3 τιμές αριστερά και δεξιά. αυτό που πρέπει να κάνουμε εδώ είναι να συγκρίνουμε την απόλυτη τιμή της διαφοράς μεταξύ "readvalue" και "852" με "3".

if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}

Βήμα 6: Μετά από μερικές εργασίες συγκόλλησης

Μετά από μερικές εργασίες συγκολλήσεων
Μετά από μερικές εργασίες συγκολλήσεων
Μετά από μερικές εργασίες συγκολλήσεων
Μετά από μερικές εργασίες συγκολλήσεων
Μετά από μερικές εργασίες συγκολλήσεων
Μετά από μερικές εργασίες συγκολλήσεων

Βήμα 7: Η στιγμή της αλήθειας

Όπως μπορείτε να δείτε, το πρόγραμμα μερικές φορές μπερδεύει τα κουμπιά αλλά εξακολουθεί να λειτουργεί, θεωρητικά δεν υπάρχει τίποτα λάθος με το κύκλωμα, αλλά ο κώδικας χρειάζεται περισσότερη βαθμονόμηση.

Βήμα 8: Το τέλος

Ελπίζω να σας αρέσει αυτό το έργο και προσπαθείτε να το κάνετε, ίσως να κάνετε καλύτερα από μένα.

Ρωτήστε με εάν έχετε ερωτήσεις, αφήστε σχόλια και μην ξεχάσετε να με ψηφίσετε αν σας αρέσει αυτό.

Συνιστάται: