Ασυνήθιστο συνδυασμό κλειδώματος στο Arduino
Για να το συναρμολογήσετε πρέπει να χρησιμοποιήσετε μια ειδική συσκευή ορθογώνιων παλμών, καθώς και αρκετούς μετρητές και έναν σωρό. Αλλά η τελική συσκευή θα έχει μεγάλες συνολικές διαστάσεις και θα ήταν άβολο να χρησιμοποιηθεί. Κατά κανόνα, τέτοιες σκέψεις στοιχειώνουν. Το πρώτο βήμα στην πραγματοποίηση ενός ονείρου ήταν η δημιουργία ενός προγράμματος για το Arduino. Θα χρησιμεύσει ως κλειδαριά συνδυασμού. Για να το ανοίξετε, θα πρέπει να πατήσετε όχι ένα πλήκτρο, αλλά πολλά, και να το κάνετε ταυτόχρονα. Το τελικό σχήμα μοιάζει με αυτό:
Η ποιότητα της εικόνας δεν είναι η καλύτερη, αλλά η σύνδεση γίνεται στο έδαφος, D3, D5, D7, D9 και D11.
Ο κωδικός παρουσιάζεται παρακάτω:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
byte a = 0;
byte b = 0;
byte c = 0;
byte d = 0;
χωρίς υπογραφή μεγάλο χρονικό διάστημα = 0; // μην ξεχνάτε όλα όσα παίρνουν μια τιμή millis ()
unsigned long temp = 0; // αποθηκεύστε σε χωρίς υπογραφή μεγάλο
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // κωδικοί στην πραγματικότητα
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
άκυρη ρύθμιση () {
pinMode (σε, INPUT_PULLUP); // 3 είσοδοι συνδεδεμένες σε κουμπιά
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // ενσωματωμένο LED στον 13ο πείρο
pinMode (7, ΕΞΟΔΟΣ);
pinMode (11, ΕΞΟΔΟΣ);
digitalWrite (7, LOW); // αντικαταστήστε τη γη
digitalWrite (11, LOW);
χρόνος = χιλιοστά (); // απαιτείται να μετρήσω το χρόνο
}
void blinktwice () {// διπλό LED που αναβοσβήνει
digitalWrite (ledPin, HIGH);
καθυστέρηση (100)
digitalWrite (ledPin, LOW);
καθυστέρηση (100)
digitalWrite (ledPin, HIGH);
καθυστέρηση (100)
digitalWrite (ledPin, LOW);
καθυστέρηση (200);
}
κενός βρόχος () {
αν (k == 0) {
blinktwice (); // προτροπή για κωδικό
}
αν (k == 8) {
digitalWrite (ledPin, HIGH);
καθυστέρηση (3000)
το k είναι 0;
}
a = digitalRead (ina); // ανάγνωση επιπέδων σήματος από κουμπιά - πατημένο / όχι
b = digitalRead (inb);
c = digitalRead (inc);
καθυστέρηση (100) // επόμενο αν - προστασία από ψευδώς θετικά, δεν μπορείτε να χρησιμοποιήσετε
εάν ([digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
αν (a == keya [k]) {
αν (b == keyb [k]) {
αν (c == keyc [k]) {
k ++;
}
}
}
}
αν (k == 1) {
αν (d == 0) {
χρόνος = χιλιοστά ();
δ ++;
}
}
temp = millis ();
temp = temp - χρόνος;
εάν (θερμοκρασία> 10000) {
το k είναι 0;
d είναι 0;
χρόνος = χιλιοστά ();
}
}
Για να αποφευχθούν περιττές ερωτήσεις σχετικά με τον κώδικα, ορισμένα σημεία πρέπει να διευκρινιστούν. Η λειτουργία εγκατάστασης χρησιμοποιείται για την εκχώρηση θυρών. Η επόμενη συνάρτηση είναι Input_Pullup, η οποία είναι απαραίτητη για την αύξηση της τάσης του πείρου κατά 5 V. Αυτό γίνεται χρησιμοποιώντας μια αντίσταση. Λόγω αυτού, δεν θα εμφανιστούν διάφορα βραχυκύκλωμα. Για μεγαλύτερη ευκολία, συνιστάται η χρήση της λειτουργίας blinktwice. Σε γενικές γραμμές, κατά τη δημιουργία διαφόρων προγραμμάτων, πρέπει να δοκιμάσετε άλλες λειτουργίες.
Μετά την εκχώρηση των λειτουργιών, το σήμα διαβάζεται από τις θύρες. Εάν πατηθεί το κουμπί, τότε θα υποδεικνύεται από τον αριθμό 1, και εάν όχι - 2. Στη συνέχεια, μια ανάλυση όλων των τιμών. Για παράδειγμα, υπήρχε ένας συνδυασμός όπως 0,1,1. Αυτό σημαίνει ότι το πρώτο πλήκτρο είναι πατημένο και τα άλλα δύο δεν είναι. Εάν όλες οι τιμές είναι αληθείς, τότε η συνθήκη 8 ισχύει επίσης. Αυτό αποδεικνύεται από ένα αναμμένο LED στον μπροστινό πίνακα. Στη συνέχεια, πρέπει να εισαγάγετε έναν συγκεκριμένο κωδικό που θα χρησιμεύσει για το άνοιγμα της πόρτας.
Τα τελευταία στοιχεία του κώδικα χρησιμοποιούνται για την επαναφορά των τιμών μετρητή. Μια τέτοια λειτουργία εκτελείται εάν έχουν περάσει περισσότερα από 10 δευτερόλεπτα από την τελευταία πληκτρολόγηση.Χωρίς αυτόν τον κωδικό, θα μπορούσατε να εξετάσετε όλες τις πιθανές επιλογές, αν και υπάρχουν πολλές από αυτές. Αφού δημιουργήσετε αυτήν τη συσκευή, πρέπει να τη δοκιμάσετε.