You are on page 1of 30

 

 
Εισαγωγή(στην(Μηχατρονική(−(Τ.Ε.Ι.(Κρήτης(−(Τμήμα(Μηχανολογίας(( Δρ.(Φασουλάς(Γιάννης(

Τεχνολογικό+Eκπαιδευτικό+Ίδρυμα+Kρήτης+
TMHMA+MHXANOΛOΓIAΣ+
(
+
+
Εισαγωγή+στην+Μηχατρονική++
+
Εισαγωγή+στους+μικροελεγκτές++
και+στη+υπολογιστική+πλατφόρμα+ARDUINO+
+
+
+
+
Δρ.+Φασουλάς+Γιάννης+
jfasoulas@staff.teicrete.gr(
(
 
(
 
(
(
(

 
Η  υπολογιστική  πλατφόρμα  Arduino  ...........................................................................  3  
Μικροελεγκτής  –  η  καρδιά  του  Arduino  .......................................................................  3  
Διαφορές  στις  προτεινόμενες  εκδόσεις  του  Arduino  ...................................................  4  
Είσοδοι  –  Έξοδοι  ..........................................................................................................  5  
Τροφοδοσία  ................................................................................................................  7  
Ενσωματωμένα  κουμπιά  και  LED  .................................................................................  8  
Arduino  IDE  (Integrated  Design  Environment)  και  σύνδεση  με  τον  υπολογιστή  ...........  9  
Η  Γλώσσα  προγραμματισμού  ....................................................................................  11  
Το  παράδειγμα  Hello  World!  .....................................................................................  13  
Πλακέτες  επέκτασης  (Arduino-­‐Shield)  ........................................................................  16  

  2  
 

Η  υπολογιστική  πλατφόρμα  Arduino  


Η   υπολογιστική   πλατφόρμα   Arduino   είναι   μια   «ανοικτού   κώδικα»   πλατφόρμα   «πρωτοτυποποίησης»  
ηλεκτρονικών  βασισμένη  σε  ευέλικτο  και  εύκολο  στη  χρήση  hardware  και  software  που  προορίζεται  για  
οποιονδήποτε  έχει  μικρή  εμπειρία  στον  προγραμματισμό  και  στους  μικροελεγκτές.    

 
 
Πρόκειται   για   ένα   ηλεκτρονικό   κύκλωμα   που   βασίζεται   στον   μικροελεγκτή   ATmega   της   Atmel   και   του  
οποίου   όλα   τα   σχέδια,   καθώς   και   το   software   που   χρειάζεται   για   την   λειτουργία   του,   διανέμονται  
ελεύθερα  και  δωρεάν  ώστε  να  μπορεί  να  κατασκευαστεί  από  τον  καθένα.  Αφού  κατασκευαστεί,  μπορεί  
να  συμπεριφερθεί  σαν  ένας  μικροσκοπικός  υπολογιστής,  αφού  ο  χρήστης  μπορεί  να  συνδέσει  επάνω  του  
πολλαπλές   μονάδες   εισόδου/εξόδου   και   να   προγραμματίσει   τον   μικροελεγκτή   να   δέχεται   δεδομένα   από  
τις  μονάδες  εισόδου,  να  τα  επεξεργάζεται  και  να  στέλνει  κατάλληλες  εντολές  στις  μονάδες  εξόδου.      

Μικροελεγκτής  –  η  καρδιά  του  Arduino  


Το  Arduino  βασίζεται  στον  ATmega328,  έναν  8-­‐bit  RISC  μικροελεγκτή,  τον  οποίο  χρονίζει  στα  16MHz.  Ο  
ATmega328  διαθέτει  ενσωματωμένη  μνήμη  τριών  τύπων:  

• 2Kb   μνήμης   SRAM  που  είναι  η  ωφέλιμη  μνήμη  που  μπορούν  να  χρησιμοποιήσουν  τα  προγράμματά  
σας   για   να   αποθηκεύουν   μεταβλητές,   πίνακες   κ.λπ.   κατά   το   runtime.   Όπως   και   σε   έναν  
υπολογιστή,   αυτή   η   μνήμη   χάνει   τα   δεδομένα   της   όταν   η   παροχή   ρεύματος   στο   Arduino  
σταματήσει  ή  αν  γίνει  reset.  
• 1Kb   μνήμης   EEPROM  η  οποία  μπορεί  να  χρησιμοποιηθεί  για  «ωμή»  εγγραφή/ανάγνωση  δεδομένων  
(χωρίς  datatype)  ανά  byte  από  τα  προγράμματά  σας  κατά  το  runtime.  Σε  αντίθεση  με  την  SRAM,  

  3  
η   EEPROM   δεν   χάνει   τα   περιεχόμενά   της   με   απώλεια   τροφοδοσίας   ή   reset   οπότε   είναι   το  
ανάλογο  του  σκληρού  δίσκου.  
• 32Kb   μνήμης   Flash,   από   τα   οποία   τα   2Kb   χρησιμοποιούνται   από   το   firmware   του   Arduino     που   έχει  
εγκαταστήσει   ήδη   ο   κατασκευαστής   του.   Το   firmware   αυτό   που   στην   ορολογία   του   Arduino  
ονομάζεται   bootloader   είναι   αναγκαίο   για   την   εγκατάσταση   των   δικών   σας   προγραμμάτων   στον  
μικροελεγκτή   μέσω   της   θύρας   USB,   χωρίς   δηλαδή   να   χρειάζεται   εξωτερικός   hardware  
programmer.  Τα  υπόλοιπα  30Kb  της  μνήμης  Flash  χρησιμοποιούνται  για  την  αποθήκευση  αυτών  
ακριβώς   των   προγραμμάτων,   αφού   πρώτα   μεταγλωττιστούν   στον   υπολογιστή   σας.   Η   μνήμη  
Flash,   όπως   και   η   EEPROM   δεν   χάνει   τα   περιεχόμενά   της   με   απώλεια   τροφοδοσίας   ή   reset.  
Επίσης,   ενώ   η   μνήμη   Flash   υπό   κανονικές   συνθήκες   δεν   προορίζεται   για   χρήση   runtime   μέσα  
από  τα  προγράμματά  σας,  λόγω  της  μικρής  συνολικής  μνήμης  που  είναι  διαθέσιμη  σε  αυτά  (2Kb  
SRAM   +   1Kb   EEPROM),   έχει   σχεδιαστεί   μια   βιβλιοθήκη   που   επιτρέπει   την   χρήση   όσου   χώρου  
περισσεύει  (30Kb  μείον  το  μέγεθος  του  προγράμματός  σας  σε  μεταγλωττισμένη  μορφή).  
 

Διαφορές  στις  προτεινόμενες  εκδόσεις  του  Arduino  


 
Το  Arduino  Diecimila,  UNO  έχει  ουσιαστικά  δύο  βασικές  διαφορές  με  το  Duemilanove:  
• Βασίζεται   στον   μικροελεγκτή   ATmega168,   ο   οποίος   διαθέτει   ακριβώς   την   μισή   μνήμη   από   τον  
ATmega328,   δηλαδή   1Kb   SRAM,   512bytes   EEPROM   και   16Kb   Flash   (14   ελεύθερα   λόγω   του  
bootloader).  
• Δεν  επιλέγει  αυτόματα  μεταξύ  της  εξωτερικής  τροφοδοσίας  και  της  τροφοδοσίας  μέσω  της  θύρας  USB.  
Το   Diecimila   διαθέτει   ειδικό   jumper   με   το   οποίο   μπορείτε   να   επιλέξετε   χειροκίνητα   την   πηγή  
τροφοδοσίας.  
Το   Arduino   Mega   είναι   η   πιο   εξελιγμένη   έκδοση   με   τον   μικροελεγκτή   ATmega1280   και   αρκετά  
μεγαλύτερο  μέγεθος.  Οι  διαφορές  του  από  το  Duemilanove  είναι:  
• Τετραπλάσια  μνήμη  (8Kb  SRAM,  4Kb  EEPROM,  128Kb  Flash).  
• 40  επιπλέον  ψηφιακά  pin  εισόδου/εξόδου  (σύνολο  54)  
• 10  επιπλέον  pin  αναλογικής  εισόδου  (σύνολο  16)  
• Υποστήριξη  ψευδοαναλογικής  εξόδου  PWM  σε  8  ακόμα  ψηφιακά  pin  (σύνολο  14  PWM  pin)  
• Υποστήριξη  εξωτερικού  interrupt  σε  4  ακόμα  ψηφιακά  pin  (σύνολο  6  interrupt)  
• 3  επιπλέον  σειριακά  interface  (σύνολο  4)  από  τα  οποία  το  ένα  προωθείται  στον  ελεγκτή  Serial-­‐Over-­‐
USB  όπως  στο  Duemilanove  για  σύνδεση  με  τον  υπολογιστή.  

  4  
 
Σημειώστε  ότι  το  Arduino  Mega  είναι  συμβατό  με  τα  περισσότερα  shield  που  έχουν  κυκλοφορήσει  για  το  
Arduino   αλλά   όχι   με   το   Ethernet   Shield,   το   οποίο   είναι   ένα   αρκετά   σημαντικό   μειονέκτημα   για   όσους  
θέλουν  να  φτιάξουν  εφαρμογές  με  πρόσβαση  στο  internet  ή  σε  κάποιο  άλλο  δίκτυο.    Από  τις  ανεπίσημες  
εκδόσεις,  το  Freeduino  1.16  και  το  Seeeduino  βασίζονται  στο  Diecimila  οπότε  ισχύουν  οι  ίδιες  διαφορές  
που  έχει  αυτό  με  το  Duemilanove.  Το  Freeduino  είναι  ακριβής  κλώνος  του  Diecimila,  ενώ  το  Seeeduino  
είναι  μια  βελτιωμένη  έκδοση  του  Diecimila  με  κύρια  διαφορά  την  προσθήκη  2  επιπλέον  pin  αναλογικής  
εισόδου.  
 

Είσοδοι  –  Έξοδοι  
Καταρχήν   το   Arduino   διαθέτει   σειριακό   interface.   Ο   μικροελεγκτής   ATmega   υποστηρίζει   σειριακή  
επικοινωνία,  την  οποία  το  Arduino  προωθεί  μέσα  από  έναν  ελεγκτή  Serial-­‐over-­‐USB  ώστε  να  συνδέεται  
με   τον   υπολογιστή   μέσω   USB.   Η   σύνδεση   αυτή   χρησιμοποιείται   για   την   μεταφορά   των   προγραμμάτων  
που  σχεδιάζονται  από  τον  υπολογιστή  στο  Arduino  αλλά  και  για  αμφίδρομη   επικοινωνία   του   Arduino   με  
τον  υπολογιστή  μέσα  από  το  πρόγραμμα  την  ώρα  που  εκτελείται.    

  5  
 
Επιπλέον,   στην   πάνω   πλευρά   του   Arduino   βρίσκονται   14   θηλυκά   pin,   αριθμημένα   από   0   ως   13,   που  
μπορούν  να  λειτουργήσουν  ως   ψηφιακές   είσοδοι   και   έξοδοι.  Λειτουργούν   στα   5V  και  καθένα  μπορεί  να  
παρέχει  ή  να  δεχτεί  το   πολύ   40mA.    Ως  ψηφιακή  έξοδος,  ένα  από  αυτά  τα  pin  μπορεί  να  τεθεί  από  το  
πρόγραμμά  σας  σε  κατάσταση  HIGH  ή  LOW,  οπότε  το  Arduino  θα  ξέρει  αν  πρέπει  να  διοχετεύσει  ή  όχι  
ρεύμα   στο   συγκεκριμένο   pin.   Με   αυτόν   τον   τρόπο   μπορείτε   λόγου   χάρη   να   ανάψετε   και   να   σβήσετε   ένα  
LED   που   έχετε   συνδέσει   στο   συγκεκριμένο   pin.   Αν   πάλι   ρυθμίσετε   ένα   από   αυτά   τα   pin   ως   ψηφιακή  
είσοδο   μέσα   από   το   πρόγραμμά   σας,   μπορείτε   με   την   κατάλληλη   εντολή   να   διαβάσετε   την   κατάστασή  
του   (HIGH   ή   LOW)   ανάλογα   με   το   αν   η   εξωτερική   συσκευή   που   έχετε   συνδέσει   σε   αυτό   το   pin   διοχετεύει  
ή   όχι   ρεύμα   στο   pin   (με   αυτόν   τον   τρόπο   λόγου   χάρη   μπορείτε   να   «διαβάζετε»   την   κατάσταση   ενός  
διακόπτη).    Μερικά   από   αυτά   τα   14   pin,   εκτός   από   ψηφιακές   είσοδοι/έξοδοι   έχουν   και   δεύτερη  
λειτουργία.  Συγκεκριμένα:  

• Τα   pin   0   και   1   λειτουργούν   ως   RX   και   TX   της   σειριακής   όταν   το   πρόγραμμά   σας   ενεργοποιεί   την  
σειριακή  θύρα.  Έτσι,  όταν  λόγου  χάρη  το  πρόγραμμά  σας  στέλνει  δεδομένα  στην  σειριακή,  αυτά  
προωθούνται  και  στην  θύρα  USB  μέσω  του  ελεγκτή  Serial-­‐Over-­‐USB  αλλά  και  στο  pin  0  για  να  τα  
διαβάσει  ενδεχομένως  μια  άλλη  συσκευή  (π.χ.  ένα  δεύτερο  Arduino  στο  δικό  του  pin  1).  Αυτό  
φυσικά   σημαίνει   ότι   αν   στο   πρόγραμμά   σας   ενεργοποιήσετε   το   σειριακό   interface,   χάνετε   2  
ψηφιακές  εισόδους/εξόδους.  
• Τα  pin  2  και  3  λειτουργούν  και  ως  εξωτερικά  interrupt  (interrupt  0  και  1  αντίστοιχα).  Με  άλλα  λόγια,  
μπορείτε  να  τα  ρυθμίσετε  μέσα  από  το  πρόγραμμά  σας  ώστε  να  λειτουργούν  αποκλειστικά  ως  
ψηφιακές   είσοδοι   στις   οποίες   όταν   συμβαίνουν   συγκεκριμένες   αλλαγές,   η   κανονική   ροή   του  
προγράμματος  σταματάει  *άμεσα*  και  εκτελείται  μια  συγκεκριμένη  συνάρτηση.  Τα  εξωτερικά  
interrupt  είναι  ιδιαίτερα  χρήσιμα  σε  εφαρμογές  που  απαιτούν  συγχρονισμό  μεγάλης  ακρίβειας.  
• Τα   pin   3,   5,   6,   9,   10   και   11   μπορούν   να   λειτουργήσουν   και   ως   ψευδοαναλογικές   έξοδοι   με   το  

  6  
σύστημα   PWM  (Pulse  Width  Modulation),  δηλαδή  το  ίδιο  σύστημα  που  διαθέτουν  οι  μητρικές  
των  υπολογιστών  για  να  ελέγχουν  τις  ταχύτητες  των  ανεμιστήρων.  Έτσι,  μπορείτε  να  συνδέσετε  
λόγου  χάρη  ένα  LED  σε  κάποιο  από  αυτά  τα  pin  και  να  ελέγξετε  πλήρως  την  φωτεινότητά  του  με  
ανάλυση  8bit  (256  καταστάσεις  από  0-­‐σβηστό  ως  255-­‐πλήρως  αναμμένο)  αντί  να  έχετε  απλά  
την   δυνατότητα   αναμμένο-­‐σβηστό   που   παρέχουν   οι   υπόλοιπές   ψηφιακές   έξοδοι.   Είναι  
σημαντικό   να   καταλάβετε   ότι   το  PWM  δεν  είναι  πραγματικά  αναλογικό  σήμα  και   ότι   θέτοντας  
στην  έξοδο  την  τιμή  127,  δεν  σημαίνει  ότι  η  έξοδος  θα  δίνει  2.5V  αντί  της  κανονικής  τιμής  των  
5V,   αλλά   ότι   θα   δίνει   ένα   παλμό   που   θα   εναλλάσσεται   με   μεγάλη   συχνότητα   και   για   ίσους  
χρόνους  μεταξύ  των  τιμών  0  και  5V.  
 
Στην   κάτω   πλευρά   του   Arduino,   με   τη   σήμανση   ANALOG   IN,   θα   βρείτε   μια   ακόμη   σειρά   από   6   pin,  
αριθμημένα  από   το   0   ως   το   5.  Το  καθένα  από  αυτά  λειτουργεί  ως  αναλογική   είσοδος  κάνοντας  χρήση  
του   ADC   (Analog   to   Digital   Converter)   που   είναι   ενσωματωμένο   στον   μικροελεγκτή.   Για   παράδειγμα,  
μπορείτε   να   τροφοδοτήσετε   ένα   από   αυτά   με   μια   τάση   την   οποία   μπορείτε   να   κυμάνετε   με   ένα  
ποτενσιόμετρο   από   0V   ως   μια   τάση   αναφοράς   Vref   η   οποία,   αν   δεν   κάνετε   κάποια   αλλαγή   είναι  
προρυθμισμένη  στα  5V.  Τότε,  μέσα  από  το  πρόγραμμά  σας  μπορείτε  να  «διαβάσετε»  την  τιμή  του  pin  ως  
ένα  ακέραιο  αριθμό  ανάλυσης  10-­‐bit,  από  0  (όταν  η  τάση  στο  pin  είναι  0V)  μέχρι  1023  (όταν  η  τάση  στο  
pin  είναι  5V).  Η  τάση  αναφοράς  μπορεί  να  ρυθμιστεί  με  μια  εντολή  στο  1.1V,  ή  σε  όποια  τάση  επιθυμείτε  
(μεταξύ   2   και   5V)   τροφοδοτώντας   εξωτερικά   με   αυτή   την   τάση   το   pin   με   την   σήμανση   AREF   που  
βρίσκεται   στην   απέναντι   πλευρά   της   πλακέτας.   Έτσι,   αν   τροφοδοτήσετε   το   pin   AREF   με   3.3V   και   στην  
συνέχεια  δοκιμάσετε  να  διαβάσετε  κάποιο  pin  αναλογικής  εισόδου  στο  οποίο  εφαρμόζετε  τάση  1.65V,  
το   Arduino   θα   σας   επιστρέψει   την   τιμή   512.    Τέλος,   καθένα   από   τα   6   αυτά   pin,   με   κατάλληλη   εντολή  
μέσα   από   το   πρόγραμμα   μπορεί   να   μετατραπεί   σε   ψηφιακό   pin   εισόδου/εξόδου   όπως   τα   14   που  
βρίσκονται   στην   απέναντι   πλευρά   και   τα   οποία   περιγράφηκαν   πριν.   Σε   αυτή   την   περίπτωση   τα   pin  
μετονομάζονται  από  0~5  σε  14~19  αντίστοιχα.  

Τροφοδοσία  
Το   Arduino   μπορεί   να   τροφοδοτηθεί   με   ρεύμα   είτε   από   τον   υπολογιστή   μέσω   της   σύνδεσης   USB,   είτε  
από   εξωτερική   τροφοδοσία   που   παρέχεται   μέσω   μιας   υποδοχής   φις   των   2.1mm   (θετικός   πόλος   στο  
κέντρο)  και  βρίσκεται  στην  κάτω-­‐αριστερή  γωνία  του  Arduino.  

  7  
     

Για  να  μην  υπάρχουν  προβλήματα,  η  εξωτερική  τροφοδοσία  πρέπει  να  είναι  από  7  ως  12V  και  μπορεί  να  
προέρχεται  από  ένα  κοινό  μετασχηματιστή  του  εμπορίου,  από  μπαταρίες  ή  οποιαδήποτε  άλλη  πηγή  DC.  

Δίπλα  από  τα  pin  αναλογικής  εισόδου,  υπάρχει  μια  ακόμα  συστοιχία  από  6  pin  με  την  σήμανση  POWER.  
Η  λειτουργία  του  καθενός  έχει  ως  εξής:  
• Το   πρώτο,   με   την   ένδειξη  RESET,  όταν  γειωθεί  (σε  οποιοδήποτε  από  τα   3   pin   με   την   ένδειξη   GND   που  
υπάρχουν  στο  Arduino)  έχει  ως  αποτέλεσμα  την  επανεκκίνηση  του  Arduino.  
• Το  δεύτερο,  με  την  ένδειξη   3.3V,  μπορεί  να  τροφοδοτήσει  τα  εξαρτήματά  σας  με  τάση  3.3V.  Η  τάση  
αυτή   δεν   προέρχεται   από   την   εξωτερική   τροφοδοσία   αλλά   παράγεται   από   τον   ελεγκτή   Serial-­‐
over-­‐USB  και  έτσι  η  μέγιστη  ένταση  που  μπορεί  να  παρέχει  είναι  μόλις  50mA.  
• Το   τρίτο,   με   την   ένδειξη  5V,   μπορεί   να   τροφοδοτήσει   τα   εξαρτήματά   σας   με   τάση   5V.   Ανάλογα   με   τον  
τρόπο  τροφοδοσίας  του  ίδιου  του  Arduino,  η  τάση  αυτή  προέρχεται  είτε  άμεσα  από  την  θύρα  
USB   (που   ούτως   ή   άλλως   λειτουργεί   στα   5V),   είτε   από   την   εξωτερική   τροφοδοσία   αφού   αυτή  
περάσει  από  ένα  ρυθμιστή  τάσης  για  να  την  «φέρει»  στα  5V.  
• Το  τέταρτο  και  το  πέμπτο  pin,  με  την  ένδειξη  GND,  είναι  φυσικά  γειώσεις.  
• Το  έκτο  και  τελευταίο  pin,  με  την  ένδειξη  Vin  έχει  διπλό  ρόλο.  Σε  συνδυασμό  με  το  pin  γείωσης  δίπλα  
του,  μπορεί  να  λειτουργήσει  ως  μέθοδος  εξωτερικής  τροφοδοσίας  του  Arduino,  στην  περίπτωση  
που  δεν  σας  βολεύει  να  χρησιμοποιήσετε  την  υποδοχή  του  φις  των  2.1mm.  Αν  όμως  έχετε  ήδη  
συνδεδεμένη   εξωτερική   τροφοδοσία   μέσω   του   φις,   μπορείτε   να   χρησιμοποιήσετε   αυτό   το   pin  
για   να   τροφοδοτήσετε   εξαρτήματα   με   την   πλήρη   τάση   της   εξωτερικής   τροφοδοσίας   (7~12V),  
πριν  αυτή  περάσει  από  τον  ρυθμιστή  τάσης  όπως  γίνεται  με  το  pin  των  5V.  
 

Ενσωματωμένα  κουμπιά  και  LED  


Πάνω   στην   πλακέτα   του   Arduino   υπάρχει   ένας   διακόπτης   micro-­‐switch   και   4   μικροσκοπικά   LED  

  8  
επιφανειακής  στήριξης.    Η  λειτουργία  του  διακόπτη  (που  έχει  την  σήμανση  RESET)  και  του  ενός  LED  με  
την   σήμανση   POWER   είναι   μάλλον   προφανής.    Τα   δύο   LED   με   τις   σημάνσεις   TX   και   RX,  
χρησιμοποιούνται   ως   ένδειξη   λειτουργίας   του   σειριακού   interface,   καθώς   ανάβουν   όταν   το   Arduino  
στέλνει   ή   λαμβάνει   (αντίστοιχα)   δεδομένα   μέσω   USB.   Σημειώστε   ότι   τα   LED   αυτά   ελέγχονται   από   τον  
ελεγκτή   Serial-­‐over-­‐USB   και   συνεπώς   δεν   λειτουργούν   όταν   η   σειριακή   επικοινωνία   γίνεται   αποκλειστικά  
μέσω  των  ψηφιακών  pin  0  και  1.    Τέλος,  υπάρχει  το  LED  με  την  σήμανση  L.  Η  βασική  δοκιμή  λειτουργίας  
του  Arduino  είναι  να  του  αναθέσετε  να  αναβοσβήνει  ένα  LED  (θα  το  δείτε  αυτό  στην  συνέχεια  όταν  θα  
φτιάξετε  την  πρώτη  εφαρμογή  σας).  Για  να  μπορείτε  να  το  κάνετε  αυτό  από  την  πρώτη  στιγμή,  χωρίς  να  
συνδέσετε  τίποτα  πάνω  στο  Arduino,  οι  κατασκευαστές  του  σκέφτηκαν  να  ενσωματώσουν  ένα  LED  στην  
πλακέτα,   το   οποίο   σύνδεσαν   στο   ψηφιακό   pin   13.   Έτσι,   ακόμα   και   αν   δεν   έχετε   συνδέσει   τίποτα   πάνω  
στο   φυσικό   pin   13,   αναθέτοντάς   του   την   τιμή   HIGH   μέσα   από   το   πρόγραμμά   σας,   θα   ανάψει   αυτό   το  
ενσωματωμένο  LED.  

Arduino  IDE  (Integrated  Design  Environment)  και  σύνδεση  με  


τον  υπολογιστή  
Ότι  χρειάζεστε  για  την  διαχείριση  του  Arduino  από  τον  υπολογιστή  σας  το  παρέχει  το   Arduino   IDE,  την  
τελευταία   έκδοση   του   οποίου   μπορείτε   να   κατεβάσετε   από   το   επίσημο   site   για   καθένα   από   τα   τρία  
δημοφιλέστερα   λειτουργικά   συστήματα.   Το   Arduino   IDE   είναι   βασισμένο   σε   Java   και   συγκεκριμένα  
παρέχει:  

• ένα  πρακτικό   περιβάλλον  για  την  συγγραφή  των  προγραμμάτων  σας  (τα  οποία  ονομάζονται   sketch  
στην  ορολογία  του  Arduino)  με  συντακτική  χρωματική  σήμανση,  
• αρκετά  έτοιμα  παραδείγματα,  
• μερικές  έτοιμες  βιβλιοθήκες  για  προέκταση  της  γλώσσας  και  για  να  χειρίζεστε  εύκολα  μέσα  από  τον  
κώδικά  σας  τα  εξαρτήματα  που  συνδέετε  στο  Arduino,  
• τον  compiler  για  την  μεταγλώττιση  των  sketch  σας,  
• ένα   serial   monitor  που  παρακολουθεί  τις  επικοινωνίες  της  σειριακής  (USB),  αναλαμβάνει  να  στείλει  
αλφαριθμητικά   της   επιλογής   σας   στο   Arduino   μέσω   αυτής   και   είναι   ιδιαίτερα   χρήσιμο   για   το  
debugging  των  sketch  σας  
• και  την  επιλογή  να  ανεβάσετε  (upload)  το  μεταγλωττισμένο  sketch  στο  Arduino.  
Για  τα  δύο  τελευταία  χαρακτηριστικά  βέβαια,  το  Arduino  πρέπει  να  έχει  συνδεθεί  σε  μια  από  τις  θύρες  
USB   του   υπολογιστή   και,   λόγω   του   ελεγκτή   Serial-­‐over-­‐USB,   θα   πρέπει   να   αναγνωριστεί   από   το  
λειτουργικό  σας  σύστημα  ως  εικονική  σειριακή  θύρα.  Για  την  σύνδεση  θα  χρειαστείτε  ένα  καλώδιο  USB  
από  Type  A  σε  Type  B,  όπως  αυτό  των  εκτυπωτών.  Για  την  αναγνώριση  από  το  λειτουργικό  θα  χρειαστεί  
να  εγκαταστήσετε  τον  οδηγό  του  FTDI  chip  (δηλαδή  του  ελεγκτή  Serial-­‐over-­‐USB)  ο  οποίος  υπάρχει  στον  

  9  
φάκελο   drivers   του   Arduino   IDE   που   κατεβάσατε.   Την   τελευταία   έκδοση   αυτού   του   οδηγού   μπορείτε  
επίσης   να   κατεβάσετε   για   κάθε   λειτουργικό   σύστημα   από   το   site   της   FTDI.   Σημειώστε   ότι   στους  
τελευταίους  πυρήνες  του  Linux  υπάρχει  εγγενής  υποστήριξη  του  συγκεκριμένου  ελεγκτή.    Αν  όλα  έγιναν  
σωστά,  το  κεντρικό  παράθυρο  του  Arduino  IDE  θα  εμφανιστεί  όταν  το  εκτελέσετε  και  στο  μενού  Tools  –>  
Serial   Port   θα   πρέπει   να   εμφανίζεται   η   εικονική   σειριακή   θύρα   (συνήθως   COM#   για   τα   Windows,  
/dev/ttyusbserial##  για  το  MacOS  και  /dev/ttyusb##  για  το  Linux).  Επιλέξτε  αυτή  την  εικονική  θύρα  και  
στην  συνέχεια  επιλέξτε  τον  τύπο  του  Arduino  σας  (Arduino  Duemilanove  w/  ATmega328)  από  το  μενού  
Tools   –>   Board.    Το   Arduino   είναι   πλέον   έτοιμο   να   δεχτεί   τα   sketch   σας.   Αν   εμφανίστηκε   οποιοδήποτε  
πρόβλημα   διαβάστε   τις   αναλυτικές   οδηγίες   εγκατάστασης   για   κάθε   λειτουργικό   σύστημα   στη   διεύθυνση  
http://arduino.cc/en/Guide/HomePage.    

  10  
 

Η  Γλώσσα  προγραμματισμού  
Η   γλώσσα   του   Arduino   βασίζεται   στη   γλώσσα   Wiring,   μια   παραλλαγή   C/C++   για   μικροελεγκτές  
αρχιτεκτονικής   AVR   όπως   ο   ATmega,   και   υποστηρίζει   όλες   τις   βασικές   δομές   της   C   καθώς   και   μερικά  
χαρακτηριστικά   της   C++.   Για   compiler   χρησιμοποιείται   ο   AVR   gcc   και   ως   βασική   βιβλιοθήκη   C  
χρησιμοποιείται  η  AVR  libc.    Λόγω  της  καταγωγής  της  από  την  C,  στην  γλώσσα  του  Arduino  μπορείτε  να  
χρησιμοποιήσετε  ουσιαστικά  τις  ίδιες  βασικές  εντολές  και  συναρτήσεις,  με  την  ίδια  σύνταξη,  τους  ίδιους  
τύπους  δεδομένων  και  τους  ίδιους  τελεστές  όπως  και  στην  C.  Πέρα  από  αυτές  όμως,  υπάρχουν  κάποιες  
ειδικές   εντολές,   συναρτήσεις   και   σταθερές   που   βοηθούν   για   την   διαχείριση   του   ειδικού   hardware   του  
Arduino.  Οι  πιο  σημαντικές  από  αυτές  επεξηγούνται  στον  πίνακα  που  ακολουθεί:  

Όρισμα   Είδος   Τύπος   Παράμετροι   Περιγραφή  


Έχει   την   τιμή   0   και   είναι   αντίστοιχη   του   λογικού  
LOW   Σταθερά   int   -­‐  
false.  
Έχει   την   τιμή   1   και   είναι   αντίστοιχη   του   λογικού  
HIGH   Σταθερά   int   -­‐  
true.  
INPUT   Σταθερά   int   -­‐   Έχει   την   τιμή   0   και   είναι   αντίστοιχη   του   λογικού  

  11  
false.  
Έχει   την   τιμή   1   και   είναι   αντίστοιχη   του   λογικού  
OUTPUT   Σταθερά   int   -­‐  
true.  
Καθορίζει   αν   το   συγκεκριμένο   ψηφιακό   pin   θα  
είναι  pin  εισόδου  ή  pin  εξόδου  ανάλογα  με  την  τιμή  
pinMode   Εντολή   -­‐   (pin,  mode)  
που   δίνεται   στην   παράμετρο   mode   (INPUT   ή  
OUTPUT  αντίστοιχα).  
Θέτει   την   κατάσταση   pinstatus   (HIGH   ή   LOW)   στο  
digitalWrite   Εντολή   -­‐   (pin,  pinstatus)  
συγκεκριμένο  ψηφιακό  pin.  
Επιστρέφει   την   κατάσταση   του   συγκεκριμένου  
digitalRead   Συνάρτηση   int   (pin)   ψηφιακού   pin   (0   για   LOW   και   1   για   HIGH)   εφόσον  
αυτό  είναι  pin  εισόδου.  
Δέχεται   τις   τιμές   DEFAULT,   INTERNAL   ή   EXTERNAL  
στην   παράμετρο   type   για   να   καθορίσει   την   τάση  
analogReference   Εντολή   -­‐   (type)   αναφοράς   (Vref)   των   αναλογικών   εισόδων   (5V,  
1.1V   ή   η   εξωτερική   τάση   με   την   οποία  
τροφοδοτείται  το  pin  AREF  αντίστοιχα)  
Επιστρέφει   έναν   ακέραιο   από   0   εώς   1023,   ανάλογα  
analogRead   Συνάρτηση   int   (pin)   με   την   τάση   που   τροφοδοτείται   το   συγκεκριμένο  
pin  αναλογικής  εισόδου  στην  κλίμακα  0  ως  Vref.  
Θέτει  το  συγκεκριμένο  ψηφιακό  pin  σε  κατάσταση  
ψευδοαναλογικής   εξόδου   (PWM).   Η   παράμετρος  
value  καθορίζει  το  πλάτος  του  παλμού  σε  σχέση  με  
analogWrite   Εντολή   -­‐   (pin,  value)  
την   περίοδο   του   παραγόμενου   σήματος   στην  
κλίμακα   από   0   ως   255   (π.χ.   με   value   127,   το   πλάτος  
του  παλμού  είναι  ίσο  με  μισή  περίοδο).  
Μετρητής   που   επιστρέφει   το   χρονικό   διάστημα   σε  
ms   από   την   στιγμή   που   άρχισε   η   εκτέλεση   του  
unsigned   προγράμματος.  Λάβετε  υπόψη  ότι  λόγω  του  τύπου  
millis   Συνάρτηση   ()  
long   μεταβλητής   (unsigned   long   δηλ.   32bit)   θα   γίνει  
overflow  σε  2^32ms  δηλαδή  περίπου  σε  50  μέρες,  
οπότε  ο  μετρητής  θα  ξεκινήσει  πάλι  από  το  μηδέν.  
Σταματά   προσωρινά   την   ροή   του   προγράμματος  
για   time   ms.   Η   παράμετρος   time   είναι   unsigned  
long   (από   0   ως   2^32).   Σημειώστε   ότι   παρά   την  
delay   Εντολή   -­‐   (time)   προσωρινή   παύση,   συναρτήσεις   των   οποίων   η  
εκτέλεση   ενεργοποιείται   από   interrupt   θα  
εκτελεστούν   κανονικά   κατά   την   διάρκεια   μιας  
delay.  
Θέτει   σε   λειτουργία   το   συγκεκριμένο   interrupt,  
ώστε  να  ενεργοποιεί  την  συνάρτηση  function,  κάθε  
φορά   που   ικανοποιείται   η   συνθήκη   που   ορίζεται  
από  την  παράμετρο  triggermode:  
(interrupt,    
attachInterrupt   Εντολή   -­‐   function,   • LOW   (ενεργοποίηση   όταν   η   κατάσταση   του   pin  
triggermode)   που   αντιστοιχεί   στο   συγκεκριμένο  
interrupt  γίνει  LOW)  
• RISING  (όταν  από  LOW  γίνει  HIGH)  
• FALLING  (όταν  από  HIGH  γίνει  LOW)  
• CHANGE  (όταν  αλλάξει  κατάσταση  γενικά)  
detachInterrupt   Εντολή   -­‐   (interrupt)   Απενεργοποιεί  το  συγκεκριμένο  interrupt.  
Σταματά   προσωρινά   την   λειτουργία   όλων   των  
noInterrupts   Εντολή   -­‐   ()  
interrupt  
Επαναφέρει   την   λειτουργία   των   interrupt   που  
interrupts   Εντολή   -­‐   ()   διακόπηκε   προσωρινά   από   μια   εντολή  
noInterrupts.  
Μέθοδος   Θέτει   τον   ρυθμό   μεταφοράς   δεδομένων   του  
Serial.begin   -­‐   (datarate)  
κλάσης   σειριακού  interface  (σε  baud)  

  12  
Διοχετεύει   τα   δεδομένα   data   για   αποστολή   μέσω  
Μέθοδος  
Serial.println   -­‐   (data)   του  σειριακού  interface.  Η  παράμετρος  data  μπορεί  
κλάσης  
να  είναι  είτε  αριθμός  είτε  αλφαριθμητικό.  
 
Επιπλέον,   στην   γλώσσα   του   Arduino   κάθε   πρόγραμμα   αποτελείται   από   δύο   βασικές   ρουτίνες   ώστε   να  
έχει  την  γενική  δομή:  

//  Ενσωματώσεις  βιβλιοθηκών,  δηλώσεις  μεταβλητών...  


   
void  setup()  
{  
   //  ...  
}  
   
void  loop()  
{  
   //  ...  
}  
   
//  Υπόλοιπες  συναρτήσεις...  
 

Η  βασική  ρουτίνα  setup()  εκτελείται  μια  φορά  μόνο  κατά  την  εκκίνηση  του  προγράμματος  ενώ  η  βασική  
ρουτίνα   loop()   περιέχει   τον   βασικό   κορμό   του   προγράμματος   και   η   εκτέλεσή   της   επαναλαμβάνεται  
συνέχεια   σαν   ένας   βρόγχος   while(true).    Αν   και   πρόκειται   μόνο   για   τις   πιο   βασικές   λειτουργίες   της  
γλώσσας   του   Arduino,   με   αυτές   και   με   λίγες   βασικές   γνώσεις   C   θα   μπορέσετε   να   δημιουργήσετε   το  
sketch   ακόμα   και   για   κάποιο   αρκετά   περίπλοκο   project.   Για   το   πλήρες   reference   πάντως,   επισκεφτείτε  
την  σχετική  σελίδα  ενώ  ακόμα  περισσότερες  πληροφορίες  μπορείτε  να  βρείτε  στο  site  της  Wiring  καθώς  
και  στο  εγχειρίδιο  της  βιβλιοθήκης  AVR  Libc.  

Το  παράδειγμα  Hello  World!  


Έφτασε  η  στιγμή  να  δημιουργήσετε  το  πρώτο  σας  sketch,  το  οποίο  -­‐παραδοσιακά-­‐  πρέπει  να  εξάγει  το  
μήνυμα  «Hello  World».  Βέβαια  -­‐μέχρι  να  προσθέσετε  εσείς  μια-­‐  το  Arduino  δεν  διαθέτει  οθόνη  ώστε  να  
εμφανίσει   κάποιο   μήνυμα.   Η   μόνη   συσκευή   εξόδου   που   είναι   ενσωματωμένη   στην   πλακέτα   του   Arduino  
είναι   το   LED   του   pin   13.   Έτσι,   το   Arduino   σας   θα   χαιρετίσει   την   οικουμένη   αναβοσβήνοντας   απλά   το  
LEDάκι  του.    Ανοίξτε  το  IDE  του  Arduino  και  -­‐για  να  μην  πληκτρολογείτε-­‐  επιλέξτε  File  –>  Sketchbook  –>  

  13  
Examples  –>  Digital  –>  Blink.  Θα  ανοίξει  ένα  sketch  με  τον  παρακάτω  κώδικα:  

1   int  ledPin  =  13;  


2   void  setup()  
3   {  
4      pinMode(ledPin,  OUTPUT);  
5   }  
6   void  loop()  
7   {  
8      digitalWrite(ledPin,  HIGH);  
9      delay(1000);  
10      digitalWrite(ledPin,  LOW);  
11      delay(1000);  
12   }  
 
Όπως  κάθε  “Hello  World”  πρόγραμμα,  το  sketch  αυτό  είναι  αρκετά  straightforward.  Αρχικά,  στην  ρουτίνα  
setup()  ρυθμίζεται  το  pin  στο  οποίο  είναι  συνδεδεμένο  το  LED  ως  pin  εξόδου  (γραμμή  4).  Στην  συνέχεια  η  
κύρια  ρουτίνα  loop(),  η  εκτέλεση  της  οποίας  επαναλαμβάνεται  συνέχεια,  ανάβει  το  LED  (γραμμή  8)  και  
στην   συνέχεια   το   σβήνει   (γραμμή   10).   Δύο   εντολές   delay   ρυθμίζουν   τον   χρόνο   που   το   LED   θα   μένει  
αναμμένο  ή  σβηστό  στις  γραμμές  9  και  11  (1000ms  δηλαδή  1  δευτερόλεπτο).    Για  να  δείτε  το  πρόγραμμα  
στην   πράξη,   εφόσον   έχετε   ήδη   συνδέσει   το   Arduino   με   τον   υπολογιστή   επιλέξτε   File   –>   Upload   to   I/O  
Board   (εναλλακτικά   πατήστε   Ctrl-­‐U   ή   κάντε   κλικ   στο   ανάλογο   εικονίδιο   της   toolbar).   Με   αυτή   την  
ενέργεια,   το   sketch   θα   μεταγλωττιστεί   και   θα   σταλεί   αυτόματα   στο   Arduino,   γεγονός   που   μπορείτε   να  
επαληθεύσετε   από   την   δραστηριότητα   των   TX   και   RX   LED   πάνω   στην   πλακέτα   του   Arduino.   Τα  
προγράμματα  που  «ανεβάζετε»  στο  Arduino  εκτελούνται  αυτόματα  από  τον  bootloader  αμέσως  μετά  την  
λήψη  τους  και  έτσι,  χωρίς  καθυστέρηση,  θα  πρέπει  να  δείτε  το  LED  με  τη  σήμανση  13  να  ανάβει  και  να  
σβήνει  συνεχόμενα  με  περίοδο  2  δευτερολέπτων,  δηλαδή  όπως  ακριβώς  ορίζει  το  sketch.    Αν  επιμένετε  
ότι   ένα   LED   που   αναβοσβήνει   δεν   αποτελεί   πρέπον   χαιρετισμό   και   θέλετε   σώνει   και   καλά   να   δείτε   το  
“Hello   World”   γραμμένο,   υπάρχει   μια   λύση.   Μπορείτε   να   το   στείλετε   μέσω   της   σειριακής   (USB)   στον  
υπολογιστή  και  να  το  δείτε  στην  οθόνη  σας.  Και  σαν  bonus,  το  Arduino  θα  στέλνει  και  την  κατάσταση  του  
LED  στον  υπολογιστή.  Προσθέστε  απλά  τις  γραμμές:  

  14  
Serial.begin(9600);  
Serial.println("Hello  World!  -­‐  Are  you  happy  now?");  
 
αμέσως   μετά   την   γραμμή   με   την   εντολή   pinMode   και   πριν   κλείσει   το   άγκιστρο   της   ρουτίνας   setup().  
Επίσης,  προσθέστε  την  γραμμή:  
Serial.println("ON”);  
και  την  γραμμή:  
Serial.println("OFF”);  
αμέσως  μετά  την  πρώτη  και  την  δεύτερη  digitalWrite  αντίστοιχα.    
 

 
 
Αφού   κάνετε   τις   αλλαγές   επιλέξτε   όπως   και   πριν   το   Upload   to   I/O   Board   από   το   IDE   για   να   γίνει   ξανά  
μεταγλώττιση  και  να  ανέβει  το  νέο  binary  στο  Arduino.  Αμέσως  μετά,  κάντε  κλικ  στο  τελευταίο  κουμπί  
της  toolbar  με  επεξήγηση  Serial  Monitor  για  να  μετατρέψετε  το  κάτω  τμήμα  του  παραθύρου  του  IDE  σε  
σειριακή  κονσόλα  και  σύντομα  θα  δείτε  το  Arduino  να  σας  στέλνει  τα  μηνύματά  του.  

  15  
 
Μπορείτε  να  πειραματιστείτε  με  το  sketch,  να  φτιάξετε  ωραία  pattern  με  τα  οποία  αναβοσβήνει  το  LED,  
να  το  βάλετε  να  στέλνει  διαφορετικές  πληροφορίες  στην  σειριακή  κ.λπ.  αλλά  ακόμα  και  αν  μάθετε  στο  
Arduino   να   σας   μιλάει   με   κώδικα   Morse,   δεν   παύει   να   είναι   ένα   LED   που   αναβοσβήνει   και   ενίοτε  
φλυαρεί  στην  σειριακή  –  δεν  έχει  κάτι  σημαντικό  να  σας  πει.    Αυτό  φυσικά  συμβαίνει  επειδή  δεν  έχετε  
συνδέσει  ακόμα  περιφερειακά  στο  Arduino  σας  και  έτσι  είναι  σαν  να  έχετε  ένα  υπολογιστή  χωρίς  οθόνη,  
ποντίκι  και  πληκτρολόγιο.    

Πλακέτες  επέκτασης  (Arduino-­‐Shield)    


Τα   shield   είναι   ολοκληρωμένες   πλακέτες   που   είναι   σχεδιασμένες   ώστε   να   κουμπώνουν   πάνω   στο  
Arduino  προεκτείνοντας  την  λειτουργικότητά  του.  Είναι  η  hardware  αντίστοιχη  έννοια  των  plugin,  addon  
και  extension  που  υπάρχουν  στο  software.    Μερικά  από  τα  πιο  δημοφιλή  shield  που  κυκλοφορούν  στο  
εμπόριο  για  το  Arduino  είναι:  
• Ethernet  shield:   Δίνει   στο   Arduino   την   δυνατότητα   να   δικτυωθεί   σε   ένα   LAN   ή   στο   internet   μέσω   ενός  
τυπικού  καλωδίου  Ethernet.  
• WiFi  shield:  Όμοιο  με  το  Ethernet  shield,  χωρίς  φυσικά  το  καλώδιο.  
• Διάφορα   shield   οθόνης:   Προσθέτουν   οθόνη   στο   Arduino.   Κυκλοφορούν   από   απλές   οθόνες   τύπου  
calculator  μέχρι  OLED  touchscreen  υψηλής  ανάλυσης  τύπου  iPhone.  
• Wave  shield:  Δίνει  στο  Arduino  την  δυνατότητα  να  παίζει  ήχους/μουσική  από  κάρτες  SD.  
• GPS  shield:  Προσθέτει  GPS  δυνατότητες  στο  Arduino  (εντοπισμό  στίγματος).  

  16  
• Διάφορα   Motor   Shields:   Σας   επιτρέπουν   να   οδηγήσετε   εύκολα   μοτέρ   διάφορων   τύπων   (απλά   DC,  
servo,  stepper  κ.λπ.)  από  το  Arduino.  
• ProtoShield:  Μια  προσχεδιασμένη  πλακέτα  πρωτοτυποποίησης,  συμβατή  στις  διαστάσεις  του  Arduino  
και  χωρίς  εξαρτήματα  για  να  φτιάξετε  το  δικό  σας  shield.  

 
Τα   shield   είναι   σχεδιασμένα   ώστε   αφού   κουμπωθούν   πάνω   στο   Arduino   να   προωθούν   τις   υποδοχές   του,  
ώστε   να   μπορείτε   να   συνδέσετε   επιπλέον   τα   δικά   σας   εξαρτήματα   ή   να   κουμπώσετε   και   επόμενο   shield.  
Φυσικά,   το   κάθε   shield   χρησιμοποιεί   ορισμένους   από   τους   πόρους   συνδεσιμότητας   του   Arduino   και   έτσι  
δεν   μπορείτε   να   συνδέσετε   απεριόριστα   shield.   Μάλιστα   κάποια   shield   μπορεί   να   μην   είναι   συμβατά  
μεταξύ   τους   γιατί   χρησιμοποιούν   τα   ίδια   pin   του   Arduino   για   επικοινωνία   με   αυτό.   Επίσης,   επειδή  
κάποια  shield  δεν  προωθούν  τις  συνδέσεις  του  Arduino  (όπως  π.χ.  οι  οθόνες  οι  οποίες  δεν  έχουν  νόημα  
αν   τις   καλύψετε   από   πάνω   με   ένα   επόμενο   shield),   υπάρχουν   ειδικά   extender   shield   που   κουμπώνουν  
στο  Arduino  και  δίνουν  την  δυνατότητα  σε  δύο  άλλα  shield  να  κουμπώσουν  πάνω  τους,  λειτουργώντας  
σαν   πολύπριζα.    Όπως   και   για   το   ίδιο   το   Arduino,   το   βασικό   πλεονέκτημα   των   shield   δεν   είναι   τόσο   το  
προφανές  πλεονέκτημα  του  έτοιμου  hardware  όσο  ότι  συνοδεύονται  συνήθως  από  έτοιμες  βιβλιοθήκες  
που  σας  επιτρέπουν  να  προγραμματίζετε  τα  sketch  σας  σε  high  level.  Έτσι,  λόγου  χάρη,  δεν  χρειάζεται  να  
διαβάζετε   datasheet   για   να   συνδέσετε   και   να   λειτουργήσετε   ένα   GPS   module   πάνω   στο   Arduino.   Απλά  
συνδέετε   το   shield,   εγκαθιστάτε   τη   βιβλιοθήκη   που   το   συνοδεύει   και   χρησιμοποιείτε   μια   έτοιμη  
συνάρτηση   -­‐του   στυλ   getLocation-­‐   για   να   πάρετε   το   γεωγραφικό   στίγμα   και   να   το   επεξεργαστείτε  
περαιτέρω   στο   sketch   σας.    Τα   shield   σας   λύνουν   τα   χέρια   όταν   θέλετε   να   δημιουργήσετε   εύκολα   ένα  
πραγματικά   πρακτικό   project.   Αυτός   είναι   και   ο   λόγος   που   δεν   συνιστάται   η   αγορά   κάποιας   έκδοσης   του  
Arduino  που  δεν  είναι  100%  συμβατή  με  τα  shield.  
 
 
 

  17  
 
Βασικά  Παραδείγματα  με  τον  μικροελεγκτή  Arduino.  
Παράδειγμα  1:  Συνεχές  αναβόσβημα  ενός  Led  με  περίοδο  1sec.  

Το   Arduino   αποτελείται   από   δεκατρία   ψηφιακά   pin,   τα   οποία   μπορούμε   να   τα  


χρησιμοποιήσουμε   το   κάθε   ένα   ξεχωριστά,   είτε   για   είσοδο   είτε   για   έξοδο.   Μπορούμε   να   τα  
προγραμματίσουμε   να   συμπεριφέρονται   όπως   εμείς   θέλουμε,   αρκεί   να   κάνουμε   τις   σωστές  
δηλώσεις   στο   κώδικα   που   θα   φορτώσουμε   στη   πλακέτα.   Η   έξοδος   του   κάθε   pin   μπορεί   να  
προγραμματιστεί   να   δίνει   τιμές   HIGH   ή   LOW.   Λέγοντας   HIGH   ενώνουμε   το   δυαδικό   '1'   και  
έχουμε   τάση   εξόδου   5V   DC,   ενώ   το   LOW   είναι   το   δυαδικό   '0'   και   έχει   τάση   εξόδου   0V   DC  
(ground).    
Παρακάτω   θα   δούμε   ένα   παράδειγμα   για   να   μπορέσουμε   να   κατανοήσουμε   τον  
προγραμματισμό   των   ψηφιακών   pin   του   Arduino.   Θα   ενώσουμε   ένα   led   στη   board   και   θα   το  
προγραμματίσουμε   να   ανάβει   και   να   σβήνει   σε   χρονικά   διαστήματα   ενός   δευτερολέπτου.   Η  
εφαρμογή  παρουσιάζει  το  απλούστερο  πράγμα  που  μπορείτε  να  κάνετε  με  ένα  Arduino  για  να  
δείτε  μια  ψηφιακή  θύρα  του  μικροελεγκτή  να  αναβοσβήνει  ένα  LED.    

Σχηματικό  Κύκλωμα:   Για   να   υλοποιήσετε   το   κύκλωμα,   συνδέστε   μια   αντίσταση   220Ω   με   το   pin  
13.  Κατόπιν  συνδέστε  τον  μακρύτερο  ακροδέκτη  (άνοδο)  με  την  αντίσταση.  Συνδέστε  το  κοντό  
ακροδέκτη   (κάθοδο)   με   τη   γείωση.   Κατόπιν   συνδέστε   το   Arduino   με   τον   υπολογιστή   σας,  
ξεκινήστε   το   πρόγραμμα   Arduino,   και   πληκτρολογείστε   τον   παρακάτω   κώδικα.   Τα   περισσότερα  
Arduino  ήδη  έχουν  ένα  LED  στο  pin  13.  Εάν  τρέχετε  αυτό  το  παράδειγμα  χωρίς  εξωτερικό  LED  
και  αντισταση,  πρέπει  να  δείτε  το  ενσωματωμένο  LED  να  αναβοσβήνει.    

Για  την  δημιουργία  της  εικόνας  χρησιμοποιήθηκε  το  προγραμμα  Fritzing.  Για  περισσότερα  παραδείγματα  
κυκλωμάτων,  δείτε:  http://fritzing.org    

Παρακάτω  δίνεται  ένας  πρώτυπος  κώδικας  που  επιτυγχάνει  το  αναβόσβημα  ενός  Led  με  
περίοδο  1sec  (Οι  γραμμές  με  πορτοκαλί  είναι  κώδικας-­‐εντολές  όλα  τα  άλλα  είναι  σχόλια)    

  18  
// Στους περισσότερους Arduino στο pin 13 είναι, πάνω στην PCB πλακέτα, συνδεδεµένο
// ένα LED. Ας δώσουµε λοιπόν στο pin 13 ένα όνοµα:
int led = 13; // Ορίζουµε µία µεταβλητή τύπου Integer (Ακεραίου) µε όνοµα led και
// της δίνουµε την τιµή 13 µε σκοπό να την χρησιµοποιήσουµε παρακάτω
// στον κώδικα και να δηλώσουµε που θα συνδέσουµε το led.

// Η ρουτίνα void setup εκτελείται µονάχα µία φορά και χρησιµοποιείται


// για να αχρικοποιήσουµε τις παραµέτρους του Arduino δηλαδή, αποτελεί
// τη συνάρτηση αρχικών ρυθµίσεων του µικροελεγκτή)

void setup() {
pinMode(led, OUTPUT); // Ορίζουµε χρησιµοποιώντας την µεταβλητή led, ότι το pin
// 13 θα λειτουργεί σαν ψηφιακή έξοδος 0-5V
}
//Η ρουτίνα void loop εκτελείται συνεχώς και για όσο χρόνο υπάρχει τροφοδοσία στον
//Arduino.
void loop() {
digitalWrite(led,HIGH);//Βγάλε λογικό 1 (5V) στο pin 13, δηλαδή άναψε το led
delay(1000); // Συνάρτηση καθυστέρησης χρόνου 1000ms
digitalWrite(led, LOW);//Βγάλε λογικό 0 (0V) στο pin 13, δηλαδή σβήσε το led
delay(1000); // Συνάρτηση καθυστέρησης χρόνου 1000ms
}

Παράδειγμα  2:  Άναμμα  και  σβήσιμο  Led  ελεγχόμενο  από  εξωτερικό  διακόπτη  (button)  με  την  
διαδικασία  polling  δηλαδή  με  αλλεπάλληλους  ελέγχους  από  το  κυρίως  πρόγραμμα.  

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

Σχηματικό  διάγραμμα  για  την  χρήση  του  διακόπτη  επαναφοράς    

  19  
// Οι µεταβλητές που ορίζονται ως connstants δεν αλλάζουν και µπορούν να χρησιµοποιηθούν
για τον ορισµό των αριθµών που αντιστοιχούν στα pin του Arduino:

const int buttonPin = 2; // Ορίζουµε µία σταθερά τύπου Integer (Ακεραίου) µε


//όνοµα buttonPin και της δίνουµε την τιµή 2 µε σκοπό
//να την χρησιµοποιήσουµε παρακάτω στον κώδικα και να
//δηλώσουµε που θα συνδέσουµε το button.

const int ledPin = 13; // Ορίζουµε µία σταθερά τύπου Integer (Ακεραίου) µε
// όνοµα ledPin και της δίνουµε την τιµή 13 µε σκοπό να
// την χρησιµοποιήσουµε παρακάτω στον κώδικα και να
// δηλώσουµε που θα συνδέσουµε το led.

// Παρακάτω έχω µεταβλητές οι οποίες αλλάζουν τιµή κατά την εκτέλεση του προγράµµατος

int buttonState = 0; //Ορίζουµε µία µεταβλητή τύπου ? Integer (Ακεραίου) µε όνοµα


// buttonState και της δίνουµε αρχικά την τιµή 0 µε σκοπό να
// την χρησιµοποιήσουµε παρακάτω στον κώδικα για να
// αποθηκεύουµε την κατάσταση λειτουργίας του button (on-off)

// Ακολουθεί η συνάρτηση αρχικών ρυθµίσεων του µικροελεγκτή

void setup() {
pinMode(ledPin, OUTPUT); // Ορίζουµε χρησιµοποιώντας την µεταβλητή
// ledPin, ότι το pin 13 θα λειτουργεί σαν
// ψηφιακή έξοδος 0-5V

pinMode(buttonPin, INPUT); // Ορίζουµε χρησιµοποιώντας την µεταβλητή


// buttonPin, ότι το pin 2 θα λειτουργεί σαν
// ψηφιακή είσοδος 0-5V
}
// Ακολουθεί η κύρια ρουτίνα του προγράµµατος που εκτελείται συνεχώς
void loop(){
buttonState = digitalRead(buttonPin); // Διαβάζουµε την ψηφιακή τιµή
//που έχει το Pin 2 (εκεί που
//συνδέεται το button) και την
//αποθηκεύουµε στην µεταβλητή
//buttonState
//Στην συνέχεια ελέγχουµε αν το button είναι πατηµένο, αν ναι τότε: άναψε το LED
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); // Βγάλε λογικό 1 (5V)
//στο pin 13, δηλαδή
// άναψε το led
}
else { // αλλιώς: σβήσε το LED
digitalWrite(ledPin, LOW); //Βγάλε λογικό 0 (0V) στο pin 13
}
}

  20  
 

Ο  μικροελεγκτής  «Arduino  Uno»  και  τα  εξωτερικά  «Interrupt»  


Η   υπολογιστική   πλατφόρμα   Arduino   Uno   χρησιμοποιεί   μέχρι   και   δύο   εξωτερικά  
interrupt,  τα  ΙΝΤ0  και  ΙΝΤ1,  τα  οποία  εκ  κατασκευής  είναι  ορισμένα  στις  θύρες  (PIN)  2  
και   3  αντίστοιχα.  Τo  εξωτερικό  interrupt  είναι  ένα  σήμα  που  δέχεται  ο  μικροελεγκτής  
οποιαδήποτε  χρονικά  στιγμή,  για  ένα  γεγονός  το  οποίο  χρειάζεται  άμεση  προσοχή  και  
όταν   ένα   interrupt   ενεργοποιηθεί   ο   μικροελεγκτής   σταματά   οποιαδήποτε   εργασία  
πράττει   και   εκτελεί   την   ρουτίνα   του   interrupt   (interrupt   service   routine).   Μετά   την  
εκτέλεση  της  ρουτίνας  του  interrupt  η  εκτέλεση  του  προγράμματος  συνεχίζει  από  την  
εντολή   στην   οποία   προέκυψε   η   διακοπή.   Τα   interrupt   είναι   πολύ   χρήσιμα   καθώς   μας  
επιτρέπουν   να   εκτελούμε   μια   συνάρτηση   άμεσα   και   ταχύτατα.   Για   να  
χρησιμοποιήσουμε   ένα   εξωτερικό   interrupt   αρκεί   να   χρησιμοποιήσουμε   την  
συνάρτηση   π.χ.   attachInterrupt   στην   οποία   πρέπει   να   δηλώσουμε   τον   αριθμό   του  
interrupt   ,την   συνάρτηση   του   interrupt   και   τον   τρόπο   λειτουργίας   του   interrupt,  
δηλαδή   attachInterrupt   (interrupt,   function_name,   mode).   Προφανώς   στη   θέση   του  
interrupt   επιλέγουμε   ανάμεσα   από   το   INT0   και   INT1,   η   συνάρτηση   του   interrupt  
(interrupt   service   routine)   καλείται   κάθε   φορά   που   ενεργοποιείται   το   interrupt,   δεν  
χρειάζεται  κάποια  παράμετρο  και  δεν  επιστρέφει  τίποτα.  Στη  θέση  του  function_name  
γράφουμε   το   όνομα   της   συνάρτησης   του   interrupt,   ενώ   όσον   αφορά   τον   τρόπο  
λειτουργίας  (mode)  του  interrupt  υπάρχουν  τέσσερις  επιλογές  οι  οποίες  είναι:    

Ø LOW  :  το  interrupt  ενεργοποιείται  όταν  στη  θύρα  (PIN)  που  είναι  συνδεδεμένο  
το  interrupt  υπάρξει  σήμα  LOW.  
Ø CHANGE   :   το   interrupt   ενεργοποιείται   όταν   στη   θύρα   που   είναι   συνδεδεμένο   το  
interrupt  υπάρξει  αλλαγή  sτο  σήμα  οποιαδήποτε  και  αν  είναι  αυτή.  
Ø RISING  :  το  interrupt  ενεργοποιείται  όταν  έχουμε  ανερχόμενο  μέτωπο  δηλαδή,  
όταν   στη   θύρα     που   είναι   συνδεδεμένο   το   interrupt   υπάρξει   σήμα   που  
μετατρέπεται  από  LOW  σε    HIGH.  
Ø FALLING:   το   interrupt   ενεργοποιείται   όταν   έχουμε   κατερχόμενο   μέτωπο  
δηλαδή,  όταν  στη  θύρα  που  είναι  συνδεδεμένο  το  interrupt  υπάρξει  σήμα  που  
μετατρέπεται  από  HIGH  σε  LOW.  

Τέλος,   μέσα   στη   συνάρτηση  του   interrupt   η  συνάρτηση   delay()   δεν   λειτουργεί,   οι   τιμές  
της   εντολής   millis()   δεν   αυξάνονται.     Οι   μεταβλητές   που   χρησιμοποιούνται   μέσα   και  
έξω  από  τη  συνάρτηση  του  interrupt  πρέπει  να  είναι  μορφής  volatile.  
 
Παράδειγμα   χρήσης   των   εξωτερικών   Interrupt   («Interrupt  
Service  Routine»)    
                           Η   χρήση   των   εξωτερικών   Interrupt   («Interrupt   Service   Routine»)   γίνεται  
αντιληπτή   με   το   παρακάτω   παράδειγμα,   με   το   οποίο   το   LED   13,   που   βρίσκεται   πάνω  
στην  υπολογιστική   πλατφόρμα   του   Arduino,  εναλλάσσεται  η  κατάσταση  του  («HIGH-­‐
LOW»)  κάθε  φορά  που  ενεργοποιείται  το  Interrupt  0  (INT0)  .  
// Ακολουθούν η συνάρτηση αρχικών ρυθµίσεων του µικροελεγκτή
int pin = 13; //δήλωση του LED
volatile int state = LOW;//δήλωση της µεταβλητής state

// Ακολουθεί η συνάρτηση αρχικών ρυθµίσεων του µικροελεγκτή


void setup(){
pinMode(pin, OUTPUT); //δήλωση του LED ως έξοδο
attachInterrupt(0, blink, CHANGE); //δήλωση της συνάρτησης του
} //interrupt (INT0)

// Ακολουθεί η κύρια ρουτίνα του προγράµµατος που εκτελείται συνεχώς


void loop(){
digitalWrite(pin, state); //εγγραφή της κατάστασης του LED
}
// Ακολουθεί η Ρουτίνα εξυπηρέτησης της διακοπής
void blink() {
state = !state; //αναστροφή της κατάστασης του LED
}

Παράδειγμα   3:   Άναμμα   και   σβήσιμο   Led   ελεγχόμενο   από   εξωτερικό   button   με   την  
διαδικασία   Interrupt   (Η   διαφορά   με   την   προηγούμενη   περίπτωση   είναι   ότι   πρίν   η  
ενεργοποίηση  γίνεται  μετά  το  loop  ενώ  τώρα  άμεσα  με  την  ενεργοποίηση  της  διακοπής)  

const int LED = 13; // Ορίζουµε µία σταθερά τύπου Integer (Ακεραίου) µε όνοµα
//LED και της δίνουµε την τιµή 13 µε σκοπό να την
//χρησιµοποιήσουµε παρακάτω στον κώδικα και να δηλώσουµε που
// θα συνδέσουµε το led.

const int BUTTON = 2; // Ορίζουµε µία σταθερά τύπου Integer (Ακεραίου) µε όνοµα
// BUTTON και της δίνουµε την τιµή 2 µε σκοπό να την
// χρησιµοποιήσουµε παρακάτω στον κώδικα και να δηλώσουµε
// που θα συνδέσουµε το button.

// Ακολουθεί η συνάρτηση αρχικών ρυθµίσεων του µικροελεγκτή


void setup () {
pinMode (LED, OUTPUT); // Ορίζουµε χρησιµοποιώντας την µεταβλητή LED,
// ότι το pin 13 θα λειτουργεί σαν ψηφιακή
// έξοδος 0-5V
digitalWrite (BUTTON, HIGH); // internal pull-up resistor
// Ορίζουµε χρησιµοποιώντας την µεταβλητή
// BUTTON, ότι το pin 2
// θα λειτουργεί σαν ψηφιακή είσοδος 0-5V
attachInterrupt (0, ISRpinChange, CHANGE);// Ενεργοποίηση της ρουτίνας
// που θα εξυπηρετεί την
// διακοπή. Η πρώτη παράµετρος
// µε τιµή 0 µας ορίζει την
// πηγή της εξωτερικής διακοπής
// σύµφωνα µε τον παρακάτω
//πίνακα. Η δεύτερη παράµετρος µε
// τιµή ISRpinChange µας ορίζει το
// όνοµα της ρουτίνα εξυπηρέτησης
// της διακοπής ISR που δηµιουργήσαµε
// παραπάνω. Η τρίτη παράµετρος µε
// τιµές LOW, RISING, FALLING, CHANGE µας ορίζει το
// είδος της αλλαγής λογικής στάθµης που ενεργοποιεί
// την διακοπή.
}
// Ακολουθείται η κύρια ρουτίνα του προγράµµατος που εκτελείται συνεχώς

  22  
void loop () {
// Δεν εκτελείται καµία εντολή αρά δεν γίνεται τίποτα και
// περιµένουµε να συµβεί µία διακοπή
}

// Ακολουθεί η Ρουτίνα εξυπηρέτησης της διακοπής


// Interrupt Service Routine (ISR)
// Ακολουθεί η δηµιουργία ρουτίνας εξυπηρέτησης διακοπής µε όνοµα pinChange (µπορεί να
δηλωθεί µετά τις µεταβλητές και πριν την ρουτίνα αρχικών ρυθµίσεων του µικροελεγκτή ή και
µετά την συνάρτηση void loop() όπως κάνουµε εδώ)

void ISRpinChange(){
noInterrupts (); // Απενεργοποίηση των υπόλοιπων διακοπών µε σκοπό
// να µην συµβεί κάποια άλλη διακοπή για όσο χρόνο
// εξυπηρετείται η παρούσα διακοπή. Άν έχουµε µόνο
// µία ISR τότε δεν απαιτείται να γράψουµε αυτήν την
// εντολή. Επίσης µέσα στις ρουτίνες ISR δέν
//επιτρέπεται η χρήση της συνάρτησης delay().
if (digitalRead (BUTTON) == HIGH) // Διαβάζουµε την ψηφιακή τιµή
// που έχει το Pin 2 (εκεί που
// συνδέεται το button) και
// ελέγχουµε αν το button είναι
// πατηµένο, αν ναι τότε
digitalWrite (LED, HIGH); // Βγάλε λογικό 1 (5V) στο pin 13,
// δηλαδή άναψε το led
else digitalWrite (LED, LOW);//Αλλιώς: Βγάλε λογικό 0
//(0V) στο pin 13, δηλαδή σβήσε το led
interrupts (); // Ενεργοποίηση των διακοπών
}

ΑΣΚΗΣΕΙΣ  για  το  μάθημα  (Η  λύση  υπάρχει  σε  διαφάνειες)  

Να  σχεδιάσετε  ένα  σύστημα  το  οποίο  ελέγχει  την  κατάσταση  τριών  διακοπτών  on-­‐off,  
όταν   πατηθεί   ένας   διακόπτης   επαναφοράς   (push-­‐button),   και   εξετάζει   αν   ο  
συνδυασμός  των  παραπάνω  διακοπτών  συμφωνεί  με  αυτόν  ο  οποίος  έχει  αποθηκευτεί  
στον   μικροελεγκτή   του   παραπάνω   συστήματος.   Αν   ο   συνδυασμός   είναι   σωστός,   ένα  
πράσινο  LED  ανάβει  και  ένας  DC  κινητήρας  ξεκινάει  να  περιστρέφεται  για  όσο  χρονικό  
διάστημα   ο   παραπάνω   διακόπτης   επαναφοράς   είναι   πατημένος.   Αν   ο   συνδυασμός   των  
τριών   διακοπτών   είναι   λανθασμένος,   ένα   κόκκινο   LED   ανάβει   ενώ   ταυτόχρονα   μια  
μικρή   σειρήνα   (Buzzer)   ηχεί   για   χρονικό   διάστημα   3sec   και   ταυτόχρονα   απεικονίζεται  
σε   ένα   Display   ο   αύξων   αριθμός   των   αποτυχημένων   προσπαθειών.   Τέλος   όταν  
εισάγεται  ένας  σωστός  συνδυασμός  η  ένδειξη  του  Display  γίνεται  μηδέν.  

  23  
 

 
 
 
 
 
 
ΠΑΡΑΡΤΗΜΑ  Α:    
Βασικές  εντολές  του  Arduino  με  απλά  παραδείγματα  χρήσης  
τους  

  24  
Εντολές  Δομής  Προγράμματος  
 
Ø Εντολή  Void  setup()  
Αυτή  η  εντολή  εκτελείται  μόνο  1  φορά  στην  αρχή  του  προγράμματος  και  αφορά  την  
αρχικοποίηση  των  μεταβλητών  ή  των  ακίδων  (pins)  ως    έξοδοι.  
Παράδειγµα

int buttonPin = 3;

void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}

void loop()
{
// ...
}
 
Ø Εντολή  Void  loop()  
Αυτή  η  εντολή  μας  καθορίζει  τις  εντολές  που  θα  εκτελούνται  συνεχώς  και  όσο  ο  
Arduino  είναι  σε  λειτουργία.  
 
Παραδειγµα

int buttonPin = 3;

void setup()// setup initializes serial and the button pin

{
beginSerial(9600);
pinMode(buttonPin, INPUT);
}

void loop()// loop checks the button pin each time,


// and will send serial if it is pressed

{
if (digitalRead(buttonPin) == HIGH)
serialWrite('H');
else
serialWrite('L');

delay(1000);
}
 
 Εντολές  Ελέγχου  Προγράμματος  
 
Ø Η  εντολή    if  
Αυτή  η  εντολή  χρησιμοποιείται  για  να  τον  έλεγχο  αλήθειας  μιας    αριθμητικής  ή  λογικής  
έκφρασης.    
Παράδειγµα
if (someVariable > 50)
{
// do something here
}
 
Το   πρόγραμμα   θα   ελέγξει   εάν   κάποια   μεταβλητή   έχει   τιμή   πάνω   από   50.   Εάν   η  
έκφραση   μέσα   στην   παρένθεση   είναι   αληθής   τότε   το   πρόγραμμα   θα   εκτελεστεί  
κανονικά  εάν  όχι  δηλαδή,  είναι  ψευδής  το  πρόγραμμα  παρακάμπτει  το  σώμα  εντολών  
της  if  και  εκτελεί  τον  επόμενο  κώδικα.  Ακολουθούν  παραλλαγές  του  τρόπου  εγγραφής  
της  εντολής  if:  
 
if (x > 120) digitalWrite(LEDpin, HIGH);
if (x > 120){ digitalWrite(LEDpin, HIGH); }
if (x > 120){
digitalWrite(LEDpin1, HIGH);
digitalWrite(LEDpin2, HIGH);
}
Σύμβολα  σύγκρισης  και  εκφράσεις    που  μπορούμε  να  χρησιμοποιήσουμε  παρουσιάζο-­‐
νται  παρακάτω:    
 
x == y (το x είναι ίσο µε το y)
x != y (το x δεν είναι ίσο µε το y)
x < y (το x είναι µικρότερο από το y)
x > y (το x είναι µεγαλύτερο από το y)
x <= y (το x είναι µικρότερο η ίσο µε το y)
x >= y (το x µεγαλύτερο η ίσο µε το y)
 
Προσοχή!  
Σε   περίπτωση   που   στο   πρόγραμμα   γράψετε   (x=10)   και   όχι   (x==10)   τότε   το   πρό-­‐
γραμμα  καταχωρεί  στην  μεταβλητή    x  τον  αριθμό  10  και  έτσι  δεν  γίνεται  η  σύγκριση  αν  
το  x  είναι  ίσο  με    τον  αριθμό  10.  
 
Ø Η  εντολή    if/else  
Αυτή   η   εντολή   χρησιμοποιείται   όπως   η   εντολή   if   με   την   διαφορά   ότι   σε   περίπτωση  
που  η  έκφραση  ελέγχου  if  είναι  ψευδής  εκτελείται  το  σώμα  εντολών  που  ακολουθεί  
την  else  και  έπειτα  συνεχίζεται  κανονικά  η  ροή  του  προγράμματος.    
 
Παράδειγµα

if (pinFiveInput < 500) { // σώµα εντολών A }


else {// σώµα εντολών B }
 
Άν  η  έκφραση  ελέγχου  είναι  αληθής  τότε  εκτελείται  το  σώμα  εντολών  Α,  αν  οχι  τότε  
εκτελείται  με  την  εντολή  else  το  σώμα  εντολών  Β.  Μπορούμε  επίσης  να  θέσουμε  και  
πιο  πολλά  τεστ  ταυτόχρονα  χρησιμοποιώντας  την  εντολή  else  if.  
 
Παράδειγµα

if (pinFiveInput < 500) { // do Thing A }


else if (pinFiveInput >= 1000) { // do Thing B }
else { // do Thing C }

Μπορούμε  να  χρησιμοποιεισουμε  την  εντολή  else  if  οσες  φορες  θελουμε.  Οποτε  

  26  
παρατηρούμε  οτι  μπορούμε  να  εκτελέσουμε  απειρία  τεστ  σε  μια  εντολή  εως  οτου  
βρεθεί  αληθής  η  συνθήκη  μας.  
 
Ø Η  εντολή    for  
Η   εντολη   for   χρησιμοποιειται   για   να   κανει   επαναληψη   ενα   block   η   μια   εντολη   η     οποια  
βρισκεται   αναμεσα   σε   {}.Καθε   φορα   που   εκτελειται   μια   φορα   η   εντολη   for  
χρησιμοποιειται  στην  αρχη  μετα  της  επαναληψης  μια  μεταβλητη  που  τη  αυξανει  η  την  
μειωνει  καθε  φορα  εως  οτου  τερματισει  το  loop(block  η  την  εντολη).  
 
Παράδειγµα
// Dim an LED using a PWM pin
int PWMpin = 10; // LED in series with 470 ohm resistor on pin 10

void setup() { // no setup needed }


void loop() {
for (int i=0; i <= 255; i++){
analogWrite(PWMpin, i);
delay(10);
}
}

Καθε   φορα   που   πραγματοποιειται   μια   επαναληψη   η   συνθηκη   i<=255   ελέγχεται   και   εαν  
ειναι   αληθης   τοτε   η   μεταβλητη   μας   i   αυξανεται   κατά   ένα.   Οταν   η   συνθηκη   γινει  
ψευδεις  τοτε  η  επαναληψη    σταματαει.  
 
Παράδειγµα
Πως  μπορουμε  επισης  να  κανουμε  ενα  LED  να  χανει  το  χρωμα  του  σιγα  σιγα.  (fade  out)  
 
void loop()
{
int x = 1;
for (int i = 0; i > -1; i = i + x){
analogWrite(PWMpin, i);
if (i == 255) x = -1; // switch direction at peak
delay(10);
}
}
 
Ø Η  εντολή  switch/case  
Είναι  παρόμοια  με  τη  εντολή  if.  H  switch(συγκρίνει  την  τιμή  μιας  μεταβλητής  var  με  τις  
τιμές  που  ορίζονται  στις  δηλώσεις  case  και  εκτελεί  την  ανάλογη.  Mετά  το  τέλος  κάθε  
εντολής  case  πρέπει  να  ακολουθεί  η  εντολή  break.  
 
Παράδειγµα
 switch (var) {
case 1:
//do something when var equals 1
break;
case 2:
//do something when var equals 2
break;
default:
// if nothing else matches, do the default
// default is optional

  27  
}
 
 
Ø Η  εντολή  while  
Η  εντολή  ελγέγχει  τη    συνθήκη  μέσα  στις  ()  και  αν  είναι  αληθής  εκτελείται  το  σώμα  
εντολών  που  της  αντιστοιχεί.  Πρέπει  επίσης  να  υπάρχει  μια  μεταβλητή  που  να  αυξάνει  
κάθε  φορά  γιατί  αλλιώς  η  εντολή  while  θα  μας  εγκλωβίσει  σε  ένα  ατέρμονα  βρόχο  
επανάλυψης.  
 
Παράδειγµα
var = 0;
while(var < 200){ // do something repetitive 200 times
var++;
}
 
Ø Η  εντολή  do-­‐while  
Κάνει  την  ίδια  λειτουργία  με  την  εντολή  while.  Η  μοναδική  διαφορά  τους  είναι  ότι  
η  συνθήκη  ελέγχεται  στο  τέλος  της  επανάληψης  εξασφαλίζοντας  έτσι  ότι  το  σώμα  
εντολών  θα  εκτελεστεί  τουλάχιστον  μία  φορά.  
 
Παράδειγµα
Do {
delay(50); // wait for sensors to stabilize
x = readSensors(); // check the sensors
} while (x < 100);
 
Ø Η  εντολή  break  
Χρησιμοποιείται  για  να  τερματίσει  την  επανάληψη  εντολών  όπως  do,  for,  while  και  
switch.  
 
Παράδειγµα
for (x = 0; x < 255; x ++)
{
digitalWrite(PWMpin, x);
sens = analogRead(sensorPin);
if (sens > threshold){ // bail out on sensor detect
x = 0;
break;
}
delay(50);
}
 
Ø Η  εντολή  continue  
H  εντολή  αυτή  προσπερνάει  το  υπόλοιπο  της  τρέχουσας  μιας  επανάληψης  (do,  for,  
while)  και  συνεχίζει  ελέγχοντας  τη  συνθήκη  έκφρασης  της  επανάληψης  ώστε  να  γίνουν  
οι  επόμενες  επαναλήψεις.  
 
Παράδειγµα
for (x = 0; x < 255; x ++)
{
if (x > 40 && x < 120){ // create jump in values
continue;

  28  
}

digitalWrite(PWMpin, x);
delay(50);
}
 
Ø Η  εντολή  return  
Τερματίζει  την  λειτουργία  μίας  συνάρτησης  επιστρέφοντας  την  τιμή/μεταβλητή    που  
την  ακολουθεί.  
 
Παράδειγµα
 int checkSensor(){
if (analogRead(0) > 400) { return 1;}
else { return 0;}
}
 
Ø Η  εντολή  #define  
 Αυτή  η  εντολή  σου  δίνει  το  δικαίωμα  να  αντικαταστήσεις  ένα  όνομα  με  μια  μεταβλητή  
κατά  την  διάρκεια  της  μεταγλώττισης  του  προγράμματος.  Όταν  χρησιμοποιούμε  αυτήν  
την  εντολή  δεν  βάζουμε  στο  τέλος  ;  ή  =  .  
 
Παράδειγµα
#define ledPin 3
// The compiler will replace any mention of ledPin with the value 3 at
// compile time.
 
Ø Η  εντολή  #include  
σου  δίνει  το  δικαίωμα  να  εισάγεις  νέες  βιβλιοθήκες.  
 
Λογικοί  τελεστές  
 
Ø Λογικό  ΚΑΙ,  &&  
 
Μπορουν  να  χρησιμοποιηθουν  σε  μια  εντολη  που  περιεχει  το  if.  
 
Παράδειγµα
if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) { // σώµα εντολών }
 
Πρέπει  να  ισχύει  και  το  1ο    και  το  2ο  μέρος  της  συνθήκης  ώστε  να  εκτελεστεί  το  σώμα  
εντολών  μέσα  στα  άγκιστρα.  
 
Ø Λογικό  Ή,  ||  
Μπορούν  να  χρησιμοποιηθούν  σε  μια  εντολή  που  περιείχε  το  if.  
 
Παράδειγµα
if (x > 0 || y > 0) { // σώµα εντολών}
 
Για  να  εκτελεστεί  το  σώμα  εντολών  μέσα  στα  άγκιστρα,  θα  πρέπει  η  το  1ο  μερος  της  
συνθήκης  ελέγχου  να  είναι  αληθές  ή  το2ο  μέρος  να  είναι  αληθές.    

  29  
 
Ø Λογικό  ΟΧΙ,  !  
Μπορούν  να  χρησιμοποιηθούν  σε  μια  εντολή  που  περιείχε  το  if.  Για  να  εκτελεστεί  το  
σώμα  εντολών  μέσα  στα  άγκιστρα  θα  πρέπει  η  μεταβλητή  ελέγχου  x  να  ειναι  ψευδης.  
 
Παράδειγµα
if (!x) { // σώµα εντολών }
 

  30  

You might also like