Έλεγχος LED με κουμπί πίεσης (pushbutton)

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

pinMode(n,OUTPUT): Μας επιτρέπει να διαμορφώσουμε ένα pin D0:D13 ως έξοδο.

Το n δηλώνει ποιο ψηφιακό pin θα χρησιμοποιήσουμε


digitalWrite(n,LOW): Στέλνει ένα λογικό επίπεδο "0" από 0 V μέσω του pin n που υποδεικνύεται.

digitalWrite(n,HIGH): Στέλνει ένα λογικό επίπεδο «1» από +5 volt μέσω του pin n που υποδεικνύεται


pinMode(n,INPUT): Μας επιτρέπει να ρυθμίσουμε οποιοδήποτε από τα pins D0:D13 ως εισόδους.

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


digitalRead(n): Διαβάζει το λογικό επίπεδο του pin n.

PULL-UP ΚΑΙ PULL-DOWN ΑΝΤΙΣΤΑΣΕΙΣ
Τα πιο βασικά και οικονομικά περιφερειακά εισόδου είναι τα απλά κουμπιά και οι διακόπτες. Θα τα συναντήσετε σε όλα τα μεγέθη και σχήματα . Κάποια είναι σχεδιασμένα για βιομηχανική  χρήση σε μηχανήματα, σε πίνακες ελέγχου κ.τ.λ Υπάρχουν άλλα που είναι πολύ πιο απλά και πιο οικονομικά. Χρησιμοποιούνται ευρέως στα
σπίτια, στην εκπαίδευση, για να κολλήσουν υλικά σε τυπωμένα κυκλώματα, σε μικροεφαρμογές κ.τ.λ.
Θα χρησιμοποιήσουμε ένα τέτοιο  μικρό κουμπί πίεσης
στο έργο που ακολουθεί
 

Σε κάθε περίπτωση, δεν έχει σημασία για ποιο λόγο χρησιμοποιούνται διότι ο τρόπος που
λειτουργούν είναι πολύ απλός. Όταν ενεργοποιούνται ένα μεταλλικό έλασμα ανοίγει και κλείνει μια
ηλεκτρική επαφή ανάμεσα σε δύο ή και περισσότερα pins μέσα στη συσκευή. Λέμε ότι ένας διακόπτης
ή ένας μεταγωγέας είναι "ενσωματωμένος". Όταν τον ενεργοποιούμε , ο διακόπτης μένει εκεί μέχρι να
τον μετακινήσουμε ξανά. Οι διακόπτες φωτισμού λειτουργούν έτσι αλλά τα κουμπιά πίεσης που θα
δούμε δεν λειτουργούν με αυτό τον τρόπο. Τα κουμπιά πίεσης ανοίγουν και κλείνουν ένα ή
περισσότερα κυκλώματα μόνο όταν είναι ενεργά. Έπειτα, όταν τα αφήσουμε επιστρέφουν στην αρχική
τους θέση, όπως για παράδειγμα το κουδούνι της πόρτας στα σπίτια. Μπορείτε να δείτε ένα
διάγραμμα ενός συρόμενου μεταγωγέα που αλλάζει θέση και ενός κουμπιού πίεσης παρακάτω
Μπορείτε επίσης να δείτε και τα αντίστοιχα ηλεκτρολογικά σύμβολα τους

Στο επόμενο σχήμα ένα κουμπί πίεσης έχει συνδεθεί στο D2 (pin 5) το οποίο έχει προφανώς ρυθμιστεί ως είσοδος.
 

Είναι ξεκάθαρο ότι κάθε φορά που πιέζουμε το κουμπί στο κύκλωμα στα αριστερά, το pin D2 συνδέεται με την GND (0 V) και επομένως είναι στο επίπεδο «0».

Το διάγραμμα στα δεξιά είναι ακριβώς το αντίθετο. Όταν πιέσουμε το κουμπί συνδέεται με τα +5 V και επομένως είναι στο επίπεδο «1».

Τι συμβαίνει όμως στα pins αν δεν πιέσουμε κανένα από τα κουμπιά στα δύο κυκλώματα ; Πιθανόν να λέγατε «το αντίθετο από αυτό που γίνεται όταν τα πιέζουμε».

Με άλλα λόγια, αν δεν πιέσουμε το κουμπί στο κύκλωμα στα αριστερά, το pin D2 παραμένει στο επίπεδο «1» και στο κύκλωμα στα δεξιά παραμένει στο επίπεδο «0». Λάθος!

Ας το δούμε πιο προσεκτικά. Αν δεν πιέσουμε το κουμπί σε κανένα από τα δύο κυκλώματα, ποια είναι η διαφορά όσον αναφορά το pin D2; Απολύτως καμία. Το D2 παραμένει αποσυνδεδεμένο και στις δυο περιπτώσεις. Λέμε ότι «επιπλέει». Τι συμβαίνει τελικά; Το επίπεδο «1» ή το επίπεδο «0»; Δεν υπάρχει σαφής απάντηση, κάποιες φορές επικρατεί το «1» και κάποιες φορές το «0». Είναι κατανοητό ότι δεν πρόκειται για ιδανική κατάσταση. Το καλύτερο που μπορεί να γίνει είναι να προσθέσουμε μια αντίσταση στο κύκλωμα. Αν είναι συνδεδεμένη στο θετικό άκρο +5V λέγεται αντίσταση «PULL-UP», ενώ αν είναι συνδεδεμένη στο GND ή 0V λέγεται αντίσταση «PULL-DOWN».

Δείτε τα παρακάτω κυκλώματα

Αυτό στα αριστερά, με την αντίσταση pull-up R1 κρατά το σήμα του D2 (pin 5) στο επίπεδο
«1» (+5 V) όταν το κουμπί SW1 δεν πιέζεται, ή με άλλα λόγια, είναι ανοικτό. Όταν το pin D2 πιέζεται,
πηγαίνει στο επίπεδο «0». Στο κύκλωμα στα δεξιά, η pull-down αντίσταση R2 κρατά το pin στο
επίπεδο «0» (GND) όταν το κουμπί SW2 δεν πιέζεται. Όταν το D2 pin πιέζεται τότε πηγαίνει στο
επίπεδο «1».
Εντάξει, αλλά τι τιμή βάζουμε στις αντιστάσεις; Δεν έχει τόσο σημασία. Θυμηθείτε ότι κάθε
φορά που πιέζετε το κουμπί, υπάρχει ροή ηλεκτρονίων ανάμεσα στην GND και το άκρο με τα +5 V, ή,
με άλλα λόγια, ρεύμα (Ι) διαρρέει το κύκλωμα. Πρέπει να προσπαθούμε να ελαχιστοποιούμε το ρεύμα
ή την κατανάλωση. Για παράδειγμα, αν βάλουμε αντίσταση 100Ω στην R1 ή στην R2, η κατανάλωση
θα είναι :

Αν διαλέξουμε αντίσταση 10ΚΩ, όπως και στο παράδειγμα, η κατανάλωση θα είναι :
 

Μπορεί να μπείτε στον πειρασμό να χρησιμοποιήσετε μια πολύ μεγάλη αντίσταση για να μειώσετε στο ελάχιστο την κατανάλωση. Αυτό
που θα συμβεί όμως διαλέγοντας μια υψηλή τιμή, είναι ότι το pin D2 θα απομονωθεί από το άκρο των +5V (στην περίπτωση της αντίστασης pull-up) ή από την GND (στην περίπτωση της αντίστασης pulldown) και δεν θα είναι σταθερό. Αν αυτό συμβεί είστε εκεί που ξεκινήσατε, επομένως είναι καλύτερα να μην χρησιμοποιούσατε αντίσταση καθόλου. Συνήθεις τιμές των αντιστάσεων κυμαίνονται μεταξύ 4700 Ω και 10 ΚΩ.
Για άλλη μια φορά θα πρέπει να πούμε ότι το ενεργό επίπεδο όταν πιέζουμε το κουμπί δεν θα πρέπει απαραίτητα να είναι «1», μπορεί να είναι «0». Εξαρτάται από το πως θα συνδέσετε το κουμπί πίεσης.



Πως μας βοηθά το Arduino; Μας παρέχει την αντίσταση pull-up και δεν χρειάζεται να την εγκαταστήσουμε εξωτερικά στα κυκλώματά μας. Στην παρακάτω εικόνα , η αντίσταση είναι
ενσωματωμένη στον ελεγκτή Arduino.
Μπορείτε να ρυθμίσετε αυτή την επιλογή με τη χρήση αυτής της συνάρτησης:

 

pinMode (n, INPUT_PULLUP): Όπου το n είναι το pin εισόδου
 

Μπορείτε να το κάνετε αυτό με οποιοδήποτε pin από τα D0:D13 που πρόκειται να
ρυθμιστούν ως είσοδοι. Δεν έχει νόημα να το κάνουμε αυτό για τις εξόδους και επίσης δεν έχετε τη
δυνατότητα να ρυθμίσετε μια είσοδο ως αντίσταση pull-down.
Ίσως να νομίζετε ότι δεν είναι σημαντικό να εξοικονομήσετε μια αντίσταση εισόδου μιας και
κοστίζουν μόλις μερικά cents. Αλλά σκεφτείτε το λίγο καλύτερα, αν το έργο σας σας χρειάζεται πολλές
pull-up αντιστάσεις όχι μόνο θα θέλατε να τις εξοικονομήσετε αλλά επίσης:
Θα εξοικονομήσετε χώρο αφού δεν θα χρειάζεται να της αποθηκεύετε κάπου.
Θα έχετε εξοικονόμηση στο μέγεθος των τυπωμένων πλακετών των κυκλωμάτων. Πωλούνται
με το τετραγωνικό εκατοστό και όσο περισσότερα συστατικά μέρη υπάρχουν τόσο μεγαλύτερη
είναι η πλακέτα και επομένως τόσο περισσότερα πληρώνετε.
Θα εξοικονομήσετε χρόνο στην σχεδίαση των κομματιών για την τυπωμένη πλακέτα του
κυκλώματος. Όσα περισσότερα υλικά χρησιμοποιείτε τόσο περισσότερο χρόνο θέλετε για την
σχεδίαση και όπως είναι γνωστό ο χρόνος είναι χρήμα.
Θα εξοικονομήσετε χρόνο για την συναρμολόγηση την πλακέτας του κυκλώματος. Όσο
περισσότερα υλικά χρησιμοποιείτε, τόσο περισσότερο χρόνο θα χρειαστείτε για την
συναρμολόγηση.
Αν πολλαπλασιάσετε όλα αυτά με τον αριθμό των πλακετών κυκλώματος ή των kits που
θέλετε να πουλήσετε η εξοικονόμηση θα μπορούσε να είναι δεκάδες η εκατοντάδες ευρώ.
Τώρα που ξέρετε πως να χρησιμοποιήσετε την συνάρτηση pull-up, κάντε το όποτε θεωρείτε
ότι είναι απαραίτητο

 

Στο έργο που ακολουθεί χρησιμοποιούμε ένα εξωτερικό pull down αντιστάτη 10 ΚΩ

 

Ο κώδικας

const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 4; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}