ΣΤΟΙΧΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ARDUINO Αντώνιος Καραγεώργος
Βασικά Στοιχεία της Γλώσσας Προγραμματισμού Arduino Constants: HIGH/LOW Ορίζουν το επίπεδο της τάσης εισόδου/εξόδου ενός pin INPUT/OUTPUT Ορίζουν την κατάσταση ενός pin Συναρτήσεις: Ψηφιακή I/Ο: pinmode(pin, mode) Καθορίζει αν ένα pin είναι είσοδος ή έξοδος digitalwrite(pin, value) Αναθέτει μια τιμή (HIGH/LOW) σε ένα pin digitalread(pin) Διαβάζει την τιμή ενός pin (HIGH/LOW) Αναλογική Ι/Ο: analogread(pin) Διαβάζει την τιμή ενός αναλογικού pin (τιμές μεταξύ 0 και 5 volt που μετασχηματίζονται σε τιμές μεταξύ 0 και 1023) Χρόνο: delay(ms) Κάνει παύση της εκτέλεσης ενός προγράμματος για το προκαθορισμένο χρονικό διάστημα (millisecond, 1000 ms = 1 s) * Περισσότερες πληροφορίες: http://www.arduino.cc/en/reference/homepage
Μέθοδοι Arduino void setup() { // εκτελείται μια φορά // ρύθμιση/αρχικοποίηση στοιχείων (αισθητήρων, κινητήρων, κ.α.) void loop() { // εκτελείται επαναλαμβανόμενα // στέλνονται εντολές προς τα στοιχεία
Άσκηση 1 Δημιουργία φωτεινού σηματοδότη με χρήση τριών (3) LED (κόκκινο, πορτοκαλί και πράσινο) τα οποία θα ανάβουν διαδοχικά ως εξής: Το πράσινο για 5 δευτερόλεπτα Το πορτοκαλί για 2 δευτερόλεπτα Το κόκκινο για 4 δευτερόλεπτα Μετά από κάθε περίοδο φωτισμού το κάθε LED θα είναι σβηστό!
Άσκηση 1: Λύση void setup() { pinmode(10, OUTPUT); pinmode(11, OUTPUT); pinmode(12, OUTPUT); void loop() { digitalwrite(10, HIGH); delay(5000); digitalwrite(10, LOW); digitalwrite(11, HIGH); delay (2000); digitalwrite(11, LOW); digitalwrite(12, HIGH); delay (4000); digitalwrite(12, LOW); https://circuits.io/circuits/4593573-traffic-light
Μεταβλητές Οι μεταβλητές αποτελούν μια προσωρινή θέση αποθήκευσης Δήλωση: Τύπος int var = 12 Τιμή Όνομα Ανάθεση Τύποι: Char (χαρακτήρας) Byte Int (ακέραιος) Unsigned int (ακέραιος χωρίς πρόσημο) Long (μεγάλος ακέραιος) Unsigned long (μεγάλος ακέραιος χωρίς πρόσημο) Float (κινητής υποδιαστολής) Double (κινητής υποδιαστολής διπλής ακρίβειας) Boolean (λογικοί)
Άσκηση 2 Τροποποίηση του φωτεινού σηματοδότη της Άσκησης 1 έτσι ώστε: Τα pin των LED όπως και οι χρόνοι να αναπαρίστανται ως μεταβλητές Το πράσινο LED να αναβοσβήνει για συνολικό διάστημα 2 δευτερολέπτων: Πριν σβήσει το κόκκινο LED Πριν ανάψει συνεχόμενα το πράσινο LED
Άσκηση 2: Λύση int greenled=10; int orangeled=11; int redled=12; int greentime=5000; int orangetime=2000; int redtime=4000; int blinktime=2000; void setup() { pinmode(greenled, OUTPUT); pinmode(orangeled, OUTPUT); pinmode(redled, OUTPUT); https://circuits.io/circuits/4963765-traffic-light-ii void loop() { digitalwrite(greenled, HIGH); delay(greentime); digitalwrite(greenled, LOW); digitalwrite(orangeled, HIGH); delay (orangetime); digitalwrite(orangeled, LOW); digitalwrite(redled, HIGH); delay (redtime-blinktime); digitalwrite(greenled, HIGH); delay (blinktime/4); digitalwrite(greenled, LOW); delay (blinktime/4); digitalwrite(greenled, HIGH); delay (blinktime/4); digitalwrite(greenled, LOW); delay (blinktime/4); digitalwrite(redled, LOW);
Συνθήκες Για να λαμβάνονται αποφάσεις στον κώδικα του Arduino χρησιμοποιείται η δήλωση if. Οι δηλώσεις if βασίζονται σε μια ερώτηση σωστού ή λάθους. Δομή: Συνθήκες: Μεγαλύτερο (a>b) if (συνθήκη 1){ //εκτέλεση μιας Α ενέργειας else if (συνθήκη 2){ else{ Μεγαλύτερο ή ίσο (a b) Μικρότερο (a<b) //εκτέλεση μιας Β ενέργειας //εκτέλεση μιας Γ ενέργειας Μικρότερο ή ίσο (a b) Ίσο (a==b) Διαφορετικό (a!=b)
Άσκηση 3 Δημιουργία προγράμματος σύμφωνα με το οποίο θα ανάβει ένα LED όταν είναι πατημένος ένας διακόπτης.
Άσκηση 3: Λύση int led = 8; int button = 9; void setup() { pinmode(led, OUTPUT); pinmode(button, INPUT); void loop() { int var = digitalread(button); if (var==0){ digitalwrite(led, LOW); else{ digitalwrite(led, HIGH); https://circuits.io/circuits/4965597-pushbutton
Λογικοί Τελεστές «Και» ή AND Αν θέλουμε δύο ή περισσότερες συνθήκες σε μια πρόταση να είναι αληθείς χρησιμοποιούμε το λογικό τελεστή «και» Συμβολίζεται με && Παράδειγμα: if ( val1 < 10 && val2 > 20) «Ή» ή OR Αν θέλουμε τουλάχιστον μία από τις συνθήκες σε μια πρόταση να είναι αληθείς χρησιμοποιούμε το λογικό τελεστή «ή» Συμβολίζεται με Παράδειγμα: if ( val1 < 10 val2 > 20)
Άσκηση 4 Δημιουργία προγράμματος σύμφωνα με το οποίο θα ανάβει ένα LED όταν είναι πατημένοι δύο διακόπτες.
Άσκηση 4: Λύση int led = 8; int button1 = 2; int button2 = 3; void setup() { pinmode(led, OUTPUT); pinmode(button1, INPUT); pinmode(button2, INPUT); void loop() { int var1 = digitalread(button1); int var2 = digitalread(button1); if (var1==high && var2==high){ digitalwrite(led, HIGH); else{ digitalwrite(led, LOW); Τι θα τροποποιούσαμε για να ανάβει το LED όταν είναι πατημένος οποιοσδήποτε διακόπτης;
Σειριακή Επικοινωνία Η μεταφορά δεδομένων μεταξύ Arduino και Η/Υ πραγματοποιείται μέσω σειριακής επικοινωνίας. Για την έναρξη της σειριακής επικοινωνίας χρησιμοποιείται ο παρακάτω κώδικας: void setup() { Παράδειγμα: void setup() { Serial.begin(9600); Serial.println( Hello World! ); void loop() { Serial.begin(9600); Ποια η διαφορά; void setup() { Serial.begin(9600); void loop() { Serial.println( Hello World! );
Άσκηση 5 Τροποποίηση του φωτεινού σηματοδότη της Άσκησης 2 έτσι ώστε κάθε φορά που ανάβει ένα νέο LED στην κονσόλα να εμφανίζεται η κατάσταση του σηματοδότη ως εξής: «Πράσινο» όταν είναι αναμμένο το πράσινο LED «Πορτοκαλί» όταν είναι αναμμένο το πορτοκαλί LED «Κόκκινο» όταν είναι αναμμένο το κόκκινο LED «Προειδοποιητικό πράσινο» όταν αναβοσβήνει το πράσινο LED
Άσκηση 5: Λύση int greenled=10; int orangeled=11; int redled=12; int greentime=5000; int orangetime=2000; int redtime=4000; int blinktime=2000; void setup() { pinmode(greenled, OUTPUT); pinmode(orangeled, OUTPUT); pinmode(redled, OUTPUT); Serial.begin(9600); void loop() { digitalwrite(greenled, HIGH); Serial.println( Πράσινο ); delay(greentime); digitalwrite(greenled, LOW); digitalwrite(orangeled, HIGH); Serial.println( Πορτοκαλί ); delay (orangetime); digitalwrite(orangeled, LOW); digitalwrite(redled, HIGH); Serial.println( Κόκκινο ); delay (redtime-blinktime); Serial.println( Προειδοποιητικό πράσινο ); digitalwrite(greenled, HIGH); delay (blinktime/4); digitalwrite(greenled, LOW); delay (blinktime/4); digitalwrite(greenled, HIGH); delay (blinktime/4); digitalwrite(greenled, LOW); delay (blinktime/4); digitalwrite(redled, LOW); https://circuits.io/circuits/4965939-traffic-light-iii
Συμπληρωματική Βιβλιογραφία «Introduction to Arduino: A piece of cake!», A. G. Smith, Εκδόσεις Πανεπιστημίου Πατρών, 2011 (http://www.introtoarduino.com/downloads/introarduinobook.pdf). «Προγραμματίζοντας με τον μικροελεγκτή Arduino», Ε. Πουλάκης, Ηράκλειο, 2015 (http://users.sch.gr/manpoul/docs/arduino/programmingarduino.pdf). «Ανάπτυξη Εφαρμογών με το Arduino: Ένας πλήρης οδηγός για αρχάριους και προχωρημένους», Π. Παπάζογλου, Σ. Π. Λιώνης, Εκδόσεις Τζιόλα, 2015.
Ερωτήσεις;