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

Όσου! Πληκτρολόγιο: 8 βήματα (με εικόνες)
Όσου! Πληκτρολόγιο: 8 βήματα (με εικόνες)

Βίντεο: Όσου! Πληκτρολόγιο: 8 βήματα (με εικόνες)

Βίντεο: Όσου! Πληκτρολόγιο: 8 βήματα (με εικόνες)
Βίντεο: 8 πράγματα που δεν ξέρεις για το iPhone! | 2019 Tips 2024, Ιούλιος
Anonim
Όσου! Πληκτρολόγιο
Όσου! Πληκτρολόγιο

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

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

Σημείωση 1: Τα εξαρτήματα SMD (μικρά ηλεκτρονικά) χρησιμοποιούνται, επομένως, εάν αναπαράγετε αυτό το έργο απαιτούνται δεξιότητες συγκόλλησης. anσως θα προστεθεί μια εύκολη στη συγκόλληση έκδοση, αλλά αυτά τα led δεν μπαίνουν σε πακέτο τρύπας

Σημείωση 2: Έχω ενημερώσει τον κώδικα πολλές φορές και είμαι στην έκδοση 3ish τώρα. Θα αφήσω όλο τον κωδικό στο διαδίκτυο, αλλά σας συνιστώ να χρησιμοποιήσετε την τελευταία έκδοση. Επί του παρόντος δεν έχει λειτουργικότητα led, αλλά θα πρέπει να είναι η καλύτερη απόδοση.

Βήμα 1: Υλικά και επεξηγήσεις

Υλικά και επεξηγήσεις
Υλικά και επεξηγήσεις

Ανάλογα με το πώς φτιάχνετε το έργο σας μπορεί να χρειάζεστε διαφορετικά εξαρτήματα, αλλά αυτά τα στοιχεία είναι αυτά που χρησιμοποίησα. Εάν έχετε το χρόνο και θέλετε να εξοικονομήσετε χρήματα, παραγγείλετε από το aliexpress και μην παραγγείλετε το PCB.

1 καλώδιο Arduino pro micro + USB

3 κόκκινοι διακόπτες Kailh BOX

3 αντίσταση 10k (0805 SMD)

3 πυκνωτής 100nF (0805 SMD)

4 LED APA102 rgb (5050 SMD)

3 Κλειδιά

1 Η πλακέτα τυπωμένου κυκλώματος (PCB) παρέχεται σε αυτό το έργο

1 θήκη 3D εκτύπωσης που παρέχεται σε αυτό το έργο

Γιατί χρησιμοποιώ Arduino pro micro;

Οι περισσότεροι πίνακες arduino όπως το Uno (Atmega328) δεν έχουν εγγενή υποστήριξη για επικοινωνία USB. Ναι, μπορείτε να τα προγραμματίσετε μέσω USB πολύ εύκολα και νομίζω ότι υπάρχουν εναλλακτικές λύσεις, αλλά μου αρέσει να το κρατώ απλό όταν πρόκειται για επικοινωνία USB και δεν ξέρω αν οι λύσεις ανταποκρίνονται. Αυτοί οι πίνακες χρησιμοποιούν ένα εξωτερικό τσιπ για να καταστήσουν δυνατή την επικοινωνία USB, ενώ το Arduino pro micro (Atmega32U4) το έχει ενσωματωμένο.

Οι διακόπτες

Υπάρχουν πολλοί μηχανικοί διακόπτες που μπορείτε να χρησιμοποιήσετε. Γραμμικό, απτικό ή κλικ από το Kailh ή το Cherry MX. Επιλέξτε όποιο σας αρέσει. Χρησιμοποίησα τους διακόπτες Kailh επειδή ήταν φθηνοί στο Ailexpress. Εάν επιλέξετε να χρησιμοποιήσετε το PCB, θα χρειαστείτε διακόπτες Kailh BOX. Το χρώμα καθορίζει την αίσθηση.

Τα ηλεκτρονικά εξαρτήματα

Δεν υπάρχουν πολλά να εξηγήσω γι 'αυτά σε αυτό το κεφάλαιο, αλλά αν δεν χρησιμοποιείτε το PCB θα συνιστούσα απλά κανονικά εξαρτήματα οπών για εύκολη συγκόλληση. Δυστυχώς τα led που χρησιμοποιούνται δεν είναι διαθέσιμα σε πακέτα με τρύπες. Δεν θα συνιστούσα επίσης τη χρήση καλωδίων σε πακέτα SMD, εκτός εάν είστε πολύ σίγουροι για τις δεξιότητές σας συγκόλλησης. Ακόμα και για το SMD σε ένα PCB εξισορροπούνται οι "προηγμένες" δεξιότητες συγκόλλησης.

