Σωστή σύνδεση κουμπιών Arduino. Σύνδεση κουμπιού στο Arduino

ΚΑΙ Arduinoεδώ δεν αποτελεί εξαίρεση, αφού η λυχνία LED αναβοσβήνει, προσπαθεί να συνδέσει το κουμπί και να το χρησιμοποιήσει για να ελέγξει το αναβοσβήσιμο αυτού του LED. Δεν υπάρχει τίποτα ιδιαίτερα περίπλοκο εδώ, αλλά υπάρχει μια απόχρωση που ονομάζεται "αναπήδηση επαφής". Πώς να συνδέσετε σωστά ένα κουμπί ArduinoΤι είναι η «αναπήδηση επαφής», πώς εκδηλώνεται αυτό το αποτέλεσμα και οι μέθοδοι καταπολέμησής του θα συζητηθούν σήμερα.

Το απλούστερο διάγραμμα για τη σύνδεση ενός κουμπιού σε έναν μικροελεγκτή μοιάζει με αυτό:

Αν το κλειδί S 1είναι ανοιχτό (το κουμπί απελευθερώνεται), μετά στην ψηφιακή είσοδο Δ σεμικροελεγκτή θα έχουμε τάση 5V, που αντιστοιχεί σε λογική. Όταν πατηθεί το κουμπί, εισάγετε Δ σεσυνδέεται με τη γείωση, η οποία αντιστοιχεί στο λογικό μηδενικό επίπεδο και όλη η τάση θα πέσει στην αντίσταση R 1, η τιμή του οποίου επιλέγεται με βάση το γεγονός ότι όταν πατηθεί το κουμπί, δεν ρέει πάρα πολύ μέσα από αυτό. υψηλό ρεύμα(συνήθως περίπου 10÷100 kOhm).

Εάν απλώς συνδέσετε ένα κουμπί μεταξύ της ψηφιακής εισόδου και της γείωσης (χωρίς αντίσταση R 1, συνδεδεμένο σε +5V) ή μεταξύ της εισόδου και των +5V, στη συνέχεια στη θέση όταν δεν πατηθεί το κουμπί, θα υπάρχει μια απροσδιόριστη τάση στην ψηφιακή είσοδο του μικροελεγκτή (μπορεί να αντιστοιχεί στο επίπεδο 0 ή ίσως 1) και θα διαβάζαμε τυχαίες καταστάσεις. Επομένως χρησιμοποιείται αντίσταση R 1, το οποίο λέγεται ότι «ανεβάζει» την είσοδο στα +5V όταν απελευθερωθεί το κουμπί.

Διαβάζοντας το κράτος ψηφιακή είσοδομικροελεγκτή, θα μπορούμε να προσδιορίσουμε εάν το κουμπί είναι πατημένο (λογική κατάσταση 0) ή όχι (θα λάβουμε ένα λογικό στην είσοδο).

Σύνδεση κουμπιού σε Arduino

Μικροελεγκτές Atmel AVR ATmega (με βάση την οποία κατασκευάζεται Arduino) έχουν ενσωματωμένες αντιστάσεις φορτίου συνδεδεμένες με λογισμικό R n 20 kOhm και μπορούμε να τα χρησιμοποιήσουμε απλοποιώντας το διάγραμμα σύνδεσης.


Η εσωτερική αντίσταση φορτίου συνδέεται γράφοντας μια λογική στο απαιτούμενο bit της θύρας.

Παράδειγμα σκίτσου Arduino, το οποίο ανάβει και σβήνει το ενσωματωμένο LED στον ακροδέκτη 13, ανάλογα με το αν πατηθεί ή απελευθερωθεί το κουμπί που είναι συνδεδεμένο στη δεύτερη ακίδα, χρησιμοποιώντας μια εσωτερική αντίσταση φορτίου:

