Arduino κλειδαριά με κωδικοποιημένο σύστημα χτύπων
Για να ολοκληρωθεί η Arduino κλειδαριά με κωδικοποιημένο σύστημα χτύπων θα χρειαστεί να αναπτύξουμε τον παρακάτω κώδικα στον Arduino IDE και να τον φορτώσουμε στο Arduino Board. Μπορείτε να βρείτε ολόκληρο τον κώδικα σε ένα αρχείο με κατάληξη .ino εδώ.
Arduino κλειδαριά με κωδικοποιημένο σύστημα χτύπων: Ορισμός Πυλών.
Παρακάτω θα παρακολουθήσουμε τον ορισμό και την αρχικοποίηση των σταθερών (constants) που χρησιμοποιούνται για τον ορισμό των πυλών του Arduino Board που συνδέσαμε τα περιφερειακά όργανα.
//Ορισμός πυλών του Arduino Board //που χρησιμοποιήθηκαν για την //σύνδεση των περιφερειακών υλικών. //Το Piezo στην πύλη Analog 0. const int piezo = 0; //Τον διακόπτη στην πύλη 2. const int programSwitch = 2; //Για την κίνηση του μοτέρ η πύλη 3 const int motor = 3; //To κόκκινο LED στην πύλη 4. const int redLed = 4; //To πράσινο LED στην πύλη 5. const int greenLed = 5;
Οι μεταβλητές.
Παρακάτω θα παρακολουθήσουμε τον ορισμό των διαφόρων μεταβλητών που χρησιμοποιούνται για την αποθήκευση των δεδομένων που λαμβάνουν οι αισθητήρες και την υλοποίηση των διαφόρων αναγκαίων υπολογισμών.
//Η ελάχιστη έγκυρη τιμή από τον αισθητήρα Piezo. const int threshold = 3; //Αν το τρέχον χτύπημα που λήφθηκε //είναι 25% εκτός χρόνου τότε //μην ληφθεί ως έγκυρο χτύπημα. const int rejectValue = 25; //Αν ο μέσος όρος των χτυπημάτων //είναι 15% εκτός χρόνου τότε //δεν ανοίγουμε την κλειδαριά. const int averageRegectValue = 15; //Η καθυστέρηση σε milliseconds μέχρι //το Piezo να ακούσει το επόμενο χτύπημα. const int knockFadeTime = 150; //Ο χρόνος σε milliseconds που θα //τίθεται το μοτέρ σε λειτουργία. const int lockTurnTime = 650; //Ο μέγιστος αριθμός χτύπων που μπορεί //να περιέχει ένα έγκυρο μοτίβο χτυπημάτων. const int maxKnocks = 20; //Ο μέγιστος χρόνος σε milliseconds //πριν το Piezo σταματήσει να ακούει //για νέα χτυπήματα. const int knockComplete = 1200; //Αρχικοποίηση και ορισμός του πίνακα //που θα χρησιμοποιηθεί για την αποθήκευση //του μυστικού χτυπήματος αναφοράς. int secretCode[maxKnocks] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //Αρχικοποίηση και ορισμός του πίνακα //που θα χρησιμοποιηθεί για την αποθήκευση //του τρέχοντος μοτίβου χτυπημάτων . int knockReadings[maxKnocks]; //Η τελευταία τιμή που λήφθηκε από //τον αισθητήρα Piezo. int piezoValue = 0; //Μεταβλητή για τον έλεγχο του πατήματος //του διακόπτη και την έναρξη της ακολουθίας //για καινούριο μυστικό κωδικό. bool newSecretCode = false;
Το κυρίως κομμάτι του κώδικα.
Το παρακάτω κομμάτι κώδικα είναι το κομμάτι αυτό που θα εκτελείται από το Arduino Board κατά την εκκίνηση του και όσο παραμένει ανοιχτό.
void setup() { //Αρχικοποίηση των πυλών ως εισόδους και εξόδους. pinMode(motor, OUTPUT); pinMode(redLed, OUTPUT); pinMode(greenLed, OUTPUT); pinMode(programSwitch, INPUT); //Έναρξη καινούριας σειριακής επικοινωνίας // στα 9600 bbps. Serial.begin(9600); //Τύπωσε στην σειριακή οθόνη Serial.println("Program Start."); //Άναψε το πράσινο LED. digitalWrite(greenLed, HIGH); } void loop() { //Διάβασε από τον αισθητήρα Piezo και καταχώρισε την τιμή // στην παρακάτω μεταβλητή. piezoValue = analogRead(piezo); //Αν πατηθεί ο διακόπτης if (digitalRead(programSwitch)==HIGH){ //άλλαξε το περιεχόμενο της παρακάτω μεταβλητής. newSecretCode = true; //Άναψε το κόκκινο LED. digitalWrite(redLed, HIGH); } else{ //Σβήσε το κόκκινο LED. digitalWrite(redLed, LOW); } // Αν η τιμή που λήφθηκε από το Piezo // είναι μεγαλύτερη η ίση από το όριο // που έχουμε θέσει τότε εκτέλεσε τα παρακάτω. if(piezoValue >= threshold){ listenToSecretKnock(); } }
Η συνέχεια της επεξήγησης του κώδικα στο επόμενο Αρθρο.