Το περίβλημα

Παρέχω μια στέγαση σε αυτό το έργο, αλλά αυτή τη στιγμή είναι ελαττωματικό. Απαιτούνται τροποποιήσεις για να τοποθετηθούν μπουλόνια, τα ανοίγματα για τα led δεν είναι τα βέλτιστα, το arduino είναι εκτεθειμένο και ένα μέρος πρέπει να κοπεί για να χωρέσει το USB. Στο μέλλον μπορεί να προστεθεί μια νέα κατοικία. Εάν έχετε έναν τρισδιάστατο εκτυπωτή, προχωρήστε και εκτυπώστε τον, αλλά μην βιάσετε να εκτυπώσετε αυτήν την ελαττωματική θήκη εάν δεν χρησιμοποιείτε και απλά χρησιμοποιείτε κάποιο είδος πλαισίου έργου.

Βήμα 2: Το σχηματικό

Το Σχηματικό
Το Σχηματικό

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

Αλλάξτε συνδέσεις στο Arduino

Οι διακόπτες συνδέονται με τους ακροδέκτες Arduino 0, 2 και 3 επειδή αυτοί οι ακροδέκτες μπορούν να χρησιμοποιηθούν ως εξωτερικές διακοπές. Αυτό εξηγείται περαιτέρω στην ενότητα κωδικών.

Το κύκλωμα αποκοπής

Στην αριστερή πλευρά του σχηματικού είναι ένα κύκλωμα που αντιγράφεται 3 φορές. Αυτό το κύκλωμα χρησιμοποιείται για την απενεργοποίηση του διακόπτη. Για να ξέρετε τι είναι το debouncing πρέπει να κατανοήσετε το switch bouncing και δεν είναι δύσκολο να το καταλάβετε.

Πρώτα κοιτάξτε αυτήν την προσομοίωση για να ζωγραφίσετε μια πρώτη εικόνα (κάντε γρήγορα κλικ στο διακόπτη και κοιτάξτε το σήμα παρακάτω)

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

Αυτό το κύκλωμα αποσύνδεσης θα επιβραδύνει την πτώση του άκρου του σήματος. Το σήμα στο Arduino δεν θα μπορεί να αλλάξει τόσο γρήγορα όσο συμβαίνει το αναπήδημα, οπότε θα διαβαστεί με ένα πάτημα. Μην ανησυχείτε ότι θα μειωθεί αργά για τον επόμενο πραγματικό τύπο γιατί θα συμβεί.

Προχωρημένος:

Το Atmaga32U4 διαβάζει ψηφιακά χαμηλά στα 0.2Vcc - 0.1V = 0.9 volt. Η τάση του πυκνωτή ανά πάσα στιγμή κατά την εκφόρτισή του είναι Vcc * e^(-t/RC). Εάν μετράτε διαφορετικό χρόνο απόρριψης στον διακόπτη σας, μπορείτε να υπολογίσετε τις τιμές αντίστασης και πυκνωτή.

φόρμουλα φόρμας

Τα LED

Οι λυχνίες LED rgb είναι led APA102 που μπορούν να διευθετηθούν μεμονωμένα χρησιμοποιώντας ένα ρολόι και μια γραμμή δεδομένων. Δεν χρειάζονται εξωτερικά εξαρτήματα για να λειτουργήσουν. Για πολλές λυχνίες LED θα πρέπει να χρησιμοποιήσετε έναν πυκνωτή παράλληλο με 5 βολτ και γείωση, αλλά με μόλις 4 LED δεν τον χρειάζεστε.

Βήμα 3: Ο σχεδιασμός του πίνακα

Ο σχεδιασμός του πίνακα
Ο σχεδιασμός του πίνακα

Το PCB σχεδιάστηκε σε JLCPCB. Δεν με χορηγούν αλλά για φθηνά πρωτότυπα κάνουν εξαιρετικά PCB. Για 2 δολάρια παίρνετε 10 από τον ίδιο πίνακα, αλλά η αποστολή ήταν περίπου 11 δολάρια για μένα. Εάν δεν θέλετε κατ 'ανάγκην φωτισμό rgb και σχεδιάζετε να φτιάξετε μόνο ένα, θα πρέπει να σκεφτείτε να φτιάξετε το πληκτρολόγιό σας χωρίς PCB.

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

