Δρ. Π. Ασβεστάς Τμήμα Μηχανικών Βιοϊατρικής Τεχνολογίας Τ.Ε

Σχετικά έγγραφα
ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ

Πλακέτα Arduino. 1ο ΕΠΑΛ Περάματος - 7ο ΕΚ Πειραιά

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Εφαρμογές Σειριακής Επικοινωνίας

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017)

ΣΤΟΙΧΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ARDUINO

Εφαρμογές Αναλογικών Ε/Ε PWM (pulse Width Modulation)

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα

ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO. Υποψήφιος Διδάκτωρ

ΕΝΟΤΗΤΑ 5 Αναλογικά σήματα

Γνωριμία με το Arduino

Εφαρμογές αναλογικών / Ψηφιακών

Ενσωματωμένα Συστήματα

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

Arduino Teachers Workshop

Προγραμματισμο ς σε Arduino

Το κύκλωμα σε breadboard

Δομή (Structure) Προγραμματισμός Arduino. Η λειτουργία setup()

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Ενσωµατωµένα Συστήµατα

Εξαμηνιαία Εργασία 2013 Προγραμματίζοντας τον Arduino στη C Μέρος Β : Επικοινωνία Υπολογιστή με Μικροελεγκτή

ΕΝΟΤΗΤΑ 3 ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ

ΕΡΓΑΣΤΗΡΙΟ 6 ΟΔΗΓΗΣΗ ΑΠΕΙΚΟΝΙΣΕΩΝ SSD ΚΑΙ LCD

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 1. Arduino + LabVIEW: Μέτρηση Έντασης Φωτός με Φωτοαντίσταση. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Φύλλο εργασίας 6 - Θερμόμετρο εξωτερικού χώρου. Το κύκλωμα σε breadboard

Ενσωματωμένα Συστήματα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία

Φύλλο εργασίας 9 - Αυτόνομο ρομποτικό όχημα αποφυγής εμποδίων

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ

FOSSCOMM ο Συνέδριο Κοινοτήτων Ανοιχτού Λογισμικού Σάββατο 20 Απριλίου Ομάδα Σχολής Ικάρων Εργαστήριο Arduino

Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 1. Προγραμματισμός Φυσικών Συστημάτων. Νέα Ψηφιακά Αντικείμενα

ΕΝΟΤΗΤΑ 12 ΣΕΙΡΙΑΚΗ ΔΙΕΠΑΦΗ

Τεχνολογικό+Eκπαιδευτικό+Ίδρυμα+Kρήτης+ TMHMA+MHXANOΛOΓIAΣ+ (

1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Βιβλιοθήκη για οθόνη LCD

1ο ΕΠΑΛ Περάματος -7ο ΕΚ Πειραιά. Εφαρμογές Arduino. Σεμινάριο Ηλεκτρονικού Τομέα. Φεβρουάριος 2014

Μέτρηση Θερμοκρασίας με τον αισθητήρα TMP36. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων. Βασική δομή ενός προγράμματος στο LabVIEW.

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

Φύλλο εργασίας 3 - Χριστουγεννιάτικα φωτάκια (σταδιακή αύξηση και μείωση φωτεινότητας ενός LED) Το κύκλωμα σε breadboard

Συλλογή & Επεξεργασία Δεδομένων. Προγραμματίζοντας τον Arduino Μέρος Ι: Μεταβλητές, Εντολές Εισόδου & Εξόδου. Ολοκληρωμένο Περιβάλλον Ανάπτυξης (IDE)

Project 5: Συνθέτοντας μουσική

ΔΡΑΣΤΗΡΙΟΤΗΤΑ ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO- 01a

2017 Κατασκευάζω και Προγραμματίζω με τον μικροελεγκτή Arduino

Έλεγχος κινητήρα συνεχούς ρεύματος με τρανζίστορ και Arduino

Παραδείγµατα χρήσης του µικροελεγκτή Arduino Εφαρµογές για το εργαστήριο Μέρος 2 ο :Οδήγηση Κινητήρων DC(PM)

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Μ.Π.Σ. «ΠΡΟΗΓΜΕΝΕΣ ΜΕΘΟΔΟΙ ΚΑΤΑΣΚΕΥΗΣ ΠΡΟΙΟΝΤΩΝ ΑΠΟ ΞΥΛΟ» Μάθημα: Σχεδίαση και Εφαρμογές Διαδραστικών Συστημάτων. Διδάσκοντας: Α.

Προγραμματισμός Ρομπότ

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Φύλλο εργασίας 4 - Αυτόματο φωτάκι νυκτός

ΕΝΟΤΗΤΑ 10: ΟΔΗΓΗΣΗ ΚΙΝΗΤΗΡΩΝ

Εξαμηνιαία Εργασία 2013 Προγραμματίζοντας τον Arduino στη C Μέρος Α : Υλικά

«ΥΛΟΠΟΙΗΣΗ ΑΣΥΡΜΑΤΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΧΡΗΣΗ ΜΙΚΡΟΕΛΕΓΚΤΩΝ» ΒΥΣΑΝΣΙΩΤΗΣ ΣΤΑΥΡΟΣ Α.Μ ΚΑΡΒΟΥΝΙΔΟΥ ΑΓΓΕΛΙΚΗ Α.Μ

για τις ρυθμίσεις LabView μέσα από το κανάλι και του καλωδίου USB.

Εμμανουήλ Πουλάκης. Προγραμματίζοντας με τον μικροελεγκτή Arduino

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ

Παραδείγµατα χρήσης του µικροελεγκτή Arduino Εφαρµογές για το εργαστήριο Μέρος 1 ο

Φύλλο εργασίας 7 - Δημιουργώ τα δικά μου χρώματα με το RGB LED

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

2. Δήλωση μεταβλητών. #include <avr/io.h> #include <util/delay.h> unsigned char i=0xa0; register unsigned char i asm("r3");

Αντικειμενοστρεφής Προγραμματισμός

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

Κωνσταντίνος Γκαλονάκης. Arduino: Προγραμματισμός στην πράξη

ΕΛΕΓΧΟΣ ΑΝΤΛΙΟΣΤΑΣΙΟΥ ΜΕ ΔΕΞΑΜΕΝΗ ΜΕΣΩ GSM CHECK IN TANK PUMPING THROUGH GSM

ΜΙΚΡΟΕΛΕΓΚΤΗΣ PICAXE 18M2

Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια

ΕΝΟΤΗΤΑ 6 LCD ΟΘΟΝΕΣ

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή:

Σκοπός. Προγραμματίζοντας τον Arduino ΙΙ Εντολή Εκχώρησης & Εντολές. Συλλογή & Επεξεργασία Δεδομένων. Πρόγραμμα. Εντολές Επεξεργασίας Δεδομένων

ΠΛΗΡΟΦΟΡΙΚH ΓΙΑ ΤΗΝ ΤEΧΝΗ Η ΕΞAΜΗΝΟ

Μάθημα 2 Δραστηριότητα 2: Δημιουργώντας το Μετεωρολογικό Σταθμό. Επανεξέταση των βασικών εννοιών της C και του προγραμματισμού.

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 3 Μέτρηση Θερμοκρασίας Σύστημα Ελέγχου Θερμοκρασίας. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

12. Διακοπές Interrupts (IRQ)

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Arduino. δουλεύοντας με το... Υλικό αναφοράς και χρήσης της ανοιχτής πλατφόρμας

Ανάπτυξη και Σχεδίαση Λογισμικού

Η δυναμική του Arduino στο μάθημα της Τεχνολογίας. Φάσουρας Δημήτριος Ηλεκτρολόγος ΠΕ 17,03

10. Πληκτρολόγιο matrix 4x4

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Επιβλέπων Καθηγητής : Μιχάλης Παπουτσιδάκης. Φοιτητές : Λούντζη Αθηνά Α.Μ Ράπτης Ιωάννης Α.Μ 33823

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

Μάθημα 1 ΑΙΣΘΗΤΗΡΕΣ Ο Αισθητήρας Δύναμης. Επανεξέταση των βασικών εννοιών της C και του προγραμματισμού.

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Δεδομένα, τελεστές, είσοδος/έξοδος

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Α. Βασική Χρήση κινητήρα - Servo με τη βιβλιοθήκη <Servo.h>

10. Πληκτρολόγιο matrix 4x4

Α.Ε.Ι. ΠΕΙΡΑΙΑ Τ.Τ Φεβρουάριος 2017

Αντικειµενοστρεφής Προγραµµατισµός

Transcript:

Ιατρικά Ηλεκτρονικά Δρ. Π. Ασβεστάς Τμήμα Μηχανικών Βιοϊατρικής Τεχνολογίας Τ.Ε Βιβλιογραφία B. Evans, Beginning Arduino Programming, 2011. J. Purdum, Beginning C for Arduino,Apress,2012. M. Margolis, Arduino Cookbook, 2 nd Edition, O Reilly Media Inc., 2012. S. Monk, Programming Arduino Next Steps: Going Further with Sketches, McGraw Hill Education, 2014. 2 1

Arduino Γενικά Το Arduino είναι μια πλατφόρμα «ανοικτού κώδικα» βασισμένη σε ευέλικτο και εύκολο στη χρήση υλικό (hardware) και λογισμικό (software) που προορίζεται για οποιονδήποτε έχει προγραμματιστική εμπειρία, γνώσεις ηλεκτρονικών και ενδιαφέρεται να δημιουργήσει διαδραστικά αντικείμενα ή περιβάλλοντα. Η ανάπτυξη του Arduino ξεκίνησε το 2005 στην Ιταλία από τους Gianluca Martino, Massimo Banzi, και David Cuartielles με σκοπό να χρησιμοποιηθεί σε σχολικές εργασίες για την εκμάθηση ηλεκτρονικών συστημάτων. Με το πέρασμα του χρόνου όμως έγινε ένα χρήσιμο και οικονομικό εργαλείο για όλους τους ηλεκτρονικούς. 3 Arduino Γενικά Στην ουσία, πρόκειται για ένα ηλεκτρονικό κύκλωμα που βασίζεται στο μικροελεγκτή ATmega της Atmel και του οποίου όλα τα σχέδια, καθώς και το λογισμικό που χρειάζεται για τη λειτουργία του, διανέμονται ελεύθερα ώστε να μπορεί να κατασκευαστεί από τον καθένα. Αφού κατασκευαστεί, μπορεί να συμπεριφερθεί ως ένας μικρού μεγέθους υπολογιστής, αφού ο χρήστης μπορεί να συνδέσει επάνω του πολλαπλές μονάδες εισόδου/εξόδου και να προγραμματίσει το μικροελεγκτή να δέχεται δεδομένα από τις μονάδες εισόδου, να τα επεξεργάζεται και να στέλνει κατάλληλες εντολές στις μονάδες εξόδου 4 2

Arduino Γενικά Πλεονεκτήματα: Φθηνό (<25 ). Μπορεί να προγραμματιστεί σε διάφορα λειτουργικά συστήματα (Windows, Macintosh OSX, Linux). Απλό, ξεκάθαρο προγραμματιστικό περιβάλλον. Ανοιχτού υλικού το οποίο μπορεί να επεκταθεί. Ανοιχτού λογισμικού που επεκτείνεται και παραμετροποιείται. 5 Arduino Uno 6 3

Άλλες εκδόσεις Arduino Arduino Mega ADK Arduino Ethernet Arduino Nano 7 Arduino Yun Επεκτάσεις (Shields) Arduino Arduino GSM Shield Arduino WiFi Shield 8 Arduino Motor Shield Arduino Ethernet Shield 4

Arduino Uno Τροφοδοσία Ητροφοδοσίαμπορεί να γίνει από: υπολογιστή μέσω θύρας USB την υποδοχή εξωτερική τροφοδοσίας. Οι προτεινόμενες τιμές της τάσης εισόδου είναι 7 12V. Οι μέγιστες τιμές είναι 6 20V 9 Arduino Uno Τροφοδοσία Το Arduino παρέχει μέσω ειδικών ακροδεκτών : Τάση 5V Τάση 3,3V Γη (GND) O ακροδέκτης Vin παρέχει την εξωτερική τάση τροφοδοσίας. Επίσης μπορεί να χρησιμοποιηθεί για εισαγωγή εξωτερικής τροφοδοσίας στο Arduino. 10 5

Arduino UNO Μικροελεγκτής 13 Arduino UNO Μικροελεγκτής Το Arduino Uno φέρει τον μικροελεγκτή AΤmega328P της εταιρείας Atmel, ο οποίος έχει τα ακόλουθα χαρακτηριστικά: Επεξεργαστής: 8bit AVR Μέγιστη συχνότητα λειτουργίας: 20ΜHz Μνήμη Flash: διατηρήσιμη μνήμη μνήμη 32 KBytes. ΜνήμηRAM:μηδιατηρήσιμημνήμη2KBytes Μνήμη EEPROM: διατηρήσιμη μνήμη 1KByte Ενσωματωμένος ADC διακριτικής ανάλυσης 10 bits. 19 ψηφιακές εισόδους/εξόδους, από τις οποίες 6 μπορούν να χρησιμοποιηθούν ως αναλογικές είσοδοι. Τάση λειτουργίας: 5V 14 6

Arduino Uno Αναλογικές είσοδοι 16 Arduino Uno Αναλογικές είσοδοι Οι ακροδέκτες με τη σήμανση (Α0, Α1, Α2, Α3, Α4, Α5) μπορούν να λειτουργήσουν ως αναλογικές είσοδοι, όπου μπορούν να συνδεθούν αισθητήρες. Ο μικροελεγκτής έχει ενσωματωμένο ένα ADC 6 καναλιών με διακριτική ανάλυση 10 bits. To ADC μετατρέπει την αναλογική τάση εισόδου σε μία ακέραια τιμή μεταξύ 0 και 1023. Ητάσηστιςαναλογικέςεισόδουςπρέπειναείναιμεταξύ0Vκαι5 V. Διαφορετικά μπορεί να προκληθεί ζημιά στο ολοκληρωμένο. Εάν μία αναλογική τάση (0V 5V)εφαρμοστείσεκάποια αναλογική είσοδο, τότε αυτή μετατρέπεται αυτόματα στην ακόλουθη ακέραια τιμή: 1023 5 όπου συμβολίζει στρογγυλοποίηση στον πλησιέστερο ακέραιο. 17 7

Arduino Uno Ψηφιακές Είσοδοι / Έξοδοι 18 Arduino Uno Ψηφιακές Είσοδοι / Έξοδοι Το AΤmega328P περιλαμβάνει 14 ακροδέκτες (με την σήμανση 0 13) που μπορούν να λειτουργήσουν ως ψηφιακές είσοδοι/έξοδοι, οι οποίες παράγουν ή δέχονται ψηφιακά σήματα: 0Vγιατολογικό0 5Vγιατολογικό1 Το εάν ένας ακροδέκτης θα λειτουργήσει ως ψηφιακή είσοδος ή έξοδος καθορίζεται κατά τον προγραμματισμό του μικροελεγκτή. Όταν ένας ακροδέκτης λειτουργεί ως ψηφιακή είσοδος, παρουσιάζει υψηλή αντίσταση (100 MΩ), με αποτέλεσμα να «τραβάει» ελάχιστο ρεύμα. 19 8

Arduino Uno Ψηφιακές Είσοδοι / Έξοδοι Εάν σε έναν ακροδέκτη που λειτουργεί ως είσοδος δεν έχει συνδεθεί εξωτερικό κύκλωμα, ο μικροελεγκτής θα συλλέγει τυχαίες τιμές λόγω ηλεκτρικού θορύβου του περιβάλλοντος. Στην περίπτωση αυτή, καλό είναι να προκαθορίζεται μία συγκεκριμένη τάση για τον ακροδέκτη. Αυτό επιτυγχάνεται με ενεργοποίηση των ενσωματωμένων pull up αντιστάσεων 20 kω, οι οποίες συνδέουν τον ακροδέκτη με την τάση τροφοδοσίας 5 V. Οπότε όταν δεν έχει συνδεθεί εξωτερικό κύκλωμα ο μικροελεγκτής θα δέχεται ως είσοδο 5 V στον συγκεκριμένο ακροδέκτη. 20 Arduino Uno Ψηφιακές Είσοδοι / Έξοδοι Όταν ένας ακροδέκτης οριστεί να λειτουργεί ως έξοδος, τότε παρουσιάζει χαμηλή αντίσταση, ώστε να μπορεί δώσει (θετικό ή αρνητικό) ρεύμα μέχρι 40 ma σε άλλα συνδεδεμένα κυκλώματα. Το ρεύμα επαρκεί για την ενεργοποίηση ενός LED, αλλά δεν είναι αρκετό για την ενεργοποίηση ρελέ ή κινητήρα. Εάν συνδεθούν κυκλώματα με υψηλή απαίτηση σε ρεύμα υπάρχει ο κίνδυνος να καταστραφεί ο ακροδέκτης (αλλά όχι ολόκληρος ο μικροελεγκτής). Είναι καλή πρακτική, να συνδέεται μία αντίσταση 470 Ω ή 1 kω για περιορισμό του ρεύματος. 21 9

Arduino Uno Διαμόρφωση Πλάτους Παλμών Θύρες PWM 22 Arduino Uno Διαμόρφωση Πλάτους Παλμών Το AΤmega328P δεν παράγει απευθείας αναλογικές τάσεις. Παρόλα αυτά μπορεί να χρησιμοποιηθεί για παράδειγμα για τον έλεγχο κινητήρων ή οποιασδήποτε συσκευής που απαιτεί μία αναλογική τάση. Για το σκοπό αυτό, χρησιμοποιούνται οι ψηφιακές είσοδοι/έξοδοι με την ένδειξη PWM, οι οποίες μπορούν να παράγουν μια παλμοσειρά συχνότητα 500Hz περίπου, η μέση τιμή της οποίας ισούται με την επιθυμητή αναλογική τιμή. Για παράδειγμα, έστω ότι επιθυμείται να προσομοιωθεί η αναλογική τιμή 2,5V. Τότε, ο μικρoελεγκτής θα παράγει μία ακολουθία παλμών 0V 5V με απόσταση μεταξύ δύο διαδοχικών παλμών περίπου 2 ms (1/500 Ηz). O χρόνος που η τάση θα είναι 5V σε κάθε παλμό θα είναι 1 ms. 23 10

Arduino Uno Διαμόρφωση Πλάτους Παλμών Προσομοίωση αναλογικής τάσης 2,5V με χρήση τεχνικής PWM 24 Arduino Uno Διαμόρφωση Πλάτους Παλμών Προσομοίωση αναλογικής τάσης 1V με χρήση τεχνικής PWM 25 11

Arduino Uno Διαμόρφωση Πλάτους Παλμών Προσομοίωση αναλογικής τάσης 4V με χρήση τεχνικής PWM 26 Προγραμματισμός Arduino O προγραμματισμός ενός Arduino γίνεται από υπολογιστή σε γλώσσα C/C++, με χρήση του φερώνυμου ολοκληρωμένου περιβάλλοντος ανάπτυξης (IDE). 27 12

Προγραμματισμός Arduino Το πρόγραμμα (sketch) αποτελείται από δύο συναρτήσεις: void setup ():εκτελείταιμίαφοράκατάτηνεκκίνησητουarduino ή όταν γίνει επαναφορά με πάτημα ειδικού κουμπιού reset. void loop(): εκτελείται ο κώδικας της συνάρτησης εκτελείται συνεχώς ως ένας αέναος βρόγχος. Το πρόγραμμα αποθηκεύεται στη μνήμη Flash, η οποία είναι διατηρήσιμη (non volatile) μνήμη, δηλαδή διατηρεί τα περιεχόμενά της μετά την αφαίρεση τροφοδοσίας το πρόγραμμα φορτώνεται αυτόματα μετά την επανασύνδεση της τροφοδοσίας. Οι μεταβλητές αποθηκεύονται στη μνήμη SRAM, η οποία είναι μη διατηρήσιμη. Μεταβλητές μπορεί να αποθηκευθούν στη μνήμη EEPROM, η οποία διατηρεί το περιεχόμενό της. 28 Εισαγωγή στη C για Arduino Τύποι δεδομένων και Μεταβλητές Τύποςδεδομένων Μήκοςσε bytes Εύροςτιμών boolean 1 True ή false char 1 128 έως 127 unsigned char 1 0 έως 255 byte 1 0 έως 255 int 2 32.768 έως 32.767 unsigned int 2 0 έως 65.535 word 2 0 έως 65.535 long 4 2.147.483.648 έως 2.147.483.647 unsigned long 4 0 έως 4.294.967.295 float 4 3,4028235E+38 έως 3,4028235E+38 double 4 3,4028235E+38 έως 3,4028235E+38 29 13

Εισαγωγή στη C για Arduino Τύποι δεδομένων και Μεταβλητές Τύποςδεδομένων Μήκοςσε bytes Εύροςτιμών String Μη προκαθαρισμένο Συμβολοσειρά χαρακτήρων array Μη προκαθαρισμένο Πίνακας τιμών void 0 Χρησιμοποιείται για να υποδηλώσει ότι μία συνάρτηση δεν επιστρέφει κάποια τιμή 30 Εισαγωγή στη C για Arduino Τύποι δεδομένων και Μεταβλητές /* ΠΑΡΑΔΕΙΓΜΑΤΑ ΔΗΛΩΣΗΣ ΜΕΤΑΒΛΗΤΩΝ */ int i; // Δήλωση ακέραιας μεταβλητής 2 bytes int j = 5; // Δήλωση ακέραιας μεταβλητής και αρχικοποίηση // Δήλωση ακέραιας μεταβλητής χωρίς πρόσημο 4 bytes unsigned long time; // Δήλωση μεταβλητής κινητής υποδιαστολής και αρχικοποίηση float x = 5.2; 31 14

Εισαγωγή στη C για Arduino Εμβέλεια μεταβλητών Οι μεταβλητές μπορεί να είναι : Τοπικές (local): ορίζονται μέσα σε μία συνάρτηση και είναι γνωστές μόνο μέσα σε αυτή. Καθολικές (global): ορίζονται εκτός συνάρτησης και είναι γνωστές σε κάθε συνάρτηση. int gpwmval; // "Ορατή" από κάθε συνάρτηση void setup() //... void loop() int i; // Η μεταβλητή i είναι "ορατή" μόνο μέσα στη "loop" float f; // Η μεταβλητή f είναι "ορατή" μόνο μέσα στη "loop" //... for (int j = 0; j <100; j++) // Η μεταβλητή j είναι προσβάσιμη μόνο μέσα στα άγκιστρα του βρόχου for 32 Εισαγωγή στη C για Arduino Στατικές μεταβλητές Μία ειδική κατηγορία τοπικών μεταβλητών είναι οι στατικές (static) μεταβλητές, οι οποίες διατηρούν τις τιμές τους ανάμεσα στις κλήσεις της συνάρτησης που ορίζονται. void loop() int value = analogread(a0); float filteredvalue = filter(value); float filter(int x) static float y = 0; // Στατική μεταβλητή με αρχική τιμή 0 // Η y διατηρεί την τιμή της από την προηγούμενη κλήση της συνάρτησης y = 0.05*y + 0.95*x; return y; 33 15

Εισαγωγή στη C για Arduino Σταθερές Οι σταθερές είναι μεταβλητές μόνο για ανάγνωση (readonly), δηλαδή άπαξ και οριστούν δεν μπορεί να αλλαχθεί η τιμή τους. Μπορεί να οριστούν με δύο τρόπους: Με χρήση #define Με χρήση της προσδιοριστικού const. #define ledpin 3 const float pi = 3.14; float x; void setup() x = pi * 2; // Σωστό pinmode(ledpin, OUTPUT); // Σωστό pi = 7; // Σφάλμα. Δεν μπορεί να αλλαχθεί η τιμή σταθεράς 34 Εισαγωγή στη C για Arduino Πίνακες Ένας πίνακας είναι μία συλλογή μεταβλητών οι οποίες είναι προσπελάσιμες μέσω ενός αριθμητικού δείκτη. Η δήλωση ενός πίνακα μπορεί να γίνει όπως φαίνεται στο επόμενο παράδειγμα int myints[6]; // Δήλωση πίνακα 6 στοιχείων int mysensvals[6] = 2, 4, -8, 3, 2; // Δήλωση πίνακα 6 στοιχείων // και αρχικοποίηση int mypins[] = 2, 4, 8, 3, 6; // Δήλωση πίνακα 5 στοιχείων // χωρίς να καθορίζεται ρητά το μέγεθος char message[6] = "hello"; // Δήλωση και αρχικοποίηση Η προσπέλαση ενός στοιχείου το πίνακα γίνεται χρησιμοποιώντας τετραγωνικές αγκύλες (π.χ. myints[3]) Η αρίθμηση των στοιχείων ενός πίνακα ξεκινάει από το 0. Επομένως, στο προηγούμενο παράδειγμα το mypins[0] έχει την τιμή 2, το mysensval[2] έχει την τιμή 8 κ.ο.κ. 35 16

Εισαγωγή στη C για Arduino Συναρτήσεις Οι συναρτήσεις είναι επαναχρησιμοποιήσιμα τμήματα κώδικα που επιτελούν συγκεκριμένες λειτουργίες. Μία συνάρτηση μπορεί να δέχεται ορίσματα εισόδου και να επιστρέφει ή όχι κάποια τιμή. /* Παράδειγμα συνάρτησης Υπάρχουν δύο παράμετροι εισόδου, οι οποίες είναι ακέραιες. Η συνάρτηση επιστρέφει μία ακέραια τιμή. */ int Add(int x, int y) int result; result = x +y; return result; 36 Εισαγωγή στη C για Arduino Συναρτήσεις Οι συναρτήσεις είναι επαναχρησιμοποιήσιμα τμήματα κώδικα που επιτελούν συγκεκριμένες λειτουργίες. Μία συνάρτηση μπορεί να δέχεται ορίσματα εισόδου και να επιστρέφει κάποια τιμή. /* Παράδειγμα συνάρτησης Δεν υπάρχουν παράμετροι εισόδου. Η συνάρτηση επιστρέφει μία ακέραια τιμή. */ int ReadSens_and_Condition() int i; int sval = 0; for (i = 0; i < 5; i++) sval = sval + analogread(0); // sensor on analog pin 0 sval = sval / 5; // average sval = sval / 4; // scale to 8 bits (0-255) sval = 255 - sval; // invert output return sval; 37 17

Εισαγωγή στη C για Arduino Συναρτήσεις Οι συναρτήσεις καλούνται δίνοντας τιμές στις παραμέτρους της (εάν υπάρχουν) και αναθέτοντας την τιμή που επιστρέφει (εάν υπάρχει) σε κάποια μεταβλητή. void loop int i = 2; int j = 3; int k; k = Add(i, j); int sens; sens = ReadSens_and_Condition(); 38 Εισαγωγή στη C για Arduino Μαθηματικές Συναρτήσεις Όνομα συνάρτησης sin(rad) cos(rad) tan(rad) Περιγραφή Παράμετροι Επιστρέφει Υπολογίζει το ημίτονο μίας γωνίας (σε ακτίνια) Υπολογίζει το συνημίτονο μίας γωνίας (σε ακτίνια) Υπολογίζει την εφαπτομένη μίας γωνίας σε ακτίνια rad: η γωνία σε ακτίνια (float) rad: η γωνία σε ακτίνια (float) rad: η γωνία σε ακτίνια (float) το ημίτονο της γωνίας (double) το συνημίτονο της γωνίας (double) η εφαπτομένη της γωνίας (double) 39 18

Εισαγωγή στη C για Arduino Μαθηματικές Συναρτήσεις Όνομα συνάρτησης min(x, y) Περιγραφή Παράμετροι Επιστρέφει Υπολογίζει το ελάχιστο δύο αριθμών x: ο πρώτος αριθμός (οποιοσδήποτε τύπος δεδομένων) y: ο δεύτερος αριθμός (οποιοσδήποτε τύπος δεδομένων) τον μικρότερο από τους δύο αριθμούς 40 Εισαγωγή στη C για Arduino Μαθηματικές Συναρτήσεις Όνομα συνάρτησης max(x, y) Περιγραφή Παράμετροι Επιστρέφει Υπολογίζει το μέγιστο δύο αριθμών x: ο πρώτος αριθμός (οποιοσδήποτε τύπος δεδομένων) y: ο δεύτερος αριθμός (οποιοσδήποτε τύπος δεδομένων) τον μεγαλύτερο από τους δύο αριθμούς 41 19

Εισαγωγή στη C για Arduino Μαθηματικές Συναρτήσεις Όνομα συνάρτηση ς abs(x) pow(base, exponent) sqrt(x) Περιγραφή Παράμετροι Επιστρέφει Υπολογίζει την απόλυτη τιμή ενός αριθμού Υπολογίζει την τιμή ενός αριθμού υψωμένου σε δύναμη Υπολογίζει την τετραγωνική ρίζα ενός αριθμού x: ο αριθμός xεάν x 0 x εάν x<0 base: ο αριθμός (float) exponent: η δύναμη στην οποία θα γίνει η ύψωση (float) x: ο αριθμός (οποιοσδήποτε τύπος δεδομένων) Το αποτέλεσμα της ύψωσης σε δύναμη (double) την τετραγωνική ρίζα του αριθμού 42 Εισαγωγή στη C για Arduino Μαθηματικές Συναρτήσεις Όνομα συνάρτησης constrain(x,a,b) Περιγραφή Παράμετροι Επιστρέφει Περιορίζει έναν αριθμό σε συγκεκριμένο εύρος τιμών x: ο αριθμός (οποιοσδήποτε τύπος δεδομένων) a: το κάτω όριο του εύρους τιμών (οποιοσδήποτε τύπος δεδομένων) b: το άνω όριο του εύρους τιμών (οποιοσδήποτε τύπος δεδομένων) x, εάν x μεταξύ a και b a, εάν x μικρότερο από a b, εάν x μεγαλύτερο από b 43 20

Εισαγωγή στη C για Arduino Μαθηματικές Συναρτήσεις Όνομα συνάρτη σης map(valu e, fromlow, fromhigh, tolow, tohigh) Περιγραφή Παράμετροι Επιστρέφει Μετασχηματίζει μία τιμή από ένα εύρος τιμών σε ένα άλλο. value: η τιμή που θα μετασχηματιστεί fromlow:το κάτω όριο του τρέχοντος εύρους τιμών fromhigh: το άνω όριο του τρέχοντος εύρους τιμών tolow:το κάτω όριο του νέου εύρους τιμών tohigh: το άνω όριο του νέου εύρους τιμών tolow, εάν value = fromlow tohigh, εάν value = fromhigh μία τιμή μεταξύ tolow και tohigh διαφορετικά 44 Εισαγωγή στη C για Arduino Συναρτήσεις Χρόνου Όνομα συνάρτη σης millis() micros() Περιγραφή Παράμετροι Επιστρέφει Επιστρέφει το πλήθος των ms που έχουν περάσει από τη στιγμή που το Arduino έχει ξεκινήσει να εκτελεί το τρέχον πρόγραμμα. Η τιμή μηδενίζει μετά από 50 ημέρες. Επιστρέφει το πλήθος των μs που έχουν περάσει από τη στιγμή που το Arduino έχει ξεκινήσει να εκτελεί το τρέχον πρόγραμμα. Η τιμή μηδενίζει μετά από 70 λεπτά. Καμία Καμία Το πλήθος των ms που έχουν περάσει από την εκκίνηση του προγράμματος (unsigned long) Το πλήθος των μs που έχουν περάσει από την εκκίνηση του προγράμματος (unsigned long) 45 21

Εισαγωγή στη C για Arduino Συναρτήσεις Χρόνου Όνομα συνάρτησης Περιγραφή Παράμετροι Επιστρέφει delay(ms) Παύει την εκτέλεση του προγράμματος για ένα χρονικό διάστημα σε msec ms: το πλήθος των msec Τίποτα delayμicroseconds(us) Παύει την εκτέλεση του προγράμματος για ένα χρονικό διάστημα σε μsec us: το πλήθος των μsec Τίποτα 46 Εισαγωγή στη C για Arduino Έλεγχος if // Εάν υπάρχει μία εντολή στο If δεν χρειάζονται αγκύλες if (x > 120) digitalwrite(ledpin, HIGH); if (x > 120) digitalwrite(ledpin, HIGH); // Εάν υπάρχουν περισσότερες εντολές πρέπει να μπουν αγκύλες if (x > 120) digitalwrite(ledpin1, HIGH); digitalwrite(ledpin2, HIGH); if (pinfiveinput < 500) // do Thing A else if (pinfiveinput >= 1000) // do Thing B else // do Thing C 47 22

Εισαγωγή στη C για Arduino Έλεγχος Switch 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 48 Προγραμματισμός Arduino Ψηφιακή είσοδος έξοδος Στο Arduino Uno μία ψηφιακή τιμή μπορεί να έχει δύο στάθμες: HIGH (λογικό 1 ): όταν η τάση είναι μεγαλύτερη από 3V LOW (λογικό 0 ): όταν η τάση είναι μικρότερη από 3V Ηανάγνωσηήεγγραφήψηφιακώντιμώνσεένανακροδέκτη του Arduino γίνεται με χρήση των ακόλουθων συναρτήσεων: pinmode digitalread digitalwrite 49 23

Προγραμματισμός Arduino Ψηφιακή είσοδος έξοδος Συνάρτηση pinmode Περιγραφή: καθορίζει εάν ένα ακροδέκτης θα συμπεριφερθεί ως είσοδος ή ως έξοδος. Σύνταξη: pinmode(pin, mode) Παράμετροι: pin: ο αριθμός του ακροδέκτη που θα ρυθμιστεί mode: ο τρόπος λειτουργίας INPUT: είσοδος OUTPUT: έξοδος INPUT_PULLUP: είσοδος με ενεργοποιημένη την εσωτερική pull up αντίσταση Δεν επιστρέφει κάποια τιμή 50 Προγραμματισμός Arduino Ψηφιακή έξοδος Συνάρτηση digitalwrite Περιγραφή: εγγραφή HIGH (5V) ή LOW (0V) σε έναν ακροδέκτη. Σύνταξη: digitalwrite(pin, value) Παράμετροι: pin: ο αριθμός του ακροδέκτη που θα εγγραφεί η τιμή value: HIGH ή LOW Δεν επιστρέφει κάποια τιμή Παρατηρήσεις: ο ακροδέκτης πρέπει να ρυθμιστεί ως έξοδος με χρήση της pinmode εάν ο ακροδέκτης έχει ρυθμιστεί ως είσοδος, η digitalwrite θα ενεργοποιήσει (HIGH) ή απενεργοποιήσει (LOW) την εσωτερική pullup αντίσταση 51 24

Προγραμματισμός Arduino Ψηφιακή έξοδος Παράδειγμα: αναβόσβημα ενσωματωμένου LED // Το Arduino έχει ενσωματωμένο LED το οποίο είναι συνδεδεμένο // στον ακροδέκτη 13 void setup() // καθορισμός του ακροδέκτη 13 ως εξόδου. pinmode(13, OUTPUT); // the loop function runs over and over again forever void loop() digitalwrite(13, HIGH); // άναψε το LED (HIGH => 5V) delay(1000); // περίμενε 1 sec digitalwrite(13, LOW); // σβήσε το LED (LOW => 0V) delay(1000); // περίμενε 1 sec 52 Προγραμματισμός Arduino Ψηφιακή έξοδος Παράδειγμα: αναβόσβημα ενσωματωμένου LED 53 25

Προγραμματισμός Arduino Ψηφιακή είσοδος Συνάρτηση digitalread Περιγραφή: ανάγνωση της τιμής ενός ακροδέκτη. Σύνταξη: digitalread(pin) Παράμετροι: pin: ο αριθμός του ακροδέκτη του οποίου θα αναγνωστεί η τιμή Επιστρέφει: HIGH ή LOW 54 Προγραμματισμός Arduino Ψηφιακή είσοδος Παράδειγμα: σβήσιμο LED με push button 55 26

Προγραμματισμός Arduino Ψηφιακή είσοδος Παράδειγμα: σβήσιμο LED με push button const int ledpin = 8; // LED connected to digital pin 8 const int inpin = 7; // pushbutton connected to digital pin 7 int val = 0; // variable to store the read value void setup() pinmode(ledpin, OUTPUT); pinmode(inpin, INPUT_PULLUP); // sets the digital pin 13 as output // sets the digital pin 7 as input void loop() val = digitalread(inpin); digitalwrite(ledpin, val); // read the input pin // sets the LED to the button's value 56 Προγραμματισμός Arduino Ψηφιακή είσοδος Παράδειγμα: σβήσιμο LED με push button 57 27

Προγραμματισμός Arduino Αναλογική είσοδος Συνάρτηση analogread Περιγραφή: ανάγνωση της τιμής ενός ακροδέκτη αναλογικής εισόδου (A0,,A5). Σύνταξη: analogread(pin) Παράμετροι: pin: ο αριθμός του ακροδέκτη του οποίου θα αναγνωστεί η τιμή Επιστρέφει: ακέραια τιμή μεταξύ 0 και 1023 Παρατήρηση: εάν η αναλογική είσοδος δεν είναι συνδεδεμένη σε κάποια τάση, η συνάρτηση θα επιστρέψει τυχαίες τιμές (ανάλογα με τις τιμές των άλλων αναλογικών εισόδων ή πόσο κοντά είναι το τα χέρια στην πλακέτα κ.λπ.) 58 Προγραμματισμός Arduino Αναλογική είσοδος Παράδειγμα: ρύθμιση διάρκειας αναβοσβησίματος LED. 59 28

Προγραμματισμός Arduino Αναλογική είσοδος Παράδειγμα: ρύθμιση διάρκειας αναβοσβησίματος LED. int sensorpin = A0; // select the input pin for the potentiometer int ledpin = 8; // select the pin for the LED int sensorvalue = 0; // variable to store the value coming from the sensor void setup() // declare the ledpin as an OUTPUT: pinmode(ledpin, OUTPUT); void loop() // read the value from the sensor: sensorvalue = analogread(sensorpin); // turn the ledpin on digitalwrite(ledpin, HIGH); // stop the program for <sensorvalue> milliseconds: delay(sensorvalue); // turn the ledpin off: digitalwrite(ledpin, LOW); // stop the program for for <sensorvalue> milliseconds: delay(sensorvalue); 60 Προγραμματισμός Arduino Αναλογική είσοδος Παράδειγμα: ρύθμιση διάρκειας αναβοσβησίματος LED. 61 29

Προγραμματισμός Arduino Αναλογική είσοδος Συνάρτηση analogreference Περιγραφή: ρυθμίζει τη μέγιστη τάση αναφοράς για τον ADC. Σύνταξη: analogreference (type) Παράμετροι: type: αποδεκτές τιμές είναι: DEFAULT: η προεπιλεγμένη τάση αναφοράς (5V) INTERNAL: ενσωματωμένη τάση αναφοράς 1,1V EXTERNAL: εξωτερική τάση αναφοράς (μεταξύ 0 και 5V) η οποία εφαρμόζεται στον ακροδέκτη AREF. Δεν επιστρέφει τίποτα Παρατήρηση: μετά την αλλαγή της τάσης αναφοράς οι πρώτες τιμές που γυρίζει η analogread μπορεί να είναι ανακριβείς. 62 Προγραμματισμός Arduino Αναλογική Έξοδος Συνάρτηση analogwrite Περιγραφή: εγγράφει μία αναλογική τιμή (με χρήση της τεχνικής PWM) σε έναν ακροδέκτη (3, 5, 6, 9, 10, 11). Σύνταξη: analogwrite (pin, value) Παράμετροι: pin: ο αριθμός του ακροδέκτη που θα εγγραφεί η τιμή value: ο κύκλος εργασίας (duty cycle) της παλμοσειράς. Είναι ακέραιος μεταξύ 0 (κύκλος εργασίας 0%) και 255 (κύκλος εργασίας 100%). Δεν επιστρέφει τίποτα 63 30

Προγραμματισμός Arduino Αναλογική Έξοδος Παράδειγμα: ρύθμιση έντασης LED. 64 Προγραμματισμός Arduino Αναλογική Έξοδος Παράδειγμα: ρύθμιση έντασης LED. const int ledpin = 9; // LED connected to digital pin 9 const int analogpin = 0; // potentiometer connected to analog pin 3 int val = 0; // variable to store the read value void setup() pinmode(ledpin, OUTPUT); // sets the pin as output void loop() val = analogread(analogpin); // read the input pin. // Values go from 0 to 1023 int valuetowrite = map(val, 0, 1023, 0, 255); // Map from [0,1023] to // [0,255] analogwrite(ledpin, valuetowrite); // values go from 0 to 255 65 31

Προγραμματισμός Arduino Αναλογική Έξοδος Παράδειγμα: ρύθμιση έντασης LED. 66 Προγραμματισμός Arduino Σειριακή Επικοινωνία Το Arduino Uno υποστηρίζει τη σειριακή επικοινωνία με άλλες συσκευές. Για τον σκοπό αυτόν μπορούν να χρησιμοποιηθούν οι ακροδέκτες 0 (RX) και 1 (ΤΧ) για να συνδεθεί μία συσκευή. Επιπλέον, το Arduino Uno μπορεί να επικοινωνήσει με σειριακό τρόπο με υπολογιστή μέσω της θύρας USB. Με αυτόν τον τρόπο, είναι δυνατό για παράδειγμα να εμφανιστούν οι τιμές από τις αναλογικές εισόδους στην οθόνη του υπολογιστή. 67 32

Προγραμματισμός Arduino Σειριακή Επικοινωνία Η σειριακή επικοινωνία υποστηρίζεται από μία σειρά συναρτήσεων, οι οποίες είναι διαθέσιμες μέσω της κλάσης Serial. Οι πιο συχνά χρησιμοποιούμενες συναρτήσεις της κλάσης Serial είναι οι ακόλουθες: begin print println available read 68 Προγραμματισμός Arduino Σειριακή Επικοινωνία Συνάρτηση begin Περιγραφή: καθορίζει τον ρυθμό μετάδοσης σε bits/sec. Συνήθεις τιμές είναι 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 57600, 115200. Σύνταξη: Serial.begin(speed) Παράμετροι speed: ο ρυθμός μετάδοσης σε bits/sec Δεν επιστρέφει τίποτα 69 33

Προγραμματισμός Arduino Σειριακή Επικοινωνία Αποστολή δεδομένων Συνάρτηση print Περιγραφή: αποστολή δεδομένων με τη μορφή ASCII κειμένου. Κάθε χαρακτήρας αποστέλλεται με την αντίστοιχη ASCII αναπαράσταση. Σύνταξη: Serial.print(val, format) Παράμετροι val: η τιμή προς αποστολή (οποιοσδήποτε τύπος) format: προαιρετική παράμετρος που καθορίζει τη βάση του αριθμητικού συστήματος όταν το val είναι ακέραιος ή το πλήθος των δεκαδικών ψηφίων όταν το val είναι αριθμός κινητής υποδιαστολής Επιστρέφει το πλήθος των bytes που απεστάλησαν Συνάρτηση println: Περιγραφή: όπως η print,αλλά στέλνει και χαρακτήρα αλλαγής γραμμής 70 Προγραμματισμός Arduino Σειριακή Επικοινωνία Αποστολή δεδομένων Παράδειγμα: εκτύπωση τιμών στην οθόνη. 71 34

Προγραμματισμός Arduino Σειριακή Επικοινωνία Αποστολή δεδομένων Παράδειγμα: εκτύπωση τιμών στην οθόνη. const int ledpin = 9; // LED connected to digital pin 9 const int analogpin = 0; // potentiometer connected to analog pin 3 int val = 0; // variable to store the read value void setup() pinmode(ledpin, OUTPUT); Serial.begin(9600); // sets the pin as output void loop() val = analogread(analogpin); // read the input pin. // Values go from 0 to 1023 int valuetowrite = map(val, 0, 1023, 0, 255); // Map from [0,1023] to // [0,255] analogwrite(ledpin, valuetowrite); // values go from 0 to 255 72 Προγραμματισμός Arduino Σειριακή Επικοινωνία Αποστολή δεδομένων Παράδειγμα: εκτύπωση τιμών στην οθόνη. // print the results to the serial monitor: Serial.print("sensor = " ); Serial.print(val); Serial.print("\t output = "); Serial.println(valueToWrite); // wait 100 msec before the next loop delay(100); 73 35

Προγραμματισμός Arduino Σειριακή Επικοινωνία Αποστολή δεδομένων Παράδειγμα: εκτύπωση τιμών στην οθόνη. 74 Προγραμματισμός Arduino Σειριακή Επικοινωνία Ανάγνωση δεδομένων Συνάρτηση available Περιγραφή: δίνει το πλήθος των χαρακτήρων που είναι διαθέσιμοι για ανάγνωση στη σειριακή θύρα. Αφορά σε δεδομένα που έχουν ήδη φθάσει στο Arduino Σύνταξη: Serial. available() Παράμετροι: Καμία Επιστρέφει το πλήθος των bytes που είναι διαθέσιμα για ανάγνωση 75 36

Προγραμματισμός Arduino Σειριακή Επικοινωνία Ανάγνωση δεδομένων Συνάρτηση read Περιγραφή: διαβάζει εισερχόμενα δεδομένα Σύνταξη: Serial. read() Παράμετροι: Καμία Επιστρέφει το πρώτο διαθέσιμο byte για ανάγνωση ή 1 εάν δεν υπάρχουν δεδομένα (τύπος: int) 76 Προγραμματισμός Arduino Σειριακή Επικοινωνία Ανάγνωση δεδομένων Παράδειγμα: Έλεγχος φωτεινότητας LED από πληκτρολόγιο 77 37

Προγραμματισμός Arduino Σειριακή Επικοινωνία Ανάγνωση δεδομένων Παράδειγμα: Έλεγχος φωτεινότητας LED από πληκτρολόγιο const int ledpin = 9; // the pin that the LED is attached to void setup() // initialize the serial communication: Serial.begin(9600); // initialize the ledpin as an output: pinmode(ledpin, OUTPUT); void loop() // check if data has been sent from the computer: if (Serial.available()) // read the most recent byte (which will be from 0 to 255): char ch = Serial.read(); if (isdigit(ch)) // Check if a digit was pressed int brightness = ch - '0'; // Convert to int 78 Προγραμματισμός Arduino Σειριακή Επικοινωνία Ανάγνωση δεδομένων Παράδειγμα: Έλεγχος φωτεινότητας LED από πληκτρολόγιο brightness = map(brightness, 0, 9, 0, 255); // Map to the range [0, 255] // set the brightness of the LED: analogwrite(ledpin, brightness); // Create the "analog" output // Print the current brightness as percentage int p = (100.0*brightness) / 255.0; Serial.print("Brightness = "); Serial.print(p); Serial.println("%"); 79 38

Προγραμματισμός Arduino Σειριακή Επικοινωνία Ανάγνωση δεδομένων Παράδειγμα: Έλεγχος φωτεινότητας LED από πληκτρολόγιο 80 Προγραμματισμός Arduino Διακοπές (Interrupts) Πολλές φορές είναι επιθυμητό να διακόπτεται η ροή εκτέλεσης του προγράμματος ενός μικροελεγκτή και να εκτελεστεί άλλο κομμάτι κώδικα, ως απόκριση σε κάποιο εξωτερικό συμβάν. Αυτό μπορεί να επιτευχθεί με χρήση διακοπών (interrupts). Οι ακροδέκτες 2 και 3 του Arduino Uno μπορούν να προκαλέσουν την εκτέλεση συγκεκριμένου κώδικα (διαφορετικού του κυρίως κώδικα) σε μία από τις ακόλουθες περιπτώσεις: η τάση στους ακροδέκτες είναι χαμηλή. η τάση στους ακροδέκτες αλλάζει κατάσταση (από χαμηλή σε υψηλήήανάποδα). η τάση αυξάνει από χαμηλή σε υψηλή τιμή. η τάση αυξάνει από υψηλή σε χαμηλή. 81 39

Προγραμματισμός Arduino Διακοπές (Interrupts) Συνάρτηση attachinterrupt: Περιγραφή: καθορίζει το όνομα της συνάρτησης που περιέχει τον κώδικα που θα εκτελεστεί όταν συμβεί μία διακοπή Σύνταξη: attachinterrupt(interrupt, ISR, mode) Παράμετροι: interrupt: 0 εάν χρησιμοποιείται ο ακροδέκτης 2 ή 1 εάν χρησιμοποιείται ο ακροδέκτης 3. ISR: το όνομα της συνάρτησης. Η συνάρτηση δεν πρέπει να έχει παραμέτρους και να μην επιστρέφει τιμή mode: καθορίζει πότε ενεργοποιείται η διακοπή LOW: όταν ο ακροδέκτης έχει χαμηλή τάση CHANGE: όταν η τάση του ακροδέκτη αλλάζει τιμή RISING: όταν η τάση του ακροδέκτη αυξάνει FALLING: όταν η τάση του ακροδέκτη μειώνεται Δεν επιστρέφει τιμή 82 Προγραμματισμός Arduino Διακοπές (Interrupts) Παράδειγμα: Αλλαγή κατάστασης LED σε θετικό μέτωπο παλμού 83 40

Προγραμματισμός Arduino Διακοπές (Interrupts) Παράδειγμα: Αλλαγή κατάστασης LED σε θετικό μέτωπο παλμού int pin = 9; // The pin where the led is connected volatile int state = LOW; void setup() pinmode(pin, OUTPUT); // set pin as output // Set pin 2 as interrupt pin // The code is in function blink // Th interrupt is activated at the rising edge of a pulse attachinterrupt(0, blink, RISING); void loop() digitalwrite(pin, state); // write the state void blink() state =!state; // Change state 84 Προγραμματισμός Arduino Διακοπές (Interrupts) Παράδειγμα: Αλλαγή κατάστασης LED σε θετικό μέτωπο παλμού 85 41