void setup() ( pinMode(13, OUTPUT); //LED στον ακροδέκτη 13 pinMode(2, INPUT); //2 pin είναι σε λειτουργία εισόδου. Το κουμπί είναι συνδεδεμένο στη γείωση. digitalWrite(2, HIGH); // συνδέστε την αντίσταση έλξης ) void loop() ( digitalWrite(13, !digitalRead(2)); // διαβάστε την κατάσταση του κουμπιού και αλλάξτε το LED )

Εδώ αντιστρέφουμε την τιμή που διαβάζεται από τη θύρα εισόδου χρησιμοποιώντας ένα Boolean ΔΕΝ, συμβολίζεται θαυμαστικόπριν από τη λειτουργία digitalRead, αφού όταν πατηθεί το κουμπί διαβάζουμε 0, και για να ανάψουμε το LED στη θύρα πρέπει να στείλουμε το 1.

Αναπήδηση επαφής

Όλα θα ήταν καλά αν ζούσαμε σε έναν ιδανικό κόσμο με τέλεια κουμπιά. Οι πραγματικές μηχανικές επαφές που υπάρχουν στα κουμπιά δεν κλείνουν ούτε ανοίγουν ποτέ αμέσως. Σε σύντομο χρονικό διάστημα, οι επαφές του κλειδιού (κουμπιού) κλείνουν και ανοίγουν επανειλημμένα, με αποτέλεσμα να μην λαμβάνεται ούτε μια πτώση τάσης, αλλά ένα ολόκληρο πακέτο παλμών στην είσοδο του μικροελεγκτή. Αυτό το φαινόμενο ονομάζεται «αναπήδηση επαφής».

Στο παραπάνω παράδειγμα, όταν απλά ανάβαμε και σβήναμε τη λυχνία LED χρησιμοποιώντας ένα κουμπί, δεν το παρατηρήσαμε, καθώς η ενεργοποίηση/απενεργοποίηση της λυχνίας LED τη στιγμή της «αναπήδησης» έγινε πολύ γρήγορα και απλά δεν το είδαμε με μάτια.

Αυτή η βιβλιοθήκη περιλαμβάνει τις ακόλουθες μεθόδους:

  • πήδημα()— προετοιμασία του αντικειμένου Bounce
  • κενό διάστημα (μη υπογεγραμμένο μεγάλο διάστημα)— ορίζει τον χρόνο κατά της αναπήδησης σε χιλιοστά του δευτερολέπτου
  • κενή προσάρτηση (int pin)— ορίζει την ακίδα στην οποία είναι συνδεδεμένο το κουμπί και συνδέει την ενσωματωμένη αντίσταση έλξης σε αυτήν την ακίδα
  • int update()- επειδή η Πήδημαδεν χρησιμοποιεί , "ενημερώνετε" το αντικείμενο πριν διαβάσετε την κατάστασή του και αυτό πρέπει να γίνεται συνεχώς (για παράδειγμα, μέσα βρόχος). Μέθοδος εκσυγχρονίζω ενημερώνει το αντικείμενο και επιστρέφει ΑΛΗΘΗΣ(1), εάν η κατάσταση της ακίδας έχει αλλάξει (το κουμπί πατήθηκε ή, αντίθετα, απελευθερώθηκε) και ΨΕΥΔΗΣ(0) διαφορετικά. Κλήση μεθόδου εκσυγχρονίζω μέσα βρόχοςχρειάζεται να γίνει μόνο μία φορά.
  • int read()— επιστρέφει την ενημερωμένη κατάσταση του pin

Από προεπιλογή, η βιβλιοθήκη Bounce χρησιμοποιεί ένα διάστημα σταθεροποίησης ( σταθερό διάστημα) για την εφαρμογή anti-bounce. Αυτό είναι πιο κατανοητό και εξαλείφει την ανάγκη να γνωρίζουμε τη διάρκεια της φλυαρίας.


Παράμετρος σταθερό διάστημαΒιβλιοθήκες αναπήδησης

Έχοντας αποφασίσει

#define BOUNCE_LOCK-OUT

#define BOUNCE_LOCK-OUT

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


Ακολουθεί ένα παράδειγμα χρήσης αυτής της βιβλιοθήκης:

#περιλαμβάνω Bounce bouncer = Bounce(); //δημιουργία μιας παρουσίας της κλάσης Bounce void setup() ( pinMode(2 ,INPUT); // κουμπί στην ακίδα 2 digitalWrite(2,HIGH); // συνδέστε τον ενσωματωμένο pull-up resistor bouncer .attach(2 ); update()) ( // εάν προκύψει ένα συμβάν εάν (bouncer.read()==0) ( //αν πατηθεί το κουμπί Serial.println("πατήθηκε"); //εμφανίζει ένα μήνυμα σχετικά με το πάτημα ) αλλιώς Serial. println("κυκλοφόρησε")

#περιλαμβάνω

Bounce bouncer = Αναπήδηση () ; //δημιουργία μιας παρουσίας της κλάσης Bounce

void setup()

pinMode(2, INPUT); Κουμπί // στην καρφίτσα 2

digitalWrite(2, HIGH); // συνδέστε την ενσωματωμένη αντίσταση έλξης

ευταξίας ποτοπολείου. επισυνάψω(2); // ορίστε το κουμπί

ευταξίας ποτοπολείου. διάστημα(5); // ορίστε το σταθερό διάστημα της παραμέτρου = 5 ms

Κατα συρροη. start(9600); //ρυθμίστε τη σειριακή θύρα στα 9600 bps

void loop()

if (bouncer . update () )

{ //αν συνέβη ένα συμβάν

αν (αναπηδητής . ανάγνωση () == 0 )

Θα χρειαστείτε

  • Arduino;
  • κουμπί τακτ.
  • αντίσταση 10 kOhm;
  • σανίδα ψωμιού?
  • καλώδια σύνδεσης.

1 Είδηκουμπιά

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

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

Τα κουμπιά χωρίζονται επίσης σε:

  • κανονικά ανοιχτό,
  • κανονικά κλειστό.
Οι πρώτοι, όταν πατηθούν, κλείνουν το κύκλωμα, οι δεύτεροι ανοίγουν το κύκλωμα.

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

2 Κουδούνισμαεπαφές

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



Στο επόμενο άρθρο θα εξετάσουμε λεπτομερώς τους τρόπους καταπολέμησης της «αναπήδησης» κατά το κλείσιμο και το άνοιγμα επαφών. Στο μεταξύ, ας δούμε τις επιλογές για τη σύνδεση του κουμπιού στο Arduino.

3 Λανθασμένη σύνδεσηκουμπιά

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



Για την αποφυγή παρεμβολών, ο ψηφιακός ακροδέκτης συνδέεται συνήθως μέσω μιας αρκετά μεγάλης αντίστασης (10 kOhm) είτε στη γείωση είτε στην τροφοδοσία. Στην πρώτη περίπτωση λέγεται "κύκλωμα με pull-up αντίσταση", στο δεύτερο - "κύκλωμα με συρόμενη αντίσταση". Ας δούμε το καθένα από αυτά.

4 Σύνδεση κουμπιούσύμφωνα με το κύκλωμα με μια αντίσταση έλξης

Πρώτα ας συνδεθούμε Κουμπί Arduinoσύμφωνα με το κύκλωμα με μια αντίσταση έλξης. Για να το κάνετε αυτό, συνδέστε τη μία επαφή του κουμπιού στη γείωση, τη δεύτερη στην ψηφιακή έξοδο "2". Η ψηφιακή έξοδος "2" θα συνδεθεί επίσης μέσω μιας αντίστασης 10 kOhm στην παροχή +5 V.



Ας γράψουμε ένα σκίτσο σαν αυτό για να επεξεργαστούμε τα κλικ κουμπιών και να το ανεβάσουμε στο Arduino.

// Ορίστε τους αριθμούς ακίδων: const int buttonPin = 2; const int ledPin = 13; void setup() ( pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() ( int buttonState = digitalRead(buttonPin); // διαβάστε την κατάσταση του κουμπιού εάν (buttonState == HIGH) ( digitalWrite(ledPin, HIGH); // ενεργοποιήστε το LED όταν πατήσετε το κουμπί) αλλιώς ( digitalWrite(ledPin, LOW); // απενεργοποιήστε το LED όταν απελευθερωθεί το κουμπί) }

Η ενσωματωμένη λυχνία LED στην ακίδα "13" είναι συνεχώς αναμμένη μέχρι να πατηθεί το κουμπί. Εκείνοι. Στη θύρα "2" του Arduino υπάρχει πάντα ένα υψηλό λογικό επίπεδο HIGH. Όταν πατάμε το κουμπί, η τάση στη θύρα «2» γίνεται ΧΑΜΗΛΗ και το LED σβήνει.

5 Σύνδεση κουμπιούσύμφωνα με το σχήμα με μια συρόμενη αντίσταση

Τώρα ας συναρμολογήσουμε ένα κύκλωμα με μια συρόμενη αντίσταση. Συνδέουμε τη μία επαφή του κουμπιού στο τροφοδοτικό +5 V, τη δεύτερη στην ψηφιακή έξοδο "2". Συνδέουμε την ψηφιακή έξοδο "2" μέσω μιας αντίστασης 10 kOhm στη γείωση. Δεν θα αλλάξουμε το σκίτσο.



Κατά την ενεργοποίηση του κυκλώματος στην ψηφιακή θύρα "2" του Arduino χαμηλό επίπεδο LOW και το LED δεν ανάβει. Όταν πατήσετε το κουμπί, η θύρα "2" λαμβάνει υψηλό επίπεδο HIGH και το LED ανάβει.

Σε αυτό το παράδειγμα θα εξετάσουμε τη σύνδεση ενός κουμπιού σε έναν ελεγκτή Arduino. Όταν πατήσετε το κουμπί, θα ανάψουμε το ενσωματωμένο LED. Η πλειοψηφία Πλακέτες Arduinoέχουν ενσωματωμένο SMT LED συνδεδεμένο στην έξοδο 13 (ακίδα 13).

Απαιτούμενα εξαρτήματα

  • Ελεγκτής Arduino
  • κουμπί τακτ
  • Αντίσταση 10 kOhm
  • καρφίτσα breadboard
  • καλώδια σύνδεσης

Σύνδεση

Συνδέουμε την έξοδο ισχύος (5V) και τη γείωση (Gnd), με κόκκινα και μαύρα καλώδια, αντίστοιχα, στο breadboard. Συνήθως, οι πίνακες ψωμιού χρησιμοποιούν τις εξωτερικές σειρές ακίδων για τροφοδοσία και γείωση, όπως φαίνεται στο σχήμα. Με το τρίτο μπλε καλώδιο συνδέουμε την ψηφιακή ακίδα 2 του ελεγκτή Arduino στην ακίδα του κουμπιού ρολογιού. Στην ίδια επαφή ή σε μια επαφή μόνιμα συνδεδεμένη με αυτήν σε σχέδιο 4 ακίδων, συνδέουμε μια αντίσταση έλξης 10 kOhm, η οποία με τη σειρά της συνδέεται με τη γείωση. Συνδέουμε την άλλη έξοδο του κουμπιού σε τροφοδοτικό 5 V.

Όταν το κουμπί του ρολογιού δεν είναι πατημένο, η έξοδος 2 συνδέεται μόνο στη γείωση μέσω μιας αντίστασης έλξης και αυτή η είσοδος θα δείχνει LOW. Και όταν πατηθεί το κουμπί, εμφανίζεται μια επαφή μεταξύ της εισόδου 2 και του τροφοδοτικού 5 V και θα διαβαστεί.

Σημείωση: Τις περισσότερες φορές, τα κουμπιά τακτ έχουν δύο επαφές σε κάθε πλευρά, όπως φαίνεται στο σχήμα σύνδεσης. Ταυτόχρονα, το κουμπί έχει σχεδόν τετράγωνο σχήμα. Είναι ΣΗΜΑΝΤΙΚΟ όταν συνδέετε ποιες επαφές είναι συνδεδεμένες και ποιες κλειστές όταν πιέζονται. Είναι καλύτερο να χτυπήσετε το κουμπί εάν δεν είστε σίγουροι.

Το πρώτο πρόγραμμα θα πρέπει να ελέγχει το LED χρησιμοποιώντας ένα κουμπί:

  • Όταν πατηθεί το κουμπί, το LED ανάβει.
  • Όταν πατηθεί το κουμπί, το LED δεν ανάβει.

Σύνδεση κουμπιού και LED στην πλακέτα Arduino.

Να επικοινωνήσετε εξωτερικά στοιχεία V Ελεγκτής ArduinoΤο UNO έχει 14 ψηφιακές ακίδες. Κάθε pin μπορεί να οριστεί από το πρόγραμμα ως είσοδος ή έξοδος.

Η ψηφιακή έξοδος έχει μόνο δύο καταστάσεις, υψηλή και χαμηλή. Η υψηλή κατάσταση αντιστοιχεί σε τάση εξόδου περίπου 5 V, η χαμηλή κατάσταση - 0 V. Η έξοδος επιτρέπει τη σύνδεση φορτίου με ρεύμα έως και 40 mA.

Μόλις ένας ακροδέκτης οριστεί ως είσοδος, διαβάζοντας την κατάστασή του, μπορεί να προσδιοριστεί το επίπεδο τάσης στην είσοδο. Σε τάση κοντά στα 5 V (στην πραγματικότητα πάνω από 3 V), θα διαβαστεί μια υψηλή κατάσταση, που αντιστοιχεί στη σταθερά HIGH. Όταν η τάση είναι κοντά στο 0 (λιγότερο από 1,5 V), θα διαβαστεί μια χαμηλή κατάσταση ή σταθερά LOW.

Πρέπει να συνδέσουμε το LED στον ακροδέκτη, ορίζοντας το ως έξοδο, και το κουμπί συνδέεται με τον ακροδέκτη με τη λειτουργία εισόδου.

Το LED συνδέεται μέσω μιας αντίστασης περιορισμού ρεύματος. Εδώ είναι ένα τυπικό διάγραμμα.

Η αντίσταση υπολογίζεται χρησιμοποιώντας τον τύπο I = Uoutput – Udrop στο LED / R.

Uoutput = 5 V, Udrop στο LED μπορεί να ληφθεί ίσο με 1,5 V (αναφέρεται με μεγαλύτερη ακρίβεια στο βιβλίο αναφοράς). Αποδεικνύεται ότι στο κύκλωμά μας το ρεύμα μέσω του LED έχει ρυθμιστεί στα 10 mA.

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

Συνδέουμε το κουμπί σε οποιαδήποτε άλλη ακίδα, για παράδειγμα, 12. Το υλικό του κυκλώματος σύνδεσης του κουμπιού πρέπει να παρέχει επίπεδα τάσης 0 V όταν πατάτε το κουμπί και 5 V όταν το κουμπί είναι ελεύθερο. Αυτό μπορεί να γίνει με ένα απλό διάγραμμα.



Όταν πατηθεί το κουμπί, η αντίσταση παράγει 5 V στην έξοδο και όταν πατηθεί, η είσοδος βραχυκυκλώνεται στη γείωση. Θα γράψω συστάσεις για την επιλογή αντίστασης στο τελευταίο μάθημα σχετικά με τα κουμπιά. Τώρα θα προσφέρω μια άλλη επιλογή. Όλες οι ακίδες της πλακέτας έχουν αντιστάσεις μέσα στον ελεγκτή συνδεδεμένες στα 5 V. Μπορούν να ενεργοποιηθούν ή να απενεργοποιηθούν από το λογισμικό από τις ακίδες. Η αντίσταση αυτών των αντιστάσεων είναι περίπου 20-50 kOhm. Πάρα πολύ για πραγματικά κυκλώματα, αλλά για το πρόγραμμά μας και ένα κουμπί που είναι εγκατεστημένο κοντά στον ελεγκτή, είναι αρκετά αποδεκτό.

Ως αποτέλεσμα, το διάγραμμα σύνδεσης θα μοιάζει με αυτό.



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


Λειτουργίες ελέγχου I/O.

Για εργασία με ψηφιακές εξόδους, το σύστημα Arduino διαθέτει 3 ενσωματωμένες λειτουργίες. Σας επιτρέπουν να ρυθμίσετε τη λειτουργία εξόδου, να διαβάσετε ή να ορίσετε την έξοδο σε μια συγκεκριμένη κατάσταση. Για τον προσδιορισμό της κατάστασης των ακίδων, αυτές οι συναρτήσεις χρησιμοποιούν τις σταθερές HIGH και LOW, οι οποίες αντιστοιχούν σε υψηλά και χαμηλά επίπεδα σήματος.

pinMode (pin, mode)

Ρυθμίζει τη λειτουργία εξόδου (είσοδος ή έξοδος).

Επιχειρήματα: pin και mode.

  • pin – αριθμός pin;
  • λειτουργία – λειτουργία εξόδου.

Η συνάρτηση δεν επιστρέφει τίποτα.

digitalWrite (καρφίτσα, τιμή)

Ρυθμίζει την κατάσταση εξόδου (υψηλή ή χαμηλή).

Καρφίτσα και τιμή επιχειρημάτων:

  • pin – αριθμός pin;
  • τιμή – κατάσταση εξόδου.

Η συνάρτηση δεν επιστρέφει τίποτα.

digitalRead (pin)

Διαβάζει την κατάσταση εισόδου.

Επιχειρήματα: pin - pin number.

Επιστρέφει την κατάσταση σύνδεσης:

digitalRead(pin) = LOW χαμηλό επίπεδο εισόδου
digitalRead(pin) = HIGH υψηλό επίπεδο εισόδου

Πρόγραμμα ελέγχου LED.

Λαμβάνοντας υπόψη το προηγούμενο μάθημα, τώρα τα έχουμε όλα απαραίτητες πληροφορίεςγια να γράψετε ένα πρόγραμμα. Το πρόγραμμα Arduino αποτελείται από δύο συναρτήσεις setup() και loop. Στη setup() ορίζουμε τις λειτουργίες pin και στο loop() διαβάζουμε την κατάσταση του κουμπιού στη μεταβλητή buttonState και την περνάμε στο LED. Στην πορεία αναποδογυρίζουμε, γιατί όταν πατηθεί το κουμπί, η κατάσταση του σήματος είναι χαμηλή και το LED ανάβει όταν είναι υψηλό.

/* Πρόγραμμα scetch_5_1 μάθημα 5
*/

Boolean buttonState; // δημιουργήστε μια καθολική μεταβλητή buttonState

void setup() (
pinMode(13, OUTPUT); //

}

// ατελείωτος κύκλος
void loop() (



}

Για αποθήκευση ενδιάμεση τιμήκατάσταση του κουμπιού, δημιουργήστε μια μεταβλητή buttonState με τύπο boolean. Αυτό boolean τύπουδεδομένα. Η μεταβλητή μπορεί να λάβει μία από τις δύο τιμές: true ή false. Στην περίπτωσή μας, το LED ανάβει και δεν ανάβει.

Αντιγράψτε ή ξαναγράψτε τον κώδικα του προγράμματος στο παράθυρο Arduino IDE. Κάντε λήψη στον ελεγκτή και ελέγξτε.

Για να αποθηκεύσω έργα Arduino, δημιούργησα έναν φάκελο d:\Arduino Projects\Lessons\Lesson5. Σε κάθε μάθημα του προγράμματος ονομάζω scetch_5_1, scetch_5_2, ... Μπορείτε να κάνετε το ίδιο ή να εισάγετε το δικό σας σύστημα αποθήκευσης αρχείων.

Μπλοκ προγράμματος:

buttonState = digitalRead(12); // διαβάστε την κατάσταση της εισόδου 12 (κουμπί) και γράψτε στο buttonState
buttonState = ! κουμπίΚατάσταση; // αντιστροφή της μεταβλητής buttonState
digitalWrite(13, buttonState); // γράψτε την κατάσταση από το buttonState στην έξοδο 13 (LED)

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

digitalWrite(13, ! digitalRead(12));

Το όρισμα στη συνάρτηση digitalWrite() είναι η συνάρτηση digitalRead(). Ωραίο στυλαυτή είναι ακριβώς η επιλογή. Δεν απαιτούνται πρόσθετες μεταβλητές, λιγότερο κείμενο.

Εκείνοι. μια συνάρτηση μπορεί να χρησιμοποιηθεί ως όρισμα σε μια άλλη συνάρτηση. Οι συναρτήσεις μπορούν να κληθούν από συναρτήσεις.

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

/* Πρόγραμμα scetch_5_2 μάθημα 5
Ανάβει το LED (ακίδα 13) όταν πατηθεί το κουμπί (ακίδα 12). */

void setup() (
pinMode(13, OUTPUT); // ορίστε τον ακροδέκτη 13 (LED) ως έξοδο
pinMode(12, INPUT_PULLUP); // ορίστε την ακίδα 12 (κουμπί) ως είσοδο
}

// ατελείωτος κύκλος
void loop() (
if (digitalRead(12) == LOW) digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
}

ΣΕ ατέρμων βρόχοςΗ κατάσταση του ακροδέκτη 12 (κουμπί) ελέγχεται και εάν είναι χαμηλή (LOW), τότε σχηματίζεται υψηλή κατάσταση (HIGH) στον ακροδέκτη 13 (LED). Διαφορετικά, η κατάσταση LED είναι LOW.

#define directive.

Σε όλα τα παραδείγματα για συναρτήσεις I/O, καθορίσαμε το όρισμα pin, το οποίο καθορίζει τον αριθμό pin, στη μορφή συγκεκριμένο αριθμό- σταθερές. Θυμηθήκαμε ότι η σταθερά 12 είναι ο αριθμός pin του κουμπιού και το 13 είναι ο αριθμός pin του LED. Είναι πολύ πιο βολικό να δουλεύεις με συμβολικά ονόματα. Για το σκοπό αυτό, στη γλώσσα C υπάρχει μια οδηγία που συνδέει αναγνωριστικά με σταθερές και εκφράσεις.

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

ΣΕ γενική εικόναμοιάζει με αυτό:

#define name character_sequence

Αν στα προγράμματά μας γράψουμε:

#define LED_PIN 13 //

τότε κάθε φορά που εμφανίζεται το όνομα LED_PIN στο πρόγραμμα, τα σύμβολα 13 θα αντικατασταθούν κατά τη μετάφραση Η λειτουργία για την ενεργοποίηση του LED μοιάζει με αυτό:

digitalWrite(LED_PIN, HIGH);

Το τελικό πρόγραμμα χρησιμοποιώντας το #define.

/* Πρόγραμμα μαθήματος 5
Ανάβει το LED (ακίδα 13) όταν πατηθεί το κουμπί (ακίδα 12). */

#define LED_PIN 13 // Ο αριθμός pin LED είναι 13
#define BUTTON_PIN 12 // Ο αριθμός ακίδας του κουμπιού είναι 12

void setup() (
pinMode(LED_PIN, OUTPUT); // ορίστε τον ακροδέκτη 13 (LED) ως έξοδο
pinMode(BUTTON_PIN, INPUT_PULLUP); // ορίστε την ακίδα 12 (κουμπί) ως είσοδο
}

// ατελείωτος κύκλος
void loop() (
digitalWrite(LED_PIN, ! digitalRead(BUTTON_PIN));
}

Σημειώστε ότι δεν υπάρχει ερωτηματικό μετά την οδηγία #define επειδή είναι ψευδοτελεστής. Δεν κάνει καμία ενέργεια. Η οδηγία καθορίζει σταθερές, γι' αυτό συνηθίζεται να γράφουμε ονόματα με κεφαλαία γράμματα με οριοθέτη - υπογράμμιση.

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



Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: