/* ΓΕΝΙΚΕΣ ΟΔΗΓΙΕΣ Ο κώδικας δεν είναι πλήρης :) Υπάρχουν κενά τα οποία συμπληρώνετε με κριτήριο το τι θέλετε να κάνει η ΔΙΚΗ ΣΑΣ εφαρμογή. Διαβάζετε τις οδηγίες που υπάρχουν μέσα στον κώδικα, κάνουν καλό :) */ // Ο αισθητήρας κλίσης είναι λίγο παράξενος :) // Κανονικά θα αρκούσε ένας κώδικας του τύπου "Διάβασε τιμή αισθητήρα, // αν είναι high τότε υπάρχει κινηση, αν είναι low τότε δεν υπάρχει κίνηση." // Κάτι δηλ. πολύ παρόμοιο με ένα ψηφιακό button - Δείτε τον αντίστοιχο κώδικα. // Ωστόσο, λόγω του φαινομένου "bounce-αναπήδησης" ο αισθητήρας δεν είναι τόσο αξιόπιστος. // Άρα δείτε τον κώδικα που υπάρχει πιο κάτω και τις εξηγήσεις που δίνονται. // Και θα πρότεινα να τον δοκιμάσετε. // Αν σας φαίνεται τρομερά πολύπλοκο, τότε να χρησιμποιήσετε την λογική του button, // αποδεχόμενοι το γεγονός ότι ο σένσορας δεν θα λειτουργεί και τόοοοοσο καλά. // Θα χρησιμοποιηθεί το led 13 για τη δοκιμή int ledPin = 13; // Ο tilt sensor συνδέεται σε ψηφιακό pin int tiltPin = 8; int tiltValue; // the current reading from the input pin int prevTiltValue = LOW; // the previous reading from the input pin long timer = 0; // the last time the output pin was toggled long debounce = 50; // the debounce time, increase if the output flickers void setup() { // To tilt pin θα λειτουργήσει ως είσοδος pinMode(tiltPin, INPUT); digitalWrite(tiltPin, HIGH); // turn on the built in pull-up resistor // Το led pin θα λειτουγήσει ως έξοδος pinMode(ledPin, OUTPUT); // Έναρξη σειριακής επικοινωνίας με το PC για να μπορούμε να // βλέπουμε τιμές αισθητήρων, αλλά και να δίνουμε τιμές από το πληκτρολόγιο. // Μπορεί και να μην χρειαστεί, αλλά ας το έχουμε ως ρύθμιση. Serial.begin(9600); } void loop() { tiltValue = digitalRead(tiltPin); // Αν η κατάσταση του tilt sensor άλλαξε (δηλ. η κλίση) τότε αρχίζουμε // να μετράμε τον χρόνο, δηλ. στη μεταβλητή timer αποθηκεύουμε τη // συγκεκριμένη χρονική στιγμή όπου καταλάβαμε ότι άλλαξε η κατάσταση του tilt if (tiltValue != prevTiltValue) { // reset the debouncing timer timer = millis(); } // Αν η διαφορά της τωρινής χρονικής στιγμής (που μας δίνει η εντολή millis()) // από τη χρονική στιγμή που άλλαξε η κατάσταση του tilt (την οποία έχουμε φυλάξε // στη μεταβλητή timer), είναι μεγαλύτερη από το debounce διάστημα (το οποίο αρχικά // έχουμε ορίσει να ειναι 50 ms), τότε μπορούμε να υποθέσουμε ότι όντως η κλίση του // tilt sensor άλλαξε. if ((millis() - timer) > debounce) { // Ανάλογα με την τιμή της μεταβλητής tiltValue, ανάβουμε ή σβήνουμε // το led 13. if (tiltValue == HIGH) { digitalWrite(ledPin, LOW); Serial.println("tilt low"); } else { digitalWrite(ledPin, HIGH); Serial.println("tilt high"); } } // H τωρινή τιμή του tilt sensor φυλάσσεται στη μεταβλητή prevTitlValue // διότι για την επόμενη χρονική στιγμή (που θα τρέξει ξανά ο κώδικας της loop) // θα διαβάσουμε την νεα κατάσταση του tilt sensor. Άρα, η τωρινή τιμή θα δείχνει // την προηγούμενη κατάσταση του σένσορα. prevTiltValue = tiltValue; } // Για τον tilt sensor // https://learn.adafruit.com/tilt-sensor/using-a-tilt-sensor // Το ένα pin του tilt sensor το συνδέουμε στο ground και το άλλο στο pin 2. // To pin που συνδέεται στο pin 2, συνδέεται επίσης μέσω αντίστασης 10K στα 5 Volt.