Για να παραγγείλετε το PCB, μεταβείτε στη διεύθυνση https://jlcpcb.com/ και επιλέξτε την επιλογή 2 στρωμάτων. Θα σας ζητήσει ένα αρχείο Gerber. κατεβάστε το αρχείο ".zip" και σύρετέ το στο παράθυρο. Δεν χρειάζεται να το αποσυμπιέσετε. Οι ρυθμίσεις πρέπει να είναι καλές και μπορείτε να προχωρήσετε και να ολοκληρώσετε την παραγγελία.

Βήμα 4: Συμβουλές σχεδιασμού και συναρμολόγησης

Συμβουλές για το σχεδιασμό και τη συναρμολόγηση
Συμβουλές για το σχεδιασμό και τη συναρμολόγηση
Συμβουλές για το σχεδιασμό και τη συναρμολόγηση
Συμβουλές για το σχεδιασμό και τη συναρμολόγηση
Συμβουλές για το σχεδιασμό και τη συναρμολόγηση
Συμβουλές για το σχεδιασμό και τη συναρμολόγηση
Συμβουλές για το σχεδιασμό και τη συναρμολόγηση
Συμβουλές για το σχεδιασμό και τη συναρμολόγηση

Σχέδιο

Όπως αναφέρθηκε προηγουμένως, ο σχεδιασμός μου είναι ελαττωματικός, αλλά μπορείτε ακόμα να τον εκτυπώσετε αν θέλετε. ο σχεδιασμός έγινε στο Fusion 360. Είναι ένα δωρεάν λογισμικό τρισδιάστατης μοντελοποίησης και με την εμπειρία μου από τον εφευρέτη και τη solidworks ήταν πολύ εύκολο να δουλέψω. Οι κύκλοι στις γωνίες της θήκης είναι για να αποφευχθεί το ξεφλούδισμα από την εκτύπωση.

Εάν κάνετε τη δική σας υπόθεση, μόνο ένα πράγμα είναι πραγματικά σημαντικό. Οι διακόπτες σας πρέπει να είναι σταθερά τοποθετημένοι και να μην μπορούν να μετακινηθούν. Έχω παράσχει εικόνες των τετραγωνικών αποκοπών με διαστάσεις, ώστε να μπορείτε να το χρησιμοποιήσετε για το δικό σας σχέδιο υποθέτοντας ότι χρησιμοποιείτε διακόπτες Kailh BOX.

Συνέλευση

Τώρα έχετε όλα τα εξαρτήματα που απαιτούνται για τη συναρμολόγηση. Υπάρχει εντολή συναρμολόγησης αυτής της πρώτης έκδοσης επειδή οι διακόπτες είναι κολλημένοι.

1. Συγκολλήστε τα εξαρτήματα SMD. Αυτές είναι οι αντιστάσεις, οι πυκνωτές και τα LED.

2. Συγκολλήστε το Arduino pro micro.

3. Τοποθετήστε τους 3 διακόπτες στην τρισδιάστατη εκτυπωμένη πλάκα πριν από τη συγκόλληση. Η επικάλυψη δεν μπορεί να αφαιρεθεί μετά τη συγκόλληση των διακοπτών. Δεν συνιστάται η απόψυξη των διακοπτών και μπορεί να καταστραφούν.

4. Τώρα κολλήστε τους διακόπτες στη θέση τους. Κάντε το όσο το δυνατόν γρηγορότερα γιατί οι πλαστικοί διακόπτες μπορούν να λιώσουν και να τους καταστρέψουν ή να μειώσουν δραστικά τον αριθμό των κλικ τους.

5. Τοποθετήστε τη συναρμολογημένη πλάκα στην τρισδιάστατη θήκη και στερεώστε την με ταινία ή χρησιμοποιήστε μπουλόνια εάν δεν παρεμβαίνουν στα καπάκια.

6. Τοποθετήστε το keyCaps στους διακόπτες και τελειώσατε.

Προτάσεις

Αποσυγκολλήστε ή καλύψτε τις λυχνίες LED στο arduino μετά τη μεταφόρτωση του κωδικού σας. Τα led είναι ωραία να υπάρχουν αν ο κωδικός σας δεν ανεβαίνει αλλά δεν είναι ωραίο να τα βλέπετε ως τελικό προϊόν. Απαιτούνται τσιμπιδάκια με δεξιότητες και μυτερά.

Επίσης, μερικά πόδια λαβής στο κάτω μέρος είναι ωραία για αντιολισθητικότητα και αφήνουν το φως rgb να λάμπει.

Βήμα 5: Ο Κώδικας V1 (Debounce υλικού)

The Code V1 (Debounce υλικού)
The Code V1 (Debounce υλικού)
The Code V1 (Debounce υλικού)
The Code V1 (Debounce υλικού)

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

Μεταφόρτωση του κώδικα

Κατεβάστε πρώτα και τα 3 αρχεία ".ino" και τοποθετήστε τα σε ένα φάκελο. Εάν δεν έχετε το Arduino IDE, απλώς κατεβάστε το δωρεάν στον επίσημο ιστότοπο arduino.

Συνδέστε το Arduino στον υπολογιστή σας και ανοίξτε το "OSU_Keyboard_code_V1.ino". Στο Tools Board επιλέξτε "Arduino/Genuino Micro". Επίσης στα Εργαλεία επιλέξτε τη σωστή θύρα COM. Αυτό μπορεί μερικές φορές να αλλάξει. Για να ανεβάσετε τον κώδικα στο Arduino σας, απλώς κάντε κλικ στο βέλος στην επάνω αριστερή γωνία της οθόνης και περιμένετε μέχρι να σας πει ότι ολοκληρώθηκε κάτω αριστερά.

OSU_Keyboard_code_V1

Συμπεριλαμβανομένου και καθορισμού

Πρώτα πρέπει να συμπεριλάβετε τη βιβλιοθήκη πληκτρολογίου. Αυτό καθιστά δυνατή τη χρήση του Arduino ως πληκτρολόγιο.

Στη συνέχεια ορίζω ορισμένες τιμές. Το Define είναι ακριβώς όπως μια μεταβλητή, αλλά δεν μπορούν να αλλάξουν ενώ το πρόγραμμα εκτελείται. Τα πρώτα 9 είναι για τον χαρακτήρα του πληκτρολογίου, τον αριθμό arduino pin και τα bit bit.

Στη συνέχεια, τα δυαδικά ψηφία των δεδομένων LED και του ρολογιού.

Επίσης, ο αριθμός των led καθορίζεται και μια μεταβλητή για τη γωνία του χρωματικού τροχού.

Ρύθμιση

Αυτό το μέρος του κώδικα θα εκτελεστεί μόνο μία φορά όταν είναι συνδεδεμένο το arduino.

Αρχικά, οι ακίδες ρολογιού και δεδομένων των LED καθορίζονται ως έξοδοι και οι ακίδες διακόπτη ως είσοδοι. Αυτή είναι η προηγμένη έκδοση του pinMode (). Εάν ενδιαφέρεστε, αναζητήστε "χειρισμό άμεσης θύρας".

Το Keyboard.begin () απλώς ξεκινά τη σύνδεση usb ως πληκτρολόγιο.

Οι επόμενες 3 διακοπές συνδέονται με τις ακίδες διακόπτη. Κάθε φορά που εντοπίζεται μια αλλαγή στο pin του διακόπτη, εκτελείται ένα μικροσκοπικό πρόγραμμα. Αυτό το μικρό πρόγραμμα θα γίνει περαιτέρω.

Βρόχος

Αυτό το μέρος θα επαναλαμβάνεται συνεχώς όσο τροφοδοτείται το arduino.

Το χρησιμοποιώ μόνο για να αλλάξω και να ενημερώσω το χρώμα των LED.

Διακόπτει

Εδώ γίνονται τα μικρά προγράμματα, τα οποία θα εκτελούνται μόνο όταν εντοπιστεί αλλαγή στις ακίδες διακόπτη. Είναι πανομοιότυπα εκτός από το σε ποια καρφίτσα αντιδρούν.

Αρχικά ελέγχει αν το κουμπί πατηθεί ή απελευθερωθεί και στέλνει τη σωστή εντολή πληκτρολογίου.

LED (εξηγείται με διαφορετική σειρά)

Εάν είστε περίεργοι για το πώς ελέγχονται οι λυχνίες LED, θα πρέπει να δείτε το φύλλο δεδομένων APA102.

Ενα κομμάτι

Αυτή είναι και πάλι η άμεση έκδοση χειρισμού ψηφιακής εγγραφής.

Αρχικά ελέγχει αν πρέπει να στείλει ένα 0 ή 1 και αντίστοιχα τραβάει τον πείρο δεδομένων χαμηλά ή ψηλά. Στη συνέχεια γράφει τον πείρο του ρολογιού ψηλά πολύ σύντομα και τον γράφει ξανά χαμηλά.

OneByte

Αυτό επαναλαμβάνεται το oneBit 8 φορές με έναν βρόχο "for". Διαβάζει το πρώτο bit σε byte και περνά την τιμή του στη συνάρτηση oneBit και κάνει το ίδιο για τα επόμενα 7 bits.

LedData

Αυτό επαναλαμβάνεται το oneByte 4 φορές για να παρέχει τα δεδομένα που απαιτούνται για ένα led. Το πρώτο byte ξεκινά με 111xxxxx και τιμή φωτεινότητας 5 bit στη θέση του xxxxx. Η φωτεινότητα μπορεί να ρυθμιστεί από 0 έως 31 (2^5 = 32 επίπεδα).

Τα επόμενα 3 byte είναι για τις μπλε, πράσινες και κόκκινες τιμές. Ένα byte για κάθε χρώμα.

ColorWheelThisLed

Αυτή η λειτουργία καλεί το ledData του δίνει τα χρώματα rgb ανάλογα με μια γωνία στον έγχρωμο τροχό.

Η τιμή των 16 δυαδικών ψηφίων διαιρείται σε 6 εξίσου απομακρυσμένα τμήματα των 60 μοιρών. Κοιτάζοντας τις εικόνες μπορεί να σας βοηθήσει να καταλάβετε καλύτερα.

(παρέχεται επίσης μια έκδοση 8 bit, αλλά σχολιάστηκε επειδή είναι πολύ τρεμούλιασμα)

StartEndFrame

Το πλαίσιο εκκίνησης πρέπει να χρησιμοποιείται κάθε φορά που θέλετε να στείλετε νέα χρώματα στα led και θέλετε να ενημερώσετε το πραγματικό χρώμα των led

Χρησιμοποιώ μόνο το πλαίσιο εκκίνησης επειδή το τελικό πλαίσιο δεν χρειάζεται. Το πλαίσιο εκκίνησης είναι 4 bytes των 0. Το τελικό πλαίσιο είναι 4 byte των 255 (11111111).

Βήμα 6: Ο κώδικας V2 (λογισμικό Debounce With Timers)

Ο κωδικός V2 (λογισμικό Debounce With Timers)
Ο κωδικός V2 (λογισμικό Debounce With Timers)

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

Δεν θα εξηγήσω τον κώδικα τόσο εκτενώς όσο η προηγούμενη έκδοση γιατί είναι λίγο πιο δύσκολο να εξηγηθεί.

Βασικά ο περισσότερος κώδικας λειτουργεί το ίδιο και ο κωδικός led παραμένει ανέγγιχτος. Αυτό που άλλαξε είναι ότι οι εξωτερικές διακοπές δεν χρησιμοποιούν πλέον τις λειτουργίες arduino. Τώρα λειτουργεί σε καθαρό κώδικα C. Και τώρα αυτό που προστίθεται είναι η διακοπή του λογισμικού. Για αυτό χρησιμοποίησα τα χρονόμετρα AVR για να περιμένω ένα ορισμένο χρονικό διάστημα μέχρι να σταματήσει η αναπήδηση. Επειδή τα χρονόμετρα διακόπτονται με βάση τον χρόνο αποσύνδεσης δεν επηρεάζεται από οτιδήποτε συμβαίνει στον βρόχο.

Το μόνο μειονέκτημα που μπορώ να καταλήξω είναι ότι οι συναρτήσεις καθυστέρησης arduino δεν μπορούν πλέον να χρησιμοποιηθούν. Επειδή οι λειτουργίες καθυστέρησης χρησιμοποιούν το χρονόμετρο 0 και αυτό το πρόγραμμα χρησιμοποιεί το χρονόμετρο 0 για να καταργηθεί.

