Skip navigation

Εξοικείωση με την λειτουργία του

H Δομή του sketch

Ένα τυπικό πρόγραμμα Arduino έχει την παρακάτω δομή:

Στην αρχή του προγράμματος δηλώνουμε τα ονόματα και τους τύπους των μεταβλητών:

  • boolean (λογική δυαδική τιμή)
  • char (προσημασμένος χαρακτήρας 8 ψηφίων)
  • unsigned char (μη προσημασμένος χαρακτήρας 8 ψηφίων)
  • byte (μη προσημασμένος χαρακτήρας 8 ψηφίων)
  • int (προσημασμένος ακέραιος αριθμός 16 ψηφίων)
  • unsigned int (μη προσημασμένος ακέραιος αριθμός 16 ψηφίων)
  • word (μη προσημασμένος ακέραιος αριθμός 16 ψηφίων)
  • long (προσημασμένος ακέραιος αριθμός 32 ψηφίων)
  • unsigned long (μη προσημασμένος ακέραιος αριθμός 32 ψηφίων)
  • float, double (αριθμός κινητής υποδιαστολής απλής ακρίβειας)
  • String (αντικείμενο αλφαριθμητικού με χρήσιμες μεθόδους). Ως αλφαριθμητικό μπορεί να θεωρηθεί και ο πίνακας χαρακτήρων.

Υπάρχουν δυο ειδικές συναρτήσεις που είναι μέρος του κάθε sketch του Arduino οι οποίες είναι η setup() και η loop(). Και οι δυο συναρτήσεις πρέπει να περιλαμβάνονται στο sketch, ακόμα και αν δεν περιέχουν κάτι και να είναι κενές.

Η setup() καλείται μια φορά, όταν το sketch ξεκινά ή όποτε κάνει επαναφορά (reset) η πλατφόρμα Arduino. Σε αυτήν γίνονται οι αρχικοποιήσεις των μεταβλητών, η ρύθμιση της κατάστασης των ακίδων (pins) με τη συνάρτηση pinMode() και η προετοιμασία των βιβλιοθηκών. Με την pinMode(pin, mode), οι ακίδες (pins) μπορούν να ρυθμιστούν είτε ως είσοδοι (mode=INPUT), είτε ως έξοδοι (mode=OUTPUT), όμως από προεπιλογή είναι ρυθμισμένες ως είσοδοι.

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

Βασικές συναρτήσεις και εντολές

Οι βασικότερες συναρτήσεις ψηφιακής εισόδου και εξόδου είναι η digitalWrite(pin, STATE) και η digitalRead(pin, STATE), όπου στη θέση του pin δηλώνουμε τον αριθμό ή το όνομα της ακίδας, ενώ στη θέση του STATE δηλώνουμε την κατάσταση HIGH ή LOW.

Η digitalWrite() γράφει μια υψηλή (HIGH) ή μια χαμηλή (LOW) τιμή σε μια ψηφιακή ακίδα (pin). Αν το pin έχει ρυθμιστεί ως έξοδος με την συνάρτηση pinMode(pin, OUTPUT), τότε η digitalWrite(pin, HIGH) θα καθορίσει την τάση του pin στα 5V, ενώ η digitalWrite(pin, LOW) θα καθορίσει την τάση του pin στα 0V. Αν η ακίδα έχει ρυθμιστεί ως είσοδος με την συνάρτηση pinMode(pin, INPUT), τότε η digitalWrite(pin, HIGH) θα ενεργοποιήσει την εσωτερική pullup-αντίσταση 20ΚΩ του συγκεκριμένου pin, ενώ η digitalWrite(pin, LOW) θα την απενεργοποιήσει.

Η συνάρτηση digitalRead(pin) διαβάζει την τιμή από ένα συγκεκριμένο pin και επιστρέφει την τιμή της κατάστασής του, δηλαδή HIGH ή LOW.

Βασική συνάρτηση είναι και η συνάρτηση χρόνου delay(x), με την οποία δημιουργείται μια παύση της τάξης των x msec, π.χ. βάζοντας delay(100) στο τέλος της loop, θα υπάρχει μια χρονική καθυστέρηση 100msec πριν ξεκινήσει να εκτελείται η loop() ξανά από την αρχή.

Η if(συνθήκη) {κώδικας1} else {κώδικας2} είναι μια δομή ελέγχου πολλαπλών συνθηκών, όπου όταν ισχύει η συνθήκη εκτελείται ο κώδικας1, ενώ όταν δεν ισχύει η συνθήκη εκτελείται ο κώδικας2. Για τον έλεγχο της συνθήκης χρησιμοποιούμε τους εξής τελεστές σύγκρισης: == (ισότητα), != (ανισότητα), < (μικρότερο), > (μεγαλύτερο), <= (μικρότερο ή ίσο), >= (μεγαλύτερο ή ίσο).

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

Παράδειγμα 'LED Blink'





Εφαρμογή 1

Συνδέστε ένα LED σε σειρά με μια αντίσταση 220Ω στο Pin 13 της πλακέτας Arduino (όπως φαίνεται στην παρακάτω εικόνα) και σχεδιάστε το αντίστοιχο ηλεκτρονικό κύκλωμα.

Προγραμματίστε τον Arduino με τον εξής κώδικα:

Κάντε κλικ στο κουμπί "Upload to Arduino" για να φορτώσετε το πρόγραμμα στον μικροελεγκτή Arduino.

Όταν ενεργοποιηθεί ο μικροελεγκτής Arduino, θα καλέσει την συνάρτηση setup μια φορά και στη συνέχεια την συνάρτηση loop. Η loop είναι μια συνάρτηση την οποία εκτελεί ο μικροελεγκτής Arduino συνεχώς. Μόλις ολοκληρωθεί η εκτέλεση των εντολών της loop, ο μικροελεγκτής θα ξανακαλέσει την συνάρτηση loop. Αυτό θα γίνεται συνεχώς, όσο έχει ρεύμα ο μικροελεγκτής ή μέχρι να πατηθεί το πλήκτρο reset. Αν πατήσουμε το πλήκτρο reset του μικροελεγκτή, τότε θα τρέξει η συνάρτηση setup μια φορά και μετά θα εκτελείται η loop συνεχώς.

Ερώτηση: Τι παρατηρείτε ότι συμβαίνει στο LED, μόλις ενεργοποιήσουμε τον Arduino;

Επέκταση της εργαστηριακής εφαρμογής

  1. Μετακινήστε τις εντολές από την περιοχή loop στην περιοχή setup και φορτώστε το πρόγραμμα στο Arduino. Τι παρατηρείτε;
  2. Προσπαθήστε να προσθέσετε άλλο ένα LED στο παραπάνω κύκλωμα και να το κάνετε να αναβοσβήνει ανά ένα δευτερόλεπτο. Χρησιμοποιήστε την θύρα 12 του Arduino.
  3. Τροποποιήστε το πρόγραμμα της προηγούμενης δραστηριότητας ώστε τα LED να αναβοσβήνουν ανά 5 δευτερόλεπτα.

Εφαρμογή 2

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

Προγραμματίστε τον Arduino με το παρακάτω πρόγραμμα.

Η πλακέτα του Arduino έχει πάνω της ένα smd LED συνδεδεμένο στο Pin 13. 

Ερώτηση: Τι συμβαίνει στο LED, όταν πατάτε το μπουτόν του κυκλώματος;

Επέκταση της εργαστηριακής εφαρμογής

Να συνδέσετε ένα led σε σειρά με μια αντίσταση 220Ω στο pin 3 και άλλο ένα led σε σειρά με μια αντίσταση 220Ω στο pin 4.

Να αλλάξετε το πρόγραμμα στον Arduino, έτσι ώστε τα led συνεχώς να αναβοσβήνουν διαδοχικά (όταν ανάβει το ένα, να σβήνει το άλλο).


(c) Αμπατζόγλου Γιάννης, Ηλεκτρονικός Μηχανικός, καθηγητής ΠΕ84

Αδειοδοτημένο υπό τους όρους Creative Commons Attribution Share Alike License 4.0