Στην εικόνα μπορείτε να δείτε πώς λειτουργεί περίπου ο κώδικας. Το bit mem υποδεικνύει εάν λειτουργεί χρονοδιακόπτης. Αυτό που δεν απεικονίζεται είναι ότι στο τέλος του κουμπιού πατήστε την είσοδο είναι χαμηλή. Σε αυτήν την περίπτωση θα αποσταλεί μόνο ένα πάτημα πλήκτρου ενώ το κουμπί είναι ήδη ελεύθερο. Αυτό σημαίνει ότι το κλειδί θα κρατηθεί πατημένο όσον αφορά τον υπολογιστή. Για αυτήν τη σπάνια εκτέλεση, θα πραγματοποιηθεί ένας έλεγχος όταν λήξει ένα χρονόμετρο. Εάν στο τέλος ενός χρονοδιακόπτη δεν πατηθεί το κουμπί, θα σταλεί μια εντολή απελευθέρωσης κλειδιού.

Βήμα 7: Ο Κώδικας V3 (λογισμικό Debounce With Vertical Counter) (συνιστάται) (χωρίς LED)

Ο κωδικός V3 (λογισμικό Debounce With Vertical Counter) (συνιστάται) (χωρίς LED)
Ο κωδικός V3 (λογισμικό Debounce With Vertical Counter) (συνιστάται) (χωρίς LED)

Αυτός ο κωδικός έχει επίσης μια έκδοση όπου δεν χρειάζεστε αντιστάσεις έλξης. Βεβαιωθείτε ότι έχετε συνδέσει κάθε κουμπί στην είσοδο και στο GROUND! Χρησιμοποιείται το ενσωματωμένο pull-up

Βίωσα επίσης κάποιες μη καταχωρημένες πρέσες στον κωδικό V2. Νομίζω ότι ο κώδικας έγινε πολύ περίπλοκος με το χρονόμετρο και την εξωτερική διακοπή και μπορεί να έχω χάσει κάποιες εξαιρέσεις. Για το λόγο αυτό προσπάθησα από την αρχή να ψάξω στο διαδίκτυο για μεθόδους κατάργησης λογισμικού.

(ειλικρινά, τουλάχιστον το μισό αυτού του έργου έχει καταργηθεί με κουμπιά σε αυτό το σημείο)

Μετά από αρκετή αναζήτηση, συνάντησα αυτήν την ανάρτηση:

www.compuphase.com/electronics/debouncing….

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

Η εξήγησή μου

Το διάγραμμα χρονισμού (φτιαγμένο στο WaveDrom) που πρόσθεσα πρέπει να καταστήσει αυτό το δύσκολο να κατανοήσει τα μαθηματικά bit τουλάχιστον λίγο πιο κατανοητό. Σημειώστε ότι η εικόνα έχει 2 δυαδικά ψηφία μετρητή, αλλά ο κώδικας μου έχει 3. Αυτό σημαίνει μεγαλύτερο χρόνο απόσβεσης.

Ένα bit ανά τιμή

Με την εφαρμογή του κατακόρυφου μετρητή είναι δυνατή η κατάργηση πολλών κουμπιών ταυτόχρονα, παράλληλα. Όλες οι τιμές είναι τύπου Byte (uint8_t) και αποτελούνται από 8 bits. δεν μας ενδιαφέρει τι αξία περιέχει οποιοδήποτε από αυτά τα byte, αλλά μας ενδιαφέρουν τα κομμάτια από μόνα τους. Κάθε κουμπί που καταργείται χρησιμοποιεί μόνο ένα bit από κάθε byte. Το πρώτο κουμπί χρησιμοποιεί μόνο το πρώτο bit από κάθε byte, το δεύτερο κουμπί χρησιμοποιεί το δεύτερο bit κ.λπ.

Όλα ταυτόχρονα

Με τη χρήση των μαθηματικών δυαδικών ψηφίων είναι δυνατή η εκτέλεση αυτών των αποκλίσεων του pin παράλληλα. Και, αν και τα μαθηματικά bit είναι αρκετά περίπλοκα, είναι πολύ αποδοτικά για τον επεξεργαστή.

Με έναν τύπο δεδομένων 8 bit, μπορείτε να το κάνετε αυτό για 8 κουμπιά. Η χρήση μεγαλύτερων τύπων δεδομένων επιτρέπει περισσότερες αποκλίσεις ταυτόχρονα.

Η αποκήρυξη

Η ρουτίνα αποσύνδεσης εκτελείται κάθε 1 χιλιοστό του δευτερολέπτου με διακοπή χρονοδιακόπτη.

όταν πατηθεί το κουμπί, το κουμπίState, το οποίο είναι η κατάσταση κατάργησης, θα υποχωρήσει χαμηλά, υποδεικνύοντας ένα πάτημα κουμπιού. Για να εντοπίσετε μια απελευθέρωση, το κουμπί πρέπει να είναι ψηλά για αρκετό καιρό, υποδεικνύοντας ότι δεν έχει αναπηδήσει για συγκεκριμένο χρόνο. Το Toggle χρησιμοποιείται για την ένδειξη αλλαγής κουμπιού. Τα μετρητά μετρητών χρησιμοποιούνται για…. μετρώντας πόσο καιρό δεν έχει υπάρξει αναπήδηση.

Το Delta υποδεικνύει διαφορά μεταξύ της εισόδου και της κατάργησης κατάστασης. Μόνο όταν υπάρχει διαφορά ο μετρητής θα μετράει. ο μετρητής θα επαναρυθμιστεί όταν εντοπιστεί μια αναπήδηση (το δέλτα είναι 0).

Βήμα 8: Το αποτέλεσμα

Image
Image

Εάν όλα πήγαν καλά θα πρέπει τώρα να έχετε ένα πληκτρολόγιο εργασίας για να παίξετε Osu! επί. Προσωπικά δεν έχω παρατηρήσει καθυστέρηση καθόλου. Αν το κάνετε παρακαλώ ενημερώστε με. Επίσης, εάν υπάρχουν ερωτήσεις, μη διστάσετε να ρωτήσετε οτιδήποτε.

Οι προηγούμενες αναφορές για ένα V2 δεν σημαίνουν υπόσχεση, οπότε μην αναβάλλετε αυτό το έργο επειδή θέλετε να περιμένετε για το V2.

Ελπίζω να απολαύσατε το πληκτρολόγιό σας!

Όσου! όνομα: Thomazzz3

Αντιμετώπιση προβλημάτων

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

Δεν λειτουργεί ένα ή περισσότερα πλήκτρα;

Είναι πιθανό να καταστρέψετε έναν διακόπτη εσωτερικά κατά τη συγκόλληση. Εάν έχετε ένα πολύμετρο, θέστε το σε συνέχεια/μπιπ, τοποθετήστε το παράλληλα με το διακόπτη ενώ το Arduino δεν είναι συνδεδεμένο και πατήστε το πλήκτρο. Θα πρέπει να ηχεί.

Ταιριάζουν οι χαρακτήρες που μόλις πληκτρολογήσατε με τα κλειδιά που διαμορφώσατε στο Osu!;

Αλλάξτε τους χαρακτήρες στον κώδικα arduino στα πρώτα 3 #Defines ('' είναι απαραίτητο!).

Or άλλαξε το Osu σου! ρυθμίσεις για τη χρήση των διαμορφωμένων κλειδιών.

Ένα ή περισσότερα πλήκτρα επαναλαμβάνονται μερικές φορές;

Το κύκλωμα αποκοπής πιθανώς δεν λειτουργεί για τους διακόπτες σας ή δεν είναι σωστά συγκολλημένο. Ελέγξτε τις συνδέσεις συγκόλλησης. Εάν εξακολουθεί να συμβαίνει δοκιμάστε μια τιμή πυκνωτή 1uF. Αυτό θα είναι πολύ δύσκολο για τους χρήστες PCB.

Εάν αντιμετωπίζετε προβλήματα με τα LED σας

Τα LED αναβοσβήνουν;

Μια σύνδεση συγκόλλησης μπορεί να είναι χαλαρή. Εάν χρησιμοποιείτε το PCB, επιβεβαιώστε ότι ο κασσίτερος συγκόλλησης κυλούσε πραγματικά στο ταμπόν στην εκτύπωση.

Κανένα από τα led δεν λειτουργεί ή από ορισμένο αριθμό LED δεν σταματά να λειτουργεί;

Ελέγξτε για σορτς μεταξύ των συνδέσεων του πρώτου LED (ακολουθήστε τα κομμάτια) και ελέγξτε για καλά συνδεδεμένο κασσίτερο στις εξόδους του Arduino και πάλι το πρώτο LED. Εάν επιβεβαιωθεί ότι είναι σωστό και εξακολουθεί να είναι ελαττωματικό, ίσως χρειαστεί να αντικαταστήσετε το πρώτο LED.

Εάν αυτό διορθωθεί, επαναλάβετε για τα επόμενα LED, εάν χρειάζεται.

Συνιστάται: