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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

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

Transcript

1 Προγραμματισμός Arduino Δομή (Structure) Ο κώδικας που φορτώνεται στη μνήμη του Arduino μετά την μετάφρασή του στον υπολογιστή μας, εκτελείται σε δύο φάσεις. Πρώτα εκτελείται η λειτουργία setup() για μία φορά και στη συνέχεια η λειτουργία loop() που επαναλαμβάνεται συνεχώς μέχρι να επανεκκινηθεί το Arduino ή να διακοπεί η λειτουργία του. Ας δούμε τις δυο φάσεις αναλυτικά. Η λειτουργία setup() Η setup() εκτελείται αυτόματα από τον μικροελεγκτή του Arduino μία φορά μετά από: τη μετάφραση του προγράμματος στον υπολογιστή μας και τη φόρτωσή του στη μνήμη του Arduino, την επανεκκίνηση του Arduino όταν πατήσουμε το πλήκτρο reset, και όταν τροφοδοτούμε το Arduino με ρεύμα για πρώτη φορά. Οσες εντολές είναι γραμμένες μέσα στη λειτουργία setup εκτελούνται σε αυτή τη φάση και συνήθως τοποθετούμε εκεί όλες τις εντολές που είναι απαραίτητες για να αρχικοποιήσουμε τον μικροελεγκτή και τις εισόδους και εξόδους των συσκευών που είναι συνδεδεμένες στη διάταξή μας, να δώσουμε αρχικές τιμές στις μεταβλητές που χρησιμοποιεί το πρόγραμμά μας, καθώς και για τη φόρτωση των βιβλιοθηκών που θα χρησιμοποιήσουμε. void setup() pinmode(13, OUTPUT); pinmode(10, INPUT); Αρχικοποιεί το pin 13 σαν εξόδου στο οποίο μπορεί να στείλει τιμές LOW και HIGH η συνάρτηση digitalwrite() και το pin 10 σαν εισόδου από το οποίο μπορεί να εισάγει τιμές η συνάρτηση digitalread(). 7

2 Η λειτουργία loop() Η loop(), και κατά συνέπεια οι εντολές που εμπεριέχει, εκτελείται από τον μικροελεγκτή του Arduino για πρώτη φορά μετά την εκτέλεση της setup() κάθε φορά που συμβαίνει ένα από τα γεγονότα για τα οποία εκτελείται η setup() και στη συνέχεια επαναλαμβανόμενα κάθε φορά που ολοκληρώνεται η εκτέλεσή της. Η loop() επομένως πρέπει να περιέχει εκείνες τις εντολές με τις οποίες θα κατευθύνουμε το Arduino να διαβάζει τις ψηφιακές και αναλογικές εισόδους και να ελέγχει τις εξόδους ψηφιακές και ευροπαλμικές (PWM) που είναι συνδεδεμένες στη διάταξή μας. void loop() digitalwrite(13, HIGH); delay(500); digitalwrite(13, LOW); delay(500); Η λειτουργία loop() στέλνει ένα HIGH στο pin 13 και καθυστερεί για 500msec (μισό δευτερόλεπτο) και στη συνέχεια στέλνει ένα LOW και καθυστερεί άλλα 500msec. Η παραπάνω λειτουργία επαναλαμβάνεται συνεχώς και ατέρμονα όσο λειτουργεί το Arduino. Αν στο pin 13 έχουμε συνδέσει ένα LED, με την εκτέλεση του παραπάνω προγράμματος το LED θα αναβοσβήνει περιοδικά κάθε δευτερόλεπτο. 8

3 Δομές ελέγχου Για την αποτελεσματική λειτουργία του Arduino απαιτείται σε πολλές περιπτώσεις να χρησιμοποιήσουμε δομές ελέγχου με τις οποίες εκτελείται μια ομάδα εντολών εφόσον ισχύει μια δεδομένη συνθήκη ή επαναλαμβάνονται κάποιες εντολές όσο ισχύει ή μέχρι να ισχύσει κάποια συνθήκη. Σε όλες σχεδόν τις συνθήκες είναι απαραίτητη η χρήση ενός συγκριτικού τελεστή μεταξύ των έξι που υπάρχουν. x==y (x ίσο με το y) x!=y (x διάφορο του y) x<y (x μικρότερο από το y) x>y (x μεγαλύτερο από το y) x<=y (x μικρότερο από ή ίσο με το y) x>=y (x μεγαλύτερο από ή ίσο με το y) Προσοχή! Στις εντολές που απαιτούν συνθήκη και χρήση του ==, αν χρησιμοποιηθεί κατά λάθος το μονό ίσο (=) η συνθήκη θα θεωρηθεί αληθής και ταυτόχρονα θα γίνει και αλλαγή της τιμής της μεταβλητής με την τιμή την οποία έχουμε δεξιά του ίσον. Επομένως η εντολή if(x=10)... θα θέσει το x ίσο με 10 και θα εκτελέσει τις εντολές μέσα στις αγκύλες. Πολύ συχνά, χρησιμοποιούμε πιο πολύπλοκες συνθήκες με τη χρήση των λογικών τελεστών: (x<0 && y>=20) αληθής εφόσον ισχύουν ταυτόχρονα και τα δυο (x<0 y>=20) αληθής εφόσον ισχύει τουλάχιστον ένα (!logexp) αληθές αν η τιμή της logexp είναι ψευδής 9

4 if <συνθήκη> Η if χρησιμοποιείται μαζί με κάποια συνθήκη, το αποτέλεσμα της οποίας καθορίζει αν η εντολή ή οι εντολές που περιέχονται στην if θα εκτελεστούν ή όχι. if (SchoolStudents < 100) // θα συμβεί αν η συνθήκη ισχύει Στο παραπάνω παράδειγμα οι εντολές που βρίσκονται ανάμεσα στις αγκύλες θα εκτελεστούν εφόσον η μεταβλητή SchoolStudents έχει τιμή μικρότερη από 100. Οι αγκύλες ομαδοποιούν μία ή περισσότερες εντολές που θα εκτελεστούν αν η συνθήκη είναι αληθής, ενώ αν απαιτείται μόνο μία εντολή δεν είναι απαραίτητες. if (SchoolStudents < 100) digitalwrite(ledpin, HIGH); if (SchoolStudents < 100) digitalwrite(ledpin, HIGH); if (SchoolStudents < 100) digitalwrite(ledpin, HIGH); if (SchoolStudents < 100) digitalwrite(ledpin, HIGH); delay(1000); Στο παράδειγμα οι πρώτες τρεις εντολές είναι ισοδύναμες και έχουν ακριβώς το ίδιο αποτέλεσμα, ενώ η τελευταία απαιτεί οπωσδήποτε τις αγκύλες για να εκτελέσει και τις δυο εντολές. 10

5 if <συνθήκη> else Η συγκεκριμένη μορφή είναι ισχυρότερη της προηγούμενης if, αφού έχει τη δυνατότητα να εκτελέσει μια εντολή ή μια ομάδα εντολών (με τη χρήση αγκυλών) τόσο εφόσον ισχύει η συνθήκη, όσο και όταν δεν ισχύει. if (Degree < 5) // θα συμβεί αν η συνθήκη ισχύει else // θα συμβεί αν η συνθήκη δεν ισχύει Στο παράδειγμα αν η τιμή Degree είναι πράγματι μικρότερη του 5 θα εκτελεστούν μόνο οι εντολές που βρίσκονται ανάμεσα στο πρώτο ζευγάρι αγκυλών. Αν όμως η μεταβλητή Degree είναι μεγαλύτερη από ή ίση με 5μ θα εκτελεστούν μόνο οι εντολές που περιλαμβάνονται στο ζευγάρι αγκυλών μετά την else. Για τις αγκύλες ισχύει ότι και στην if. Εκτός της else μπορούμε να χρησιμοποιήσουμε πολλαπλές συνθήκες στην ίδια δομή με τη χρήση του ζεύγους else if. Αυτές οι εντολές μαζί χρησιμοποιούνται για να περιγράψουν πολλές διαφορετικές τιμές ή διαστήματα τιμών για τα οποία θέλουμε να ελεγχθεί κάποια μεταβλητή ή έκφραση. Μόνο μια ομάδα εντολών θα εκτελεστεί από το σύνολο των if else if else if else. if (Vl < 0) // θα συμβεί αν η Vl είναι μικρότερη από 0 else if (Vl==0) // θα συμβεί αν η Vl είναι μηδέν else // θα συμβεί αν η Vl είναι μεγαλύτερη από 0 Στο παραπάνω παράδειγμα ελέγχεται η τιμή της μεταβλητής Vl και θα εκτελεστεί μόνο μία από τις τρεις ομάδες εντολών, ανάλογα με την τιμή της Vl. 11

6 for (αρχικοποίηση ; συνθήκη ; μεταβολή) Με τη for μπορούμε να επαναλάβουμε μια ομάδα εντολών πολλές φορές. Ο αριθμός των επαναλήψεων εξαρτάται από τη συνθήκη που περιγράφεται μέσα στα ορίσματα. Συνήθως αρχικοποιούμε μια μεταβλητή που στη συνέχεια ελέγχει την δομή της επανάληψης μέχρι να πάψει να ικανοποιείται η συνθήκη. Η μεταβλητή αυτή αυξάνεται ή μειώνεται στην μεταβολή, ενώ εκτελούνται όλες οι εντολές που είναι ανάμεσα στο ζευγάρι των αγκυλών. for(x=0;x<10;x++) // εντολές που επαναλαμβάνεται η εκτέλεσή τους Στο παραπάνω παράδειγμα η μεταβλητή x αρχικοποιείται παίρνοντας την τιμή 0 μόνο την πρώτη φορά που εκτελείται και στη συνέχεια ελέγχεται η συνθήκη x<10. Οσο η συνθήκη αυτή είναι αληθής η εκτέλεση του προγράμματος συνεχίζεται στο εσωτερικό της for που καθορίζεται από τις αγκύλες. Μετά το τέλος της εκτέλεσης αυτών των εντολών εκτελείται και πάλι η for πρώτα αυξάνοντας το x κατά 1 (x++) και μετά ελέγχεται και πάλι η συνθήκη. Αν δεν ισχύει, ο έλεγχος του προγράμματος μεταφέρεται στην πρώτη εντολή μετά τις αγκύλες, ενώ αν ισχύει επαναλαμβάνεται η διαδικασία. Φυσικά, το μέγεθος της αύξησης ή μείωσης της τιμής της μεταβλητής που ελέγχει την επανάληψη μπορεί να είναι διαφορετική από το ένα. Θα πρέπει τότε να δείξουμε ακριβώς πόσο κάνοντας χρήση της x+=2 αν θέλουμε να αυξήσουμε κατά 2 ή άλλη τιμή και αντίστοιχα x-=2 αν θέλουμε να μειώσουμε κατά 2. void setup() pinmode(13,output); void loop() for(int x=0;x<6;x+=2) digitalwrite(13,high); delay(500); digitalwrite(13,low); delay(500); delay(5000); Σε αυτό το παράδειγμα αρχικοποιούμε το pin 13 ως εξόδου (εκεί υπάρχει ενσωματωμένο led που μπορούμε να χρησιμοποιήσουμε) και μέσα στη loop χρησιμοποιούμε τη for που επαναλαμβάνει τις εντολές των αγκυλών τρεις φορές. Η πρώτη επανάληψη εκτελείται για x=0, η δεύτερη για x=2, η τρίτη για x=4 και στη συνέχεια η τιμή του x καθώς αυξάνει κατά δυο γίνεται 6 και δεν ικανοποιείται η συνθήκη με αποτέλεσμα να εξέλθουμε της επαναληπτικής δομής. Πετυχαίνουμε έτσι να αναβοσβήνει το led τρεις φορές με εναλλαγή κάθε μισό δευτερόλεπτο και στη συνέχεια με αναμονή πέντε δευτερολέπτων αρχίζει και πάλι η διαδι- 12

7 κασία από την αρχή. Στην αρχικοποίηση της μεταβλητής x πρέπει να ορίσουμε τον τύπο της (εκτός αν αυτό έχει γίνει προηγουμένως) και έτσι τη δηλώνουμε ακέραια (int). Η for χρησιμοποιείται συχνά όταν θέλουμε να χρησιμοποιήσουμε τα στοιχεία ενός πίνακα (που έχει αριθμήσιμες θέσεις), αλλά και κάθε φορά που πρέπει να επαναλάβουμε ένα σύνολο εντολών για γνωστό αριθμό επαναλήψεων. while (συνθήκη) Η while επαναλαμβάνει ένα σύνολο εντολών που βρίσκονται μέσα σε αγκύλες όσο η συνθήκη είναι αληθής. Οι μεταβλητή ή οι μεταβλητές που χρησιμοποιούνται στη συνθήκη θα πρέπει να αρχικοποιηθούν πριν πρωτοχρησιμοποιηθούν και να αλλάξουν στο εσωτερικό της while ώστε να γίνει η συνθήκη ψευδής και να τερματιστεί η while. Αν κάτι τέτοιο δε συμβεί οι εντολές της while θα επαναλαμβάνονται ατέρμονα. Αν την πρώτη φορά που επιχειρείται να εκτελεστεί η while, η συνθήκη είναι ψευδής, δε θα εκτελεστούν καθόλου οι εντολές της επανάληψης. Η while χρησιμοποιείται συνήθως για να παίρνουμε την τιμή ενός αισθητήρα μέχρι να συμβεί κάποια αλλαγή που θα μας επιτρέψει να τερματιστεί. int vl=1; while (vl<100) // εντολές που επαναλαμβάνεται η εκτέλεσή τους vl++; Στο παράδειγμα αρχικοποιούμε την ακέραια μεταβλητή vl με τιμή 1 και ξεκινά η εκτέλεση των εντολών που βρίσκονται στο εσωτερικό της while εφόσον η συνθήκη είναι αληθής. Μετά το τέλος τους, ελέγχεται και πάλι η συνθήκη και αν ισχύει ξαναεκτελούνται, ενώ αν δεν ισχύει ολοκληρώνεται η εκτέλεση της while και των εντολών που περιλαμβάνει και η εκτέλεση του προγράμματος συνεχίζεται με τις εντολές μετά τις αγκύλες της while. Στο εσωτερικό της while θα πρέπει να μεταβληθεί η τιμή της vl (vl++) ώστε να ολοκληρωθεί μετά από ένα πεπερασμένο αριθμό επαναλήψεων. 13

8 do while (συνθήκη) Η do while επαναλαμβάνει ένα σύνολο εντολών με τον ίδιο τρόπο που το κάνει και η while, όμως ο έλεγχος γίνεται στο τέλος της δομής, γι αυτό και οι εντολές επανάληψης εκτελούνται οπωσδήποτε μια φορά. do // εντολές που επαναλαμβάνεται η εκτέλεσή τους while (vl<100) Στο παραπάνω παράδειγμα οι εντολές που βρίσκονται ανάμεσα στο do και το while εκτελούνται οπωσδήποτε μια φορά πριν ελεγχθεί η τιμή της μεταβλητής vl. Θα πρέπει στο εσωτερικό της επανάληψης η τιμή της vl να μεταβάλλεται με κάποιο τρόπο αν θέλουμε να εξέλθουμε από τη δομή. break Η break χρησιμοποιείται για να βγούμε από μια επανάληψη for, while ή do while παρακάμπτοντας τη συνθήκη ελέγχου της δομής. for(x=0;x<100;x++) digitalwrite(pwmpin, x); sens=analogread(sensorpin); if (sens>threshold) // Έξοδος αν ο αισθητήρας ανιχνεύσει συμβάν x=0; break; delay(50); Στο παραπάνω παράδειγμα θα γίνει έλεγχος της τιμής ενός αισθητήρα 100 φορές ανά 0,05 δευτερόλεπτα. Αν όμως η τιμή του αισθητήρα είναι πάνω από ένα όριο, θα γίνει διακοπή αυτής της διαδικασίας και θα εκτελεστεί το πρόγραμμα μετά τις αγκύλες. Σε αυτή την περίπτωση η τιμή του x γίνεται 0 ώστε να ξέρουμε αν ανιχνεύτηκε τέτοιο γεγονός ή απλά ολοκληρώθηκε ο χρόνος ανάγνωσης του αισθητήρα. 14

9 continue Η continue παρακάμπτει το υπόλοιπο της τρέχουσας επανάληψης for, while ή do while και συνεχίζει με τον έλεγχο της συνθήκης του βρόγχου. Αν η συνθήκη το επιτρέπει επαναλαμβάνονται οι εντολές της επανάληψης. for(x=0;x<255;x++) if(x>40 && x<120) // απορρίπτονται οι τιμές αυτές continue; analogwrite(pwmpin,x); delay(50); Στο παράδειγμα η for με τη μεταβλητή x θα μετρήσει τις τιμές από 0 μέχρι 255, αλλά για τις ενδιάμεσες τιμές πάνω από 40 και κάτω από 120 δεν θα έχει κάποιο αποτέλεσμα. return Τερματίζει μια λειτουργία και επιστρέφει μια τιμή από μια συνάρτηση που κλήθηκε αν κάτι τέτοιο είναι επιθυμητό. int checksensor() if (analogread(0)>400) return 1; else return 0; Στο παραπάνω παράδειγμα η checksensor θα επιστρέψει την τιμή 1 αν ο αισθητήρας έχει τιμή μεγαλύτερη από 400, ή την τιμή 0 σε κάθε άλλη περίπτωση. Η τιμή που επιστρέφει η return μπορεί να είναι οποιαδήποτε σταθερή τιμή ή η τιμή μιας μεταβλητής. 15

10 Μεταβλητές Μια μεταβλητή χρησιμοποιείται φια να αποθηκεύουμε τιμές για μελλοντική χρήση από το πρόγραμμά μας, όπως τα δεδομένα ενός αισθητήρα ή το προσωρινό αποτέλεσμα ενός υπολογισμού. Δήλωση Μεταβλητών Πριν χρησιμοποιηθούν, όλες οι μεταβλητές, πρέπει να δηλωθούν. Δήλωση μεταβλητής σημαίνει να οριστεί ο τύπος της και προαιρετικά να ορίσουμε μια αρχική τιμή (αρχικοποίηση της μεταβλητής). Δεν είναι απαραίτητο να ορίσουμε αρχική τιμή, αλλά συχνά είναι πιο χρήσιμο. int inputvariable1; int inputvariable2 = 0; // both are correct Οι προγραμματιστές θα πρέπει να αποφασίσουν για το μέγεθος των αριθμών που θέλουν να αποθηκεύσουν στον επιλεγμένο τύπο μεταβλητής. Οι μεταβλητές κυλίουν κυκλικά το περιεχόμενό τους όταν οι αποθηκευμένες ποσότητες υπερβαίνουν τον καθορισμένο χώρο που διατίθεται από τον τύπο. int x x = -32,768; x = x - 1; // η x περιέχει τώρα την τιμή x = 32,767; x = x + 1; // η x περιέχει τώρα την τιμή Εμβέλεια Μεταβλητών Μία ακόμα σημαντική επιλογή που έχουν να κάνουν οι προγραμματιστές είναι πού θα δηλώσουν τις μεταβλητές. Ο καθορισμός της θέσης της δήλωσης μιας μεταβλητής εξαρτάται από το ποιο τμήμα του προγράμματος και των διάφορων συναρτήσεων θα χρησιμοποιήσει τη μεταβλητή. Η δήλωση των μεταβλητών στη C, την γλώσσα προγραμματισμού του Arduino, είναι διαφορετική από αυτή της BASIC όπου κάθε μεταβλητή είναι γενική και μπορεί να χρησιμοποιηθεί από οποιοδήποτε τμήμα του προγράμματος. Μια γενική μεταβλητή, είναι μια μεταβλητή που τη «βλέπουν» όλοι μέσα στο πρόγραμμα. Οι τοπικές μεταβλητές είναι ορατές μόνο στις συναρτήσεις που αυτέ δηλώθηκαν. Στο περιβάλλον ανάπτυξης του Arduino, κάθε μεταβλητή που δηλώνεται έξω από μια συνάρτηση (π.χ. setup(), loop(), κλπ. ), είναι μια γενική μεταβλητή, ορατή από παντού. Οταν τα προγράμματα γίνονται μεγαλύτερα και πιο πολύπλοκα, οι τοπικές μεταβλητές είναι 16

11 ένας χρήσιμος τρόπος να βεβαιωθούμε ότι μόνο η τρέχουσα συνάρτηση έχει πρόσβαση στις μεταβλητές της. Αυτό αποτρέπει προγραμματιστικά σφάλματα όταν μια συνάρτηση μεταβάλλει τις τιμές των μεταβλητών που χρησιμοποιούνται και από άλλες συναρτήσεις. Επίσης, μερικές φορές είναι χρήσιμο να δηλωθεί μια μεταβλητή μέσα σε ένα βρόχο for. Αυτό δημιουργεί μια μεταβλητή που μπορεί να προσπελαστεί μόνο από τις εντολές που είναι μέσα στις αγκύλες της for. int gpwmval; // Μεταβλητή ορατή από παντού void setup() //... void loop() int i; // το "i" είναι ορατό μέσα στη λειτουργία "loop" float f; // το "f" είναι ορατό μέσα στη λειτουργία "loop" //... for (int j = 0; j <100; j++) // η μεταβλητή j είναι ορατή μόνο στο εσωτερικό // του βρόγχου for Αρχικοποίηση Μεταβλητών Μια μεταβλητή μπορεί να αρχικοποιηθεί (αποδίδεται μια αρχική τιμή) όταν δηλώνεται ή όχι. Είναι πάντως καλή προγραμματιστική τακτική να γίνεται επανέλεγχος στα δεδομένα μιας μεταβλητής όταν πρόκειται να χρησιμοποιηθούν για διαφορετικό σκοπό από τον αρχικό. //δηλώνει την calibrval και ορίζει την αρχική τιμή int calibrval = 17; Αναδίπλωση Μεταβλητών Οταν η τιμή της μεταβλητής υπερβαίνει το ανώτατο όριο, αυτή αναδιπλώνει την τιμή της στην μικρότερη δυνατή και το αντίστροφο. Χρησιμοποιώντας τις Μεταβλητές Μόλις δηλωθούν οι μεταβλητές, μπορούμε να ορίσουμε την τιμή τους ίση με κάποια ποσότητα που θέλουμε να αποθηκεύσουμε χρησιμοποιώντας έναν τελεστή ανάθεσης (=). Αυτός λέει στο πρόγραμμα να θέσει οτιδήποτε είναι στα δεξιά του (τιμή ή έκφραση) στην μεταβλητή που βρίσκεται στο αριστερό του μέρος. 17

12 inputvar1 = 7; // η μεταβλητή inputvar1 παίρνει τιμή 7 inputvar2 = analogread(2); // η inputvar2 παίρνει τιμή από την // αναλογική θύρα στο pin #2 Παραδείγματα int lightsensval; char currentletter; unsigned long speedoflight = UL; char errormessage = "choose another option"; Σημείωση Θα πρέπει να δίνετε στις μεταβλητές περιγραφικά ονόματα, ώστε να κάνετε τον κώδικά σας ευανάγνωστο. Ονόματα μεταβλητών όπως tiltsensor ή pushbutton σας βοηθούν (αλλά και όσους άλλους διαβάσουν τον κώδικά σας) να καταλάβουν τί απεικονίζει τη μεταβλητή σας. Ονόματα μεταβλητών όπως var ή value, από την άλλη, κάνουν τον κώδικά σας λιγότερο ευανάγνωστο. Δεν μπορείτε να χρησιμοποιήσετε δεσμευμένες λέξεις της C σαν ονόματα μεταβλητών. Αποφύγετε να χρησιμοποιήσετε ονόματα που ξεκινούν με αριθμητικούς χαρακτήρες. 18

13 Τύποι Δεδομένων (Μεταβλητών-Συναρτήσεων) Τα δεδομένα που διακινούνται στο Arduino, αλλά και αυτά που αποθηκεύονται στις μεταβλητές και στη μνήμη του πρέπει υποχρεωτικά να δηλωθούν πριν χρησιμοποιηθούν. Υπάρχει μια μεγάλη ποικιλία τύπων που μπορούμε να χρησιμοποιήσουμε ώστε να περιγράψουμε με τη μεγαλύτερη σαφήνεια το είδος τους. void Η δήλωση void χρησιμοποιείται μόνο για τον τύπο των συναρτήσεων-λειτουργιών. Δηλώνει ότι δεν απαιτείται καμία τιμή επιστροφής από την συνάρτηση την οποία καλέσαμε. void setup() //... void loop() //... 19

14 boolean Η δήλωση boolean αποθηκεύει μία λογική τιμή TRUE ή FALSE. Στη μνήμη καταλαμβάνει ένα byte. boolean flash=true; for(i=0;i<10;i++) flash=!flash; Στο παράδειγμα η τιμή της μεταβλητής flash μεταβάλλεται δέκα φορές και εξέρχεται με την τιμή FALSE. char Η δήλωση char χρησιμοποιεί ένα byte και αποθηκεύει αριθμητικές τιμές στο διάστημα -128 έως 127. Συνήθως χρησιμοποιείται για να αποθηκεύει χαρακτήρες. Τους χαρακτήρες μπορούμε να τους αποδώσουμε σε μια μεταβλητή τύπου char βάζοντάς τους σε μονά εισαγωγικά (π.χ. L ), αλλά εσωτερικά αποθηκεύεται σαν αριθμός. Τα διπλά εισαγωγικά χρησιμοποιούνται για μεγαλύτερες του ενός χαρακτήρα φράσεις (π.χ. ABC ). Αφού οι τιμές είναι αριθμητικές μπορούμε να κάνουμε και αριθμητικές πράξεις, όπως Α +1 αποδίδει την τιμή 66, δεδομένου ότι το Α έχει τιμή ASCII 65. char mychar = 'A'; char mychar = 65; Στο παράδειγμα οι δυο εκφράσεις είναι ισοδύναμες. unsigned char Η δήλωση unsigned char χρησιμοποιεί και αυτή ένα byte αλλά χωρίς πρόσημο στο διάστημα 0 έως 255. Εχει τις ίδιες ιδιότητες με τη δήλωση byte, αλλά για λόγους συνέπειας στον προγραμματισμό του Arduino συνιστάται η χρήση της byte. unsigned char mychar = 240; 20

15 byte Η δήλωση byte χρησιμοποιεί και πάλι ένα byte αλλά αποθηκεύει αριθμητικές τιμές στο διάστημα 0 έως 255. byte b = B10010; Στο παράδειγμα η μεταβλητή b αποθηκεύει τη δυαδική (Binary) τιμή 10010, δηλαδή 18. int Η δήλωση int είναι αυτή που χρησιμοποιείται περισσότερο στο Arduino, δεδομένου ότι αποθηκεύει τιμές σε δυο bytes και στο διάστημα έως , όπου υπάρχουν και οι περισσότερες χρήσεις και εφαρμογές. int ledpin = 13; Ο τύπος int έχει ιδιαιτερότητες ως προς τον τρόπο που αναπαριστά τα περιεχόμενά του. Από τα 16 bits του int, το 1ο χρησιμοποιείται σαν πρόσημο και τα υπόλοιπα για την αποθήκευση του αριθμού. Αν τον μικρότερο δυνατό αριθμό του τύπου int τον τον μειώσουμε κατά 1, προκύπτει ο μεγαλύτερος, δηλαδή ο και το αντίστροφο. int x; x = ; x = x - 1; // το x τώρα περιέχει την τιμή x = 32767; x = x + 1; // το x τώρα περιέχει το short Ο τύπος short είναι εύρους 16 bit και αποθηκεύει τιμές στο διάστημα και short x=100; 21

16 unsigned int Η δήλωση unsigned int μοιάζει με την int αλλά δεν χρησιμοποιεί το 1ο bit για το πρόσημο. Ετσι οι τιμές που αποδίδονται είναι στο διάστημα 0 και unsigned int x x = 0; x = x - 1; // το x τώρα περιέχει την τιμή x = x + 1; // το x τώρα περιέχει το 0 Στην αριθμητική αυτού του τύπου ισχύει ότι και στον int ως προς την κυκλική αναδίπλωση. Ο μεγαλύτερος δυνατός αριθμός, το , αν αυξηθεί κατά 1 η νέα τιμή θα είναι 0 και το αντίθετο, αν μειωθεί το 0 γίνεται word Η δήλωση word είναι ίδια με την unsigned int, δηλαδή αποθηκεύει τιμές στα 16 bits στο διάστημα 0 και word x=100; long Η δήλωση long είναι ακέραιου τύπου αλλά χρησιμοποιεί 32 bits με πρόσημο στο διάστημα μέχρι long speedoflight = L; Στο παραπάνω παράδειγμα το L δίπλα στην αριθμητική τιμή σημαίνει ότι η τιμή αυτή χαρακτηρίζεται ως long. Αν χρειαστεί να γίνουν πράξεις και με ακέραιους θα πρέπει τουλάχιστον μία από τις τιμές να έχει το χαρακτηρισμό L. unsigned long Η δήλωση unsigned long είναι ακέραιου τύπου αλλά χρησιμοποιεί και τα 32 bits για την αποτύπωση μη αρνητικών αριθμών στο διάστημα 0 μέχρι unsigned long time; time = millis(); Στο παράδειγμα η unsigned long μεταβλητή time παίρνει την τιμή των χιλιοστών δευτερολέπτου που πέρασαν από τη στιγμή που ξεκίνησε Arduino. Η τιμή θα μηδενιστεί μετά από 50 περίπου ημέρες. 22

17 float Η δήλωση float χρησιμοποιείται για την αναπαράσταση αριθμών που απαιτούν δεκαδικό τμήμα. Εχει μεγαλύτερη δυνατότητα απεικόνισης από τους ακέραιους γιατί χρησιμοποιεί 4 bytes και μπορεί να αποθηκεύσει αριθμούς στο διάστημα E+38 έως E+38. Οι αριθμοί τύπου float αποτελούνται συνολικά από 6 ή 7 ψηφία. Οι μικρότεροι αριθμοί (θετικοί και αρνητικοί) έχουν περισσότερα δεκαδικά, άρα μεγαλύτερη ακρίβεια. Με μεγάλοι αριθμοί, έχουν λιγότερα δεκαδικά ψηφία και μικρότερη ακρίβεια. Για μεγαλύτερη ακρίβεια σε άλλες πλατφόρμες ανάπτυξης χρησιμοποιούνται οι αριθμοί τύπου double (μέχρι και 15 ψηφία), αλλά στο Arduino ο τύπος double είναι ίδιος με τον τύπο float. Ο τύπος float είναι δίνει μη ακριβείς αριθμούς. Για παράδειγμα η έκφραση 6.0 / 3.0, δε δίνει αποτέλεσμα ακριβώς 2,0. Επίσης οι πράξεις με αριθμούς αυτού του τύπου γίνονται πιο αργά από τις αντίστοιχες πράξεις με ακέραιους. Ετσι προτείνεται να γίνονται πράξεις με ακέραιους όσο περισσότερο είναι δυνατό και να περιορίζεται η χρήση των αριθμών τύπου float. int x; int y; float z; x = 1; y = x / 2; // το y τώρα περιέχει την τιμή 0, // δεν υπάρχουν δεκαδικά z = (float)x / 2.0; // το z περιέχει τώρα το.5 Το (float) πριν την τιμή x χρησιμοποιείται για να μετατρέψει το ακέραιο περιεχόμενο της x σε float. Πρέπει να χρησιμοποιηθεί το 2.0 και όχι το 2. double Η δήλωση double στα περισσότερα Arduino (εκτός του Arduino Due) είναι ακριβώς το ίδιο με τη δήλωση float. Χρησιμοποιεί 4 bytes όπως και η float. Στο Arduino Due χρησιμοποιεί 8 bytes και μεγαλύτερη ακρίβεια. 23

18 string Η δήλωση string χρησιμοποιείται για να περιγράψουμε μια σειρά χαρακτήρων που τελειώνουν σε null. Παραδείγματα char Str1[15]; char Str2[8] = 'a', 'r', 'd', 'u', 'i', 'n', 'o'; char Str3[8] = 'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'; char Str4[ ] = "arduino"; char Str5[8] = "arduino"; char Str6[15] = "arduino"; Δυνατότητες για τη δήλωση συμβολοσειρών (strings) Δεσμεύουν μια σειρά από χαρακτήρες χωρίς αρχικοποίηση όπως η Str1. Δεσμεύουν μια σειρά από χαρακτήρες (με ένα επιπλέον χαρακτήρα) και ο μεταγλωττιστής θα προσθέσει ένα χαρακτήρα null στο τέλος που απαιτείται για τον τερματισμό της αλυσίδας των χαρακτήρων, όπως η Str2. Ρητή προσθήκη του χαρακτήρα null στην Str3. Γίνεται προετοιμασία με μια σταθερή συμβολοσειρά σε εισαγωγικά. Ο μεταγλωττιστής θα υπολογίσει το μέγεθος του πίνακα για να χωρέσει η σταθερή συμβολοσειρά και ένας επιπλέον τερματικός χαρακτήρας null στο Str4. Γίνεται προετοιμασία του πίνακα που περιέχει σαφές μέγεθος και σταθερή συμβολοσειρά στο Str5. Γίνεται προετοιμασία της συστοιχίας χαρακτήρων, αφήνοντας επιπλέον χώρο για μεγαλύτερη συμβολοσειρά στο Str6. Τερματισμός Null Γενικά, οι συμβολοσειρές τελειώνουν με έναν χαρακτήρα null (με κωδικό ASCII το 0). Αυτό επιτρέπει στις συναρτήσεις που χρησιμοποιούν συμβολοσειρές να πουν πού αυτό τελειώνει. Αν δεν υπάρχει τέτοιος χαρακτήρας θα συνεχίσουν να διαβάζουν σαν χαρακτήρες το συνεχόμενο τμήμα μνήμης που ακολουθεί και ας μην είναι μέρος της συμβολοσειράς. Αυτό σημαίνει ότι η συμβολοσειρά χρειάζεται χώρο για ένα επιπλέον χαρακτήρα απ ότι το κείμενο που περιέχει. Για αυτό το Str2 και Str5 χρειάζεται να είναι 8 χαρακτήρων, ακόμα και αν η λέξη Arduino έχει 7, η τελευταία θέση αυτόματα γεμίζει με τον χαρακτήρα null. Το μήκος του Str4 θα υπολογιστεί αυτόματα στους 8 χαρακτήρες, ένας επιπλέον για τον null. Στο Str3, συμπεριλάβαμε ένα κενό χαρακτήρα μόνοι μας (γράφεται \0). Να σημειώσουμε ότι είναι πιθανό να έχουμε μια συμβολοσειρά χωρίς των τελικό null χαρακτήρα (π.χ. αν έχουμε καθορισμένο το μήκος του Str2 ως 7 αντί για 8). Αυτό θα δημιουργήσει προβλήματα στις περισσότερες λειτουργίες που χρησιμοποιούν strings, γι αυτό δεν πρέπει να γίνει σκόπιμα. 24

19 Απλά ή διπλά εισαγωγικά; Οι συμβολοσειρές ορίζονται πάντα μέσα σε διπλά εισαγωγικά ( Abc ) και οι χαρακτήρες μέσα σε μονά εισαγωγικά ( A ). Αναδίπλωση μεγάλου μήκους συμβολοσειρών Μπορείτε να αναδιπλώσετε μεγάλου μήκους συμβολοσειρές με τον ακόλουθο τρόπο: char mystring[] = "Αυτή είναι η πρώτη γραμμή" " αυτή η δεύτερη γραμμή" " κ.λ.π."; Πίνακες συμβολοσειρών Συχνά είναι βολικό, όταν εργάζεστε με μεγάλους όγκους κειμένων, όπως μια εφαρμογή με μια οθόνη LCD, να δομήσετε έναν πίνακα με συμβολοσειρές. Επειδή αυτές είναι από μόνες τους πίνακες, αυτό είναι ένα παράδειγμα πίνακα δύο διαστάσεων. char* mystrings[]="αυτή είναι η 1η συμβολοσειρά", "Αυτή είναι η 2η συμβολοσειρά", "Αυτή είναι η 3η συμβολοσειρά", "Αυτή είναι η 4η συμβολοσειρά", "Αυτή είναι η 5η συμβολοσειρά", "Αυτή είναι η 6η συμβολοσειρά"; void setup() Serial.begin(9600); void loop() for (int i = 0; i < 6; i++) Serial.println(myStrings[i]); delay(500); Το παραπάνω παράδειγμα θα στείλει και θα εμφανίσει στην κονσόλα του υπολογιστή μας τις έξι συμβολοσειρές που ορίσαμε σαν πίνακα συμβολοσειρών. Σε αυτόν τον κώδικα, ο αστερίσκος μετά τον τύπο δεδομένων char «char *» δηλώνει ότι πρόκειται για μια σειρά από "δείκτες". Ολα τα ονόματα του πίνακα είναι στην πράξη δείκτες, έτσι απαιτείται να γίνει ένας πίνακες από πίνακες. Οι δείκτες (Pointers) είναι ένα από τα πιο απόκρυφα μέρη της C και δύσκολο να το κατανοήσουν οι αρχάριοι, αλλά δεν είναι απαραίτητο να γίνει πλήρως κατανοητό πώς δουλεύουν για να τους χρησιμοποιήσουμε αποτελεσματικά εδώ. 25

20 Πίνακες Ενας πίνακας είναι μια συλλογή μεταβλητών που προσπελαύνονται με έναν δείκτη. Οι πίνακες στην γλώσσα προγραμματισμού C στην οποία βασίζεται το Arduino μπορούν να γίνουν πολύπλοκοι αλλά η χρήση απλών πινάκων είναι σχετικά απλή. Δημιουργώντας (Δηλώνοντας) ένα Πίνακα Ολες οι μέθοδοι που ακολουθούν είναι αποδεκτοί τρόποι για να δημιουργήσουμε (δηλώσουμε) έναν πίνακα. int myints[6]; int mypins[] = 2, 4, 8, 3, 6; int mysensvals[6] = 2, 4, -8, 3, 2; char message[6] = "hello"; Μπορείτε να δηλώσετε έναν πίνακα χωρίς να τον αρχικοποιήσετε όπως στο myints. Στον mypins δηλώσαμε ένα πίνακα χωρίς να ορίσουμε το ακριβές μέγεθός του. Ο compiler μετράει τα στοιχεία και φτιάχνει τον πίνακα με το απαραίτητο μέγεθος. Τέλος, μπορείτε ταυτόχρονα και να αρχικοποιήσετε και καθορίσετε το ακριβές μέγεθος όπως στο mysensvals. Να σημειωθεί ότι όταν δηλώνεται ένας πίνακας χαρακτήρων, ένα ή περισσότερα στοιχεία απαιτούνται για τους χαρακτήρες null. Προσπελαύνοντας ένα Πίνακα Οι πίνακες έχουν μηδενικό αρχικό δείκτη. Δηλαδή, στον πίνακα mysensvals το πρώτο στοιχείο έχει δείκτη 0, το δεύτερο έχει δείκτη 1 κ.ο.κ. mysensvals[0] == 2, mysensvals[1] == 4, κ.ο.κ. Αυτό επίσης σημαίνει ότι ένας πίνακας με δέκα στοιχεία, έχει το τελευταίο του στοιχείο με δείκτη 9. Ετσι, int myarray[10]=9,3,2,4,3,2,7,8,9,11; // myarray[9] περιέχει την τιμή 11 // myarray[10] δεν έχει έγκυρη τιμή και περιέχει // τυχαίες πληροφορίες Για το λόγο αυτό θα πρέπει να είστε προσεκτικοί όταν προσπελαύνετε πίνακες. Η προσπέλαση στοιχείων μετά το τέλος του πίνακα (χρησιμοποιώντας έναν δείκτη μεγαλύτερο του επιτρεπτού -1) διαβάζει από τη μνήμη που χρησιμοποιείται για άλλες χρήσεις. Ανάγνωση από τέτοιες θέσεις πιθανότατα θα οδηγήσουν σε απρόβλεπτα μη έγκυρα δεδομένα. Εγγραφή σε τυχαίες θέσεις μνήμης είναι απολύτως κακή ιδέα και συχνά μπορεί να έχει δυσάρεστα αποτελέσματα όπως κολλήματα και δυσλειτουργίες του προγράμματος. Αυτό επίσης είναι μπορεί να είναι ένα πρόβλημα που δεν εντοπίζεται εύκολα. Αντίθετα από την BASIC ή τη JAVA, ο C compiler δεν ελέγχει αν η προσπέλαση ενός πίνακα είναι μέσα στα σωστά όρια του μεγέθους που έχει δηλωθεί. 26

21 Για να αντιστοιχίσετε μια τιμή σε ένα πίνακα mysensvals[0] = 10; Για να ανακτήσετε μια τιμή από ένα πίνακα x = mysensvals[4]; Μετατροπές Αρκετές φορές είναι απαραίτητο τα περιεχόμενα μιας μεταβλητής να μεταφερθούν σε κάποια άλλη. Αν ο τύπος των δυο μεταβλητών είναι ίδιος δεν υπάρχει κανένα πρόβλημα. Αν όμως ο τύπος της μεταβλητής υποδοχής είναι διαφορετικός από τον τύπο της μεταβλητής που περιέχει την τιμή ή στον υπολογισμό μιας έκφρασης παίρνουν μέρος μεταβλητές διαφορετικού τύπου, πρέπει να γίνει μετατροπή ώστε η έκφραση να υπολογιστεί σωστά και το αποτέλεσμα να αποθηκευτεί στην μεταβλητή υποδοχής σωστά. char(x) Μετατρέπει την τιμή μιας οποιουδήποτε τύπου μεταβλητής σε χαρακτήρα. byte(x) Μετατρέπει την τιμή μιας οποιουδήποτε τύπου μεταβλητής σε byte, δηλαδή τιμή στο διάστημα 0 έως 255. int(x) Μετατρέπει την τιμή μιας οποιουδήποτε τύπου μεταβλητής σε int, δηλαδή τιμή στο διάστημα έως word(x) ή word(h,l) Μετατρέπει την τιμή μιας οποιουδήποτε τύπου μεταβλητής σε word, δηλαδή τιμή στο διάστημα 0 έως , ή συνενώνει δυο bytes, το υψηλής αξίας (h) και το χαμηλής αξίας (l) σε τιμή τύπου word. long(x) Μετατρέπει την τιμή μιας οποιουδήποτε τύπου μεταβλητής σε long, δηλαδή τιμή στο διάστημα έως float(x) Μετατρέπει την τιμή μιας οποιουδήποτε τύπου μεταβλητής σε float. Για περισσότερες λεπτομέρειες ως προς το εύρος των τιμών δείτε στη Δήλωση μεταβλητών τύπου float. 27

22 Λειτουργίες-Συναρτήσεις Για την χρήση των πλακετών Arduino διατίθεται μια σειρά από λειτουργίες τις οποίες μπορούμε να χρησιμοποιήσουμε για να ελέγξουμε τις εισόδους και να μεταβάλουμε τις εξόδους, να χειριστούμε το ρολόι που βρίσκεται ενσωματωμένο στην πλακέτα του Arduino, να κάνουμε μαθηματικές πράξεις, ή πράξεις με τις μεταβλητές που βασίζονται στη δυαδική αριθμητική, αλλά και να πάρουμε τυχαίους αριθμούς που θα χρησιμοποιηθούν σε κάποιο παιχνίδι ή σε εφαρμογές που απαιτούν κάποιας μορφής τυχαιότητα. 28

23 Ψηφιακή Είσοδος/Εξοδος Για τον χειρισμό των ψηφιακών ακίδων, υπάρχουν λειτουργίες που μπορούν να αρχικοποιήσουν, να διαβάσουν την κατάσταση κάποιας εισόδου ή να αποδώσουν μια δυαδική τιμή σε κάποια έξοδο. Οι λειτουργίες pinmode(), digitalread() και digitalwrite(), χρησιμοποιούνται ακριβώς για τους σκοπούς αυτούς. pinmode() Διαμορφώνει το καθορισμένο pin ώστε να συμπεριφέρεται τόσο σαν είσοδος όσο και σαν έξοδος. Η σύνταξη της εντολής είναι: pinmode(pin, mode) όπου, pin είναι ο αριθμός του ακροδέκτη του οποίου τη λειτουργία θέλουμε να ρυθμίσουμε και mode μπορεί να είναι μία από τις τιμές INPUT, OUTPUT, ή INPUT_PULLUP. Είναι δυνατό να επιτρέψουμε τη χρήση των εσωτερικών αντιστάσεων με τη λειτουργία INPUT_PULLUP. Επιπλέον, η λειτουργία INPUT απενεργοποιεί ρητά τις εσωτερικές αντιστάσεις. Η λειτουργία αυτή δεν επιστρέφει κάποια τιμή. int ledpin = 13; // ένα LED είναι συνδεδεμένο στο pin 13 void setup() pinmode(ledpin, OUTPUT); // ορίζω τον αντίστοιχο // ακροδέκτη ως εξόδου void loop() digitalwrite(ledpin, HIGH); // ανάβω το LED delay(1000); // περιμένω ένα δευτερόλεπτο digitalwrite(ledpin, LOW); // σβήνω το LED delay(1000); // περιμένω ένα δευτερόλεπτο Σημείωση Οι αναλογικοί ακροδέκτες εισόδου μπορούν να χρησιμοποιηθούν σαν ψηφιακές αρκεί να αναφερθούν με το όνομα Α0, Α1, κλπ. 29

24 digitalwrite() Γράφει μια τιμή στον ψηφιακό ακροδέκτη που μπορεί να είναι HIGH ή LOW. Αν το pin διαμορφώθηκε σαν εξόδου (OUTPUT) με τη λειτουργία pinmode(), η τάση του θα οριστεί στα 5V (ή στα 3,3V στις αντίστοιχες εκδόσεις υλικού) για την τιμή HIGH, 0V (γείωση) για την τιμή LOW. Αν το pin έχει ρυθμιστεί ως INPUT, γράφοντας μια τιμή HIGH με τη λειτουργία digitalwrite() θα επιτρέψει μια εσωτερική αντίσταση pullup στα 20KΩ. Γράφοντας LOW θα απενεργοποιηθεί το pullup. Η αντίσταση pullup είναι αρκετή για να ανάψει ένα LED αμυδρά, επομένως αν τα LEDs φαίνονται να λειτουργούν, αλλά αμυδρά, μπορεί να οφείλεται σε αυτό. Η λύση είναι να ρυθμίσετε το ψηφιακό pin σαν μι έξοδο με τη λειτουργία pinmode(). Σημείωση Το ψηφιακό pin 13 είναι δυσκολότερο να χρησιμοποιηθεί ως ψηφιακή είσοδος όπως τα υπόλοιπα ψηφιακά pins γιατί συνδέεται με ένα LED και αντίσταση σε σειρά ενσωματωμένα στην πλακέτα, στις περισσότερες πλακέτες Arduino. Εάν ενεργοποιήσετε την εσωτερική 20k pull- up αντίσταση, θα δώσει γύρω στο 1,7 V αντί της αναμενόμενης τάσης των 5V, γιατί η ενσωματωμένη αντίσταση και το LED σε σειρά θα ρίξει το επίπεδο τάσης προς τα κάτω, σε αυτή την τιμή και αυτό σημαίνει ότι θα επιστρέφει πάντα τιμή LOW. Εάν πρέπει να χρησιμοποιήσετε το pin 13 ως ψηφιακή είσοδο, χρησιμοποιήστε μια εξωτερική αντίσταση. Η σύνταξη της εντολής είναι: digitalwrite(pin, value) όπου, pin είναι ο αριθμός του ακροδέκτη και value η τιμή που θα του στείλουμε HIGH ή LOW. Η digitalwrite() δεν επιστρέφει καμία τιμή. int ledpin = 13; // LED connected to digital pin 13 void setup() pinmode(ledpin, OUTPUT); // ορίζει το ψηφιακό pin σαν εξόδου void loop() digitalwrite(ledpin, HIGH); // sets the LED on delay(1000); // waits for a second digitalwrite(ledpin, LOW); // sets the LED off delay(1000); // waits for a second Αναβοσβήνει το ενσωματωμένο LED της πλακέτας του Arduino ανά 2 δευτερόλεπτα. Σημείωση Οι αναλογικοί ακροδέκτες εισόδου μπορούν να χρησιμοποιηθούν σαν ψηφιακές αρκεί να αναφερθούν με το όνομα Α0, Α1, κλπ. 30

25 digitalread() Διαβάζει την τιμή από ένα συγκεκριμένο ψηφιακό pin, η οποία μπορεί να είναι είτε HIGH ή LOW. Η σύνταξη της εντολής είναι: digitalread(pin) όπου, pin είναι ο αριθμός του ψηφιακού pin που θέλουμε να διαβάσουμε (η τιμή πρέπει να είναι τύπου int). Η επιστρεφόμενη τιμή είναι HIGH ή LOW. Ορίζει τον ακροδέκτη 13 με την ίδια τιμή όπως ο ακροδέκτης 7 που δηλώνεται ως εισόδου. int ledpin = 13; // Το LED συνδέεται στην ψηφιακή ακίδα 13 int inpin = 7; // Ένας διακόπτης πίεσης συνδέεται στο pin 7 int val = 0; // μεταβλητή για να αποθηκεύσουμε την // τιμή ανάγνωσης void setup() pinmode(ledpin, OUTPUT); // ορίζει το ψηφιακό pin 13 // σαν εξόδου pinmode(inpin, INPUT); // ορίζει το ψηφιακό pin 7 // σαν εισόδου void loop() val = digitalread(inpin); // διαβάζει το pin εισόδου digitalwrite(ledpin, val); // ορίζει το LED ίδιο με την // τιμή του πλήκτρου Αν στον ακροδέκτη 7 δεν έχουμε συνδέσει έναν διακόπτη πίεσης, η digitalread() θα επιστρέφει είτε HIGH ή LOW (και αυτό μπορεί να αλλάζει τυχαία). Σημείωση Οι αναλογικοί ακροδέκτες εισόδου μπορούν να χρησιμοποιηθούν σαν ψηφιακές αρκεί να αναφερθούν με το όνομα Α0, Α1, κλπ. 31

26 Αναλογική Είσοδος/Εξοδος Τους αναλογικούς ακροδέκτες μπορούμε να τους χειριστούμε με λειτουργίες οι οποίες καθορίζουν τον τρόπο που θα διαβάσουμε τις τιμές τους, έχοντας υπόψη ότι απαιτείται η μετατροπή ενός αναλογικού σήματος σε ψηφιακό (γι αυτό χρησιμοποιείται ένας 10-bit A/D converter), αλλά και το γεγονός ότι οι πηγές του σήματος που θα διαβάσουμε θα πρέπει να λειτουργούν στις ίδιες τάσεις τις οποίες πρέπει να αναφέρουμε στην ανάγνωση του σήματος. Επιπλέον, δεδομένου ότι δεν υπάρχουν αναλογικές έξοδοι, χρησιμοποιείται η ψευδοαναλογική-ευροπαλμική διαμόρφωση (PWM) των ψηφιακών ακίδων που πρέπει να διαμορφώσουμε κατάλληλα. Οι λειτουργίες analogreference(), analogread() και analog- Write() χρησιμοποιούνται για τους σκοπούς αυτούς. 32

27 analogreference() Ρυθμίζει την τάση αναφοράς που χρησιμοποιείται για την αναλογική είσοδο (δηλαδή την τιμή που χρησιμοποιείται ως η μέγιστη του εύρους τιμής εισόδου). Η σύνταξη τη εντολής είναι: analogreference(type) όπου, type είναι ο τύπος αναφοράς που θέλετε να χρησιμοποιήσετε (DEFAULT, INTER- NAL, INTERNAL1V1, INTERNAL2V56, ή EXTERNAL). Οι επιλογές που μπορούμε να κάνουμε είναι: DEFAULT: η προεπιλεγμένη τιμή αναφοράς είναι τα 5 volt (για όσες πλακέτες Arduino λειτουργούν σε αυτή την τάση) ή 3,3 volt (σε πλακέτες Arduino των 3,3V) INTERNAL: μια ενσωματωμένη τιμή αναφοράς, ίση με 1,1 volt στο ATmega168 ή ATmega328 και 2,56 volt στο ATmega8 (δεν διατίθεται για το Arduino Mega ) INTERNAL1V1: μια ενσωματωμένη τιμή αναφοράς στα1.1v (μόνο για το Arduino Mega) INTERNAL2V56: μια ενσωματωμένη τιμή αναφοράς 2.56V (μόνο για το Arduino Mega) EXTERNAL: η τάση που εφαρμόζεται στον ακροδέκτη AREF (0 έως 5V μόνο) χρησιμοποιείται σαν αναφορά. Η analogreference() δεν επιστρέφει καμία τιμή. Σημείωση Μετά την αλλαγή της αναλογικής αναφοράς, οι πρώτες ενδείξεις που διαβάζονται από την analogread() μπορεί να μην είναι ακριβείς. Προειδοποίηση Μην χρησιμοποιείτε τίποτα λιγότερο από 0V ή περισσότερο από 5V για εξωτερική τάση αναφοράς για το pin AREF! Εάν χρησιμοποιείτε μια εξωτερική τιμή αναφοράς στο pin AREF, πρέπει να ρυθμίσετε την αναλογική αναφορά EXTERNAL πριν από την κλήση analogread(). Διαφορετικά, θα βραχυκυκλώσει η ενεργός τάση αναφοράς (που δημιουργείται εσωτερικά) και το pin AREF, και πιθανόν να καταστρέψουν τον μικροελεγκτή Arduino στην πλακέτα σας. Εναλλακτικά, μπορείτε να συνδέσετε την εξωτερική τάση αναφοράς στο pin AREF μέσω μιας αντίστασης 5K, που σας επιτρέπει να πραγματοποιήσετε εναλλαγή μεταξύ εξωτερικών και εσωτερικών τάσεων αναφοράς. Σημειώστε ότι η αντίσταση θα μεταβάλλει την τάση που χρησιμοποιείται ως αναφορά επειδή υπάρχει μια εσωτερική αντίσταση 32Κ επί του ακροδέκτη AREF. Τα δυο pin λειτουργούν ως διαιρέτης τάσεως, έτσι, για παράδειγμα, εφαρμόζονται 2.5V διαμέσου της αντίστασης και θα αποδώσει 2,5*32 / (32+5)=~2.2V στο pin AREF. 33

28 analogread() Διαβάζει την τιμή από τον καθορισμένο αναλογική ακροδέκτη. Η πλακέτα Arduino περιέχει 6 κανάλια (8 κανάλια για το Mini και Nano, 16 για το Mega), και μετατροπέα αναλογικό σε ψηφιακό στα 10 bit. Αυτό σημαίνει ότι θα χαρτογραφήσει τάσεις εισόδου μεταξύ 0 και 5 βολτ σε ακέραιες τιμές μεταξύ 0 και Αυτό δίνει μια ανάλυση μεταξύ των τιμών που εισάγονται: 5 βολτ / 1024 μονάδες ή 0,0049 βολτ ( 4.9 mv ) ανά μονάδα. Το εύρος εισόδου και η ανάλυση μπορεί να αλλάξει με τη χρήση της εντολής analogreference(). Κάθε ανάγνωση από τις αναλογικές εισόδους χρειάζεται περίπου 100 μικροδευτερόλεπτα (0.0001sec) για να πραγματοποιηθεί, οπότε ο μέγιστος ρυθμός ανάγνωσης είναι περίπου φορές το δευτερόλεπτο. Η σύνταξη της εντολής είναι: analogread(pin) όπου pin είναι ο αριθμός του αναλογικού ακροδέκτη εισόδου που θέλουμε να διαβάσουμε (τιμή 0 έως 5 στις περισσότερες πλακέτες, 0 έως 7 στο Mini και Nano, 0 έως 15 για το Mega). Η τιμή που επιστρέφεται είναι ακέραιου τύπου int στο διάστημα 0 έως Σημείωση Αν το αναλογικό pin εισόδου δεν συνδέεται με τίποτα, η τιμή που επιστρέφεται από την εντολή analogread() θα εξαρτηθεί από διάφορους άλλους (τυχαίους) παράγοντες, όπως οι τιμές των άλλων αναλογικών εισόδων, πόσο κοντά είναι στο χέρι σας από την πλακέτα του Arduino, κλπ. int analogpin = 3; // ποτενσιόμετρο συνδεδεμένο στον μεσαίο // ακροδέκτη και στο αναλογικό pin 3. // εξωτερικά συνδέεται στη γείωση και // στα +5V int val = 0; // μεταβλητή για να αποθηκεύσουμε //την τιμή που διαβάζεται void setup() Serial.begin(9600); // αρχικοποίηση της σειριακής θύρας void loop() val = analogread(analogpin); // διάβασμα της τιμής του // ακροδέκτη εισόδου Serial.println(val); // εμφάνιση τιμής στη σειριακή θύρα 34

29 analogwrite() PWM Γράφει μια αναλογική τιμή (ψευδοαναλογικό-ευροπαλμικό PWM κύμα) σε ένα ακροδέκτη. Μπορεί να χρησιμοποιηθεί για να ανάψει ένα LED σε διάφορες φωτεινότητες ή να οδηγήσουμε ένα μοτέρ σε διάφορες ταχύτητες. Μετά την κλήση της analogwrite(), στο pin θα δημιουργηθεί μια σταθερή τετραγωνική κυματομορφή με συγκεκριμένο κύκλο μέχρι την επόμενη κλήση analogwrite() ( ή μια κλήση digitalread() ή digitalwrite() που αφορά τον ίδιο ακροδέκτη). Η συχνότητα του σήματος PWM για τα περισσότερα pins είναι περίπου 490 Hz. Στο Uno και παρόμοιες πλακέτες, τα pins 5 και 6 έχουν συχνότητα περίπου 980 Hz. Τα pins 3 και 11 για το Leonardo επίσης τρέχει στα 980 Hz. Στις περισσότερες πλακέτες Arduino (αυτές με το ATmega168 ή ATmega328), η λειτουργία αυτή λειτουργεί στις ακίδες 3, 5, 6, 9, 10, και 11. Στο Arduino Mega, λειτουργεί στις ακίδες 2 έως 13 και 44 έως 46. Σε παλαιότερες πλακέτες Arduino με ATmega8 η analogwrite() υποστηρίζεται μόνο στους ακροδέκτες 9, 10, και 11. Το Arduino Due υποστηρίζει analogwrite() στις ακίδες 2 έως 13, καθώς και στις ακίδες DAC0 και DAC1. Σε αντίθεση με τις ακίδες PWM, τα DAC0 και DAC1 είναι μετατροπείς Ψηφιακό σε Αναλογικό, και να λειτουργούν σαν πραγματικές αναλογικές έξοδοι. Δεν χρειάζεται να καλέσετε την pinmode() για να ρυθμίσετε την ακίδα ως έξοδο πριν από την κλήση της analogwrite(). Η λειτουργία analogwrite δεν έχει καμία σχέση με τις αναλογικές ακίδες ή τη λειτουργία analogread. Η σύνταξη της εντολής είναι: analogwrite(pin, value) όπου, pin είναι η ακίδα στην οποία θέλουμε να γράψουμε και value η περίοδος λειτουργίας από 0 (πάντα κλειστό) μέχρι και 255 (πάντα ανοικτό). Η analogwrite δεν επιστρέφει τίποτα. Σημειώσεις και γνωστά θέματα Οι ευροπαλμικές έξοδοι PWM που παράγονται στις ακίδες 5 και 6 θα έχουν υψηλότερη του αναμενόμενου περίοδο λειτουργίας. Αυτό συμβαίνει λόγω των αλληλεπιδράσεων με τις λειτουργίες millis() και delay(), οι οποίες μοιράζονται το ίδιο εσωτερικό χρονόμετρο που χρησιμοποιείται για την παραγωγή των εν λόγω εξόδων PWM. Αυτό μπορεί να παρατηρηθεί κυρίως στις χαμηλές ρυθμίσεις περιόδου λειτουργίας (π.χ. 0-10) και μπορεί να οδηγήσει σε μια τιμή 0 που δεν είναι πλήρως απενεργοποιημένη στην έξοδο των ακίδων 5 και 6. 35

30 Ρυθμίζει την έξοδο προς το LED ανάλογη της τιμής που διαβάζεται από το ποτενσιόμετρο. int ledpin = 9; // LED συνδεμένο στην ψηφιακή ακίδα 9 int analogpin = 3; // ποτενσιόμετρο συνδεμένο στην // αναλογική ακίδα 3 int val = 0; // μεταβλητή για να αποθηκεύσουμε την // τιμή ανάγνωσης void setup() pinmode(ledpin, OUTPUT); // ορίζει το pin εξόδου void loop() val = analogread(analogpin); // διαβάζει το pin εισόδου // μετατροπή των τιμών της στο διάστημα 0 έως 255 // για την analogwrite analogwrite(ledpin, val / 4); 36

31 Προηγμένη Είσοδος/Εξοδος Οι λειτουργίες αυτές θεωρούνται προηγμένες δεδομένου ότι δεν είναι από τις πιο συνηθισμένες στη χρήση σε σχέση με τις προαναφερόμενες. Ομως είναι από αυτές που μπορούν να μας γλιτώσουν από την παραγωγή εκτεταμένου κώδικα ώστε να τις αντικαταστήσουμε με άλλους τρόπους. Οι βασικότερες που μπορούμε να χρησιμοποιήσουμε είναι η tone() και η notone() που έχουν να κάνουν με τον ήχο που μπορούμε να παράξουμε σε κάποια ακίδα. Αλλες λειτουργίες, που όμως ξεφεύγουν από τα πλαίσια της εργασίας μας είναι η shiftout() και η shiftin() που στέλνουν ακολουθίες δυαδικών τιμών με σειριακό τρόπο σε εξωτερικές συσκευές (οι οποίες συνήθως διαθέτουν ενός είδους μνήμη και τις ανασυνθέτουν) και η pulsein() για την εισαγωγή αντίστοιχων δυαδικών ακολουθιών που προέρχονται από εξωτερικές συσκευές ή αισθητήρες. tone() Παράγει ένα τετραγωνικό κύμα μιας καθορισμένης συχνότητας σε έναν ακροδέκτη. Η διάρκεια μπορεί να καθοριστεί, διαφορετικά το κύμα συνεχίζεται μέχρι να γίνει κλήση της no- Tone(). Η ακίδα μπορεί να συνδεθεί με ένα πιεζοηλεκτρικό βομβητή ή άλλο ηχείο για να παίξει τυος τόνους. Μόνο ένας τόνος μπορεί να παραχθεί σε μια στιγμή. Εάν ένας τόνος ήδη παίζει σε ένα διαφορετικό pin, η κλήση της tone() δε θα έχει καμία επίδραση. Εάν ένας τόνος παίζει στο ίδιο pin, η κλήση της tone() θα ρυθμίσει τη νέα συχνότητα του τόνου. Η χρήση της λειτουργίας tone() χρησιμοποιεί την ευροπαλμική διαμόρφωση - PWM στις ακίδες 3 και 11 (για τις πλακέτες Arduino, εκτός από το Mega). Δεν είναι δυνατόν να δημιουργηθούν τόνοι με συχνότητα χαμηλότερη από 31Hz. Σημείωση Αν θέλετε να παίξετε διαφορετικούς τόνους σε πολλές ακίδες, θα πρέπει να καλέσετε την λειτουργία notone() σε ένα pin πριν από την κλήση tone() για την επόμενη ακίδα. Η σύνταξη της εντολής είναι: tone(pin, frequency) tone(pin, frequency, duration) όπου, pin είναι η ακίδα στην οποία θα παραχθεί ο ήχος, frequency είναι η συχνότητα του τόνου σε hertz (τύπος μεταβλητής unsigned int) και duration είναι η διάρκεια του ήχου σε χιλιοστά του δευτερολέπτου (προαιρετική τιμή - unsigned long) Η tone δεν επιστρέφει τίποτα. 37

32 notone() Σταματά την παραγωγή ενός τετραγωνικού κύματος που προκλήθηκε με την tone(). Δεν έχει κανένα αποτέλεσμα αν δεν ακούγεται ήχος που παράχθηκε με προηγούμενη κλήση της tone(). Σημείωση Αν θέλετε να παίξετε διαφορετικούς τόνους σε πολλαπλές ακίδες, θα πρέπει να καλέσετε πρώτα την notone () σε ένα pin πριν από την κλήση της tone() για την επόμενη ακίδα. Η σύνταξη της εντολής είναι: notone(pin) όπου, pin είναι η ακίδα στην οποία θα σταματήσει να παράγεται ο ήχος. Η notone δεν επιστρέφει κάποια τιμή. 38

33 Χρόνος Ο χειρισμός του χρόνου στο Arduino έχει να κάνει με τον χρόνο που διανύθηκε από τη στιγμή που ξεκίνησε να εκτελείται το τρέχον πρόγραμμα, όσο και πόσο χρόνο θέλουμε να ανακόψουμε την εκτέλεση του προγράμματος καθυστερώντας σκόπιμα. Οι χρόνοι εκφράζονται σε χιλιοστά και σε εκατομμυριοστά του δευτερολέπτου και για την πρώτη περίπτωση χρησιμοποιούνται οι συναρτήσεις millis() και micros(), ενώ για τις καθυστερήσεις οι λειτουργίες delay() και delaymicroseconds(). millis() Επιστρέφει τον αριθμό των χιλιοστών των δευτερολέπτων που πέρασαν από την εκκίνηση του Arduino και του τρέχοντος προγράμματος. Αυτός ο αριθμός μπορεί να υπερχειλίσει, δηλαδή να αρχίσει να μετράει και πάλι από το μηδέν μετά την πάροδο 50 περίπου ημερών. Η συνάρτηση millis() δεν έχει παραμέτρους και επιστρέφει τα χιλιοστά του δευτερολέπτου που πέρασαν από την εκκίνηση του Arduino και του προγράμματος σε μια μεταβλητή τύπου unsigned long. unsigned long time; void setup() Serial.begin(9600); void loop() Serial.print("Time: "); time = millis(); // τυπώνει τον διανυθέντα χρόνο από την εκκίνηση // του προγράμματος Serial.println(time); // περιμένει ένα δευτερόλεπτο ώστε να μην αποστέλλονται // πολλά δεδομένα delay(1000); Σημείωση Η τιμή που επιστρέφει η millis είναι τύπου unsigned long, και επομένως μπορεί να δημιουργηθούν προβλήματα αν ο προγραμματιστής δοκιμάσει να τη χρησιμοποιήσει σε αριθμητικές πράξεις σε άλλο τύπο δεδομένων όπως π.χ. σαν int. 39

34 micros() Επιστρεφει τον αριθμό των εκατομμυριοστών του δευτερολέπτου από τη στιγμή που άρχισε η εκτέλεση του τρέχοντος προγράμματος στο Arduino. Αυτός ο αριθμός θα υπερχειλίσει, δηλαδή θα αρχίσει να μετράει και πάλι από το μηδέν με από 70 περίπου λεπτά. Σε πλακέτες Arduino χρονισμένες στα 16 MHz (π.χ. Duemilanove και Nano), αυτή η συνάρτηση έχει ανάλυση 4 εκατομμυριοστών του δευτερολέπτου (δηλαδή η τιμή που επιστρέφεται είναι πάντα πολλαπλάσιο του τέσσερα). Σε πλακέτες χρονισμένες στα 8MHz (όπως το LilyPad), η συνάρτηση έχει ανάλυση στα 8 εκατομμυριοστά του δευτερολέπτου. Σημείωση Υπάρχουν εκατομμυριοστά του δευτερολέπτου σε ένα χιλιοστό του δευτερολέπτου και σε ένα δευτερόλεπτο. Η micros() δεν έχει παραμέτρους και επιστρέφει τον αριθμό των διανυθέντων εκατομμυριοστών του δευτερολέπτου από τη στιγμή που ξεκίνησε η εκτέλεση του τρέχοντος προγράμματος σαν τιμή τύπου unsigned long. unsigned long time; void setup() Serial.begin(9600); void loop() Serial.print("Time: "); time = micros(); // τυπώνει τον διανυθέντα χρόνο από την εκκίνηση // του προγράμματος Serial.println(time); // περιμένει ένα δευτερόλεπτο ώστε να μην // αποστέλλονται πολλά δεδομένα delay(1000); 40

35 delay() Σταματά την εκτέλεση του προγράμματος για όσο χρόνο (σε χιλιοστά του δευτερολέπτου) ορίζει η παράμετρός της. (Υπάρχουν χιλιοστά σε κάθε δευτερόλεπτο.) Η σύνταξη της εντολής είναι: delay(ms) όπου, ms είναι ο αριθμός των χιλιοστών του δευτερολέπτου που θα διακοπεί η εκτέλεση του προγράμματος (unsigned long). Η delay() δεν επιστρέφει καμία τιμή. int ledpin = 13; // ένα LED έχει συνδεθεί στην ψηφιακή // ακίδα 13 void setup() pinmode(ledpin, OUTPUT); // ορίζει την ψηφιακή ακίδα // σαν εξόδου void loop() digitalwrite(ledpin, HIGH); // ανάβει το LED delay(1000); digitalwrite(ledpin, LOW); delay(1000); // περιμένει ένα δευτερόλεπτο // σβήνει το LED // περιμένει ένα δευτερόλεπτο Ανακοπή Οσο εύκολο είναι να αναβοσβήσουμε ένα LED με τη λειτουργία delay() - και πολλά προγράμματα τη χρησιμοποιούν για μικρές καθυστερήσεις, - η χρήση της delay() σε ένα πρόγραμμα έχει σημαντικά μειονεκτήματα. Καμία ανάγνωση από τους αισθητήρες, κανένας μαθηματικός υπολογισμός ή χειρισμός ακίδας δε μπορεί να γίνει όσο διαρκεί η ανακοπή εκτέλεσης που δημιουργεί η delay(). Για εναλλακτικές προσεγγίσεις του ελέγχου του προγράμματός μας και των χρονικών καθυστερήσεων μπορεί να χρησιμοποιηθεί η συνάρτηση millis(). Πολλοί προγραμματιστές συνήθως αποφεύγουν τη χρήση της delay() για τον χρονισμό γεγονότων για διάρκειες μεγαλύτερες των 10 χιλιοστών του δευτερολέπτου εκτός και αν ο κώδικας είναι πολύ απλός. Πάντως, όσο η λειτουργία delay() έχει ανακόψει την εκτέλεση του προγράμματος, κάποια πράγματα συνεχίζουν να εξελίσσονται επειδή αυτή η λειτουργία δεν απενεργοποιεί τις διακοπές (interrupts). Η σειριακή επικοινωνία που εμφανίζεται στο pin RX καταγράφεται, η ευροπαλμική διαμόρφωση (PWM) της analogwrite() διατηρείται, και οι διακοπές (interrupts) θα δουλέψουν όπως θα έπρεπε. 41

36 delaymicroseconds() Σταματά την εκτέλεση του προγράμματος για όσο χρόνο (σε εκατομμυριοστά του δευτερολέπτου) ορίζει η παράμετρός της. Υπάρχουν εκατομμυριοστά του δευτερολέπτου σε ένα χιλιοστό του δευτερολέπτου και σε ένα δευτερόλεπτο. Προς το παρόν, που θα θέσει μια ακριβή καθυστέρηση είναι εκατομμυριοστά του δευτερολέπτου. Για καθυστέρηση μεγαλύτερη από μερικές χιλιάδες μικροδευτερόλεπτα, θα πρέπει να χρησιμοποιήσετε την delay(). Οπως και στην delay() οι διακοπές (interrupts) συνεχίζουν να εκτελούνται κανονικά. Η σύνταξη της εντολής είναι: delaymicroseconds(us) όπου, us είναι ο αριθμός των μικροδευτερολέπτων για διακοπή εκτέλεση του προγράμματος (unsigned int). Η delaymicroseconds() δεν επιστρέφει καμία τιμή. int outpin = 8; // ψηφιακή ακίδα 8 void setup() pinmode(outpin, OUTPUT); // ορίζει την ακίδα ως εξόδου void loop() digitalwrite(outpin, HIGH); // ανάβει την ακίδα delaymicroseconds(50); // περιμένει για 50 μseconds digitalwrite(outpin, LOW); // σβήνει την ακίδα delaymicroseconds(50); // περιμένει για 50 μseconds Ρυθμίζει την ακίδα 8 να δουλέψει ως εξόδου. Στέλνει μια ακολουθία παλμών με περίοδο 100 μικροδευτερόλεπτα. Προειδοποιήσεις Αυτή η λειτουργία είναι πολύ ακριβής για 3 μικροδευτερόλεπτα και πάνω. Δεν μπορούμε να είμαστε σίγουροι ότι η delaymicroseconds() θα εκτελεστεί επακριβώς για μικρότερη τιμή καθυστέρησης. 42

37 Μαθηματικά Οι μαθηματικές συναρτήσεις που διατίθενται στο προγραμματιστικό περιβάλλον του Arduino έχουν σχέση με την μικρότερη και μεγαλύτερη τιμή μεταξύ δύο τιμών με χρήση των συναρτήσεων min() και max(), την απόλυτη τιμή ενός αριθμού με την abs(), της τετραγωνικής ρίζας με την sqrt() και την ύψωση σε δύναμη ενός αριθμού βάσης pow(). Επιπλέον διατίθενται δύο συναρτήσεις που χρησιμοποιούνται αρκετά συχνά στον έλεγχο των τιμών των αισθητήρων, ώστε να περιορίσουμε την τιμή που διαβάζεται από έναν αισθητήρα σε κάποιο αποδεκτό διάστημα τιμών με τη constrain() και να υπολογίσουμε μια τιμή σε διαφορετική κλίμακα απ ότι χρησιμοποιούμε με την map(). min(x,y) Υπολογίζει τον μικρότερο από δυο αριθμούς. Η σύνταξη της συνάρτησης είναι: min(x,y) όπου, x είναι ο πρώτος αριθμός, οποιουδήποτε τύπου δεδομένων και y είναι ο δεύτερος αριθμός, οποιουδήποτε τύπου και αυτός. Η min(x,y) επιστρέφει τον μικρότερο από τους δυο αριθμούς. sensval = min(sensval, 100); // εκχωρεί στη sensval τη // μικρότερη τιμή από τις // sensval και 100 // διασφαλίζοντας ότι ποτέ δε θα // πάρει τιμή μεγαλύτερη από 100 Σημείωση Η min() χρησιμοποιείται για να περιορίσει το ανώτερο άκρο του φάσματος τιμών που επιτρέπεται σε μια εφαρμογή. Προειδοποίηση Λόγω του τρόπου που υλοποιείται η συνάρτηση min(), αποφύγετε τη χρήση άλλων λειτουργιών μέσα στην παρένθεση, γιατί μπορεί να οδηγήσει σε λανθασμένα αποτελέσματα. min(a++, 100); // αποφύγετέ το γιατί μπορεί να οδηγήσει // σε λανθασμένα αποτελέσματα a++; min(a, 100); // χρησιμοποιήσετε αυτό, κρατώντας τα // μαθηματικά έξω από τη συνάρτηση 43

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

ΕΝΟΤΗΤΑ 3 ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ ΕΝΟΤΗΤΑ 3 ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ Σκοπός και περίγραμμα της Ενότητας 3 Σκοπός της παρουσίασης Να δούμε πιο προσεκτικά τις μεταβλητές, τις σταθερές και τις εκφράσεις γενικότερα. Να σας παρουσιάσουμε

Διαβάστε περισσότερα

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

ΕΝΟΤΗΤΑ 5 Αναλογικά σήματα ΕΝΟΤΗΤΑ 5 Αναλογικά σήματα Σκοπός και περίγραμμα της Ενότητας 5 Σκοπός της παρουσίασης Να δώσουμε τις βασικές ιδέες για τα αναλογικά σήματα και την χρήση διαφορετικών ειδών περιφερειακών Σύνοψη Επεξήγηση

Διαβάστε περισσότερα

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

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017) ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017) Περιγραφή της Άσκησης Ο σκοπός της πρώτης άσκησης είναι κυρίως η εξοικείωση με το περιβάλλον προγραμματισμού του Arduino, γι αυτό και δεν είναι ιδιαίτερα σύνθετη. Αρχικά, θα

Διαβάστε περισσότερα

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

Εφαρμογές Σειριακής Επικοινωνίας Εφαρμογές Σειριακής Επικοινωνίας Εισαγωγή Στο μάθημα αυτό θα μάθουμε πώς να χρησιμοποιούμε την βιβλιοθήκη serial για την επικοινωνία από την πλατφόρμα Arduino πίσω στον υπολογιστή μέσω της θύρας usb. Τι

Διαβάστε περισσότερα

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

ΣΤΟΙΧΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ARDUINO ΣΤΟΙΧΕΙΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ARDUINO Αντώνιος Καραγεώργος Βασικά Στοιχεία της Γλώσσας Προγραμματισμού Arduino Constants: HIGH/LOW Ορίζουν το επίπεδο της τάσης εισόδου/εξόδου ενός pin INPUT/OUTPUT Ορίζουν την

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ

ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ Σκοπός της άσκησης Οι φοιτητές θα εξοικειωθούν με την πλακέτα του μικροελεγκτή και θα αναγνωρίσουν τα βασικά της στοιχεία. Επίσης θα εξοικειωθούν

Διαβάστε περισσότερα

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

Ενσωματωμένα Συστήματα Ενσωματωμένα Συστήματα για εφαρμογές πραγματικού χρόνου Εφαρμογές με τον Arduino Ιωάννης Καλόμοιρος Αναπληρωτής Καθηγητής Τμήμα Μηχανικών Πληροφορικής Μάθημα 10 1 Συναρτήσεις αναλογικής εξόδου: PWM Το

Διαβάστε περισσότερα

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

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοινωνία. Σειριακή Επικοινωνία USB Σύνδεση / Πρωτόκολλο Σκοπός Εντολή επιλογής (if) Εντολή Επανάληψης (while) Πίνακες 1 Μέρος Α : Σκοπός

Διαβάστε περισσότερα

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

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 2: Βασικός Προγραμματισμός Arduino (AVR) Εργαστήριο Αυτομάτου Ελέγχου Η πλατφόρμα Arduino UNO Microcontroller: ATmega328 Operating Voltage: 5V Digital I/O

Διαβάστε περισσότερα

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

Ενσωματωμένα Συστήματα Ενσωματωμένα Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ ARDUINO Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

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

ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO. Υποψήφιος Διδάκτωρ ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO Δημιουργός: Επιβλέπων: Μπακάλη Ιωάννα Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ 1 ΤΙ ΕΙΝΑΙ ΤΟ ARDUINO; Είναι ένας συνδυασμός Υλικού (πλακέτας, μικροελεγκτή, αντιστάσεων κτλ) και Λογισμικού

Διαβάστε περισσότερα

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

Διαβάστε περισσότερα

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

Εφαρμογές Αναλογικών Ε/Ε PWM (pulse Width Modulation) Εφαρμογές Αναλογικών Ε/Ε PWM (pulse Width Modulation) Εισαγωγή Σε αυτή την ενότητα θα δούμε εφαρμογές που χρησιμοποιούν τις αναλογικές Εισόδους/Εξόδους του Arduino ή την τεχνική PWM. Ψηφιακό vs Αναλογικό

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Εφαρμογές αναλογικών / Ψηφιακών Εφαρμογές αναλογικών / Ψηφιακών 1 ΕΙΣΑΓΩΓΗ Σε αυτήν την ενότητα θα δούμε μερικές ακόμα εφαρμογές ψηφιακών / αναλογικών εισόδων/ εξόδων που μπορούμε να φτιάξουμε με την βοήθεια του Arduino, χρησιμοποιώντας

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΣΤΑΘΕΡΕΣ είναι τα μεγέθη που δεν μεταβάλλονται κατά την εκτέλεση ενός αλγόριθμου. Εκτός από τις αριθμητικές σταθερές (7, 4, 3.5, 100 κλπ), τις λογικές σταθερές (αληθής και ψευδής)

Διαβάστε περισσότερα

Μια πρόταση διδασκαλίας για το μάθημα του προγραμματισμού Η/Υ στο Λύκειο με τη μεθοδολογία STEM

Μια πρόταση διδασκαλίας για το μάθημα του προγραμματισμού Η/Υ στο Λύκειο με τη μεθοδολογία STEM Μια πρόταση διδασκαλίας για το μάθημα του προγραμματισμού Η/Υ στο Λύκειο με τη μεθοδολογία STEM Οδηγίες για την υλοποίηση της διδακτικής παρέμβασης 1η διδακτική ώρα: Υλοποίηση του φύλλου εργασίας 1 με

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Προγραμματισμο ς σε Arduino Προγραμματισμο ς σε Arduino Arduino UNO & Innoesys Educational Shield www.devobox.com Ηλεκτρονικά Εξαρτήματα & Υλικά Κατασκευής Πρωτοτύπων Λέανδρου 79, 10443, Κολωνός +30 210 51 55 513, info@devobox.com

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ Λογικός τύπος ( ) Ο τύπος είναι κατάλληλoς για την αναπαράσταση ποσοτήτων που μπορούν να πάρουν δύο μόνο τιμές (π.χ. ναι/όχι, αληθές/ψευδές, ). Τιμές ή Δήλωση Εκχώρηση Ισοδυναμία με ακέραιους

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Δρ. Π. Ασβεστάς Τμήμα Μηχανικών Βιοϊατρικής Τεχνολογίας Τ.Ε Ιατρικά Ηλεκτρονικά Δρ. Π. Ασβεστάς Τμήμα Μηχανικών Βιοϊατρικής Τεχνολογίας Τ.Ε Βιβλιογραφία B. Evans, Beginning Arduino Programming, 2011. J. Purdum, Beginning C for Arduino,Apress,2012. M. Margolis,

Διαβάστε περισσότερα

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 3ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΕΚΤΥΠΩΣΗ ΚΕΙΜΕΝΟΥ Ένα κείμενο μπορεί να εκχωρηθεί ως τιμή μιας μεταβλητής

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 5ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 Η ΕΝΤΟΛΗ for Με την εντολή for δημιουργούμε βρόχους επανάληψης σε

Διαβάστε περισσότερα

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

Μέτρηση Θερμοκρασίας με τον αισθητήρα TMP36. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων. Βασική δομή ενός προγράμματος στο LabVIEW. Σκοπός Μάθημα 2 Δραστηριότητα 1 Μέτρηση Θερμοκρασίας με τον αισθητήρα TMP36. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Βασική δομή ενός προγράμματος στο LabVIEW. Εμπρόσθιο Πλαίσιο (front panel). Σχεδίαση

Διαβάστε περισσότερα

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Εργαστήριο 3: 3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Η C++, όπως όλες οι γλώσσες προγραμματισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές και λογικές λειτουργίες.

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

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

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο, Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο, 2016-2017 Mηχανοτρονική Το Arduino είναι μια «ανοικτού κώδικα» πλατφόρμα «πρωτοτυποποιημένων» ηλεκτρονικών βασισμένη σε ευέλικτο και εύκολο στη χρήση

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

Διαβάστε περισσότερα

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Οι εντολές ελέγχου της ροής ενός προγράμματος. Κεφάλαιο ΙΙI: Οι εντολές ελέγχου της ροής ενός προγράμματος 31 Εντολές ελέγχου της ροής Στο παρόν κεφάλαιο ασχολούμαστε με την σύνταξη των εντολών της C οι οποίες εισάγουν λογική και ελέγχουν την ροή εκτέλεσης

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Πλακέτα Arduino. 1ο ΕΠΑΛ Περάματος - 7ο ΕΚ Πειραιά Πλακέτα Arduino Το 2005 oι Massimo Banzi και David Cueartielles στο Ivrea Δημιουργούν την υπολογιστική πλατφόρμα Arduino. Το Arduino είναι βασισμένο σε μια απλή μητρική πλακέτα ανοικτού κώδικα, με ενσωματωμένο

Διαβάστε περισσότερα

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

Γνωριμία με το Arduino Γνωριμία με το Arduino Τι είναι το Arduino; Το arduino είναι ένας μικρός υπολογιστής σε μέγεθος παλάμης που περιλαμβάνει ένα μικροελεγκτή (για εκτέλεση εντολών) και ένα σύνολο εισόδων/εξόδων για επικοινωνία

Διαβάστε περισσότερα

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

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016) ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016) Περιγραφή της Άσκησης Στόχος της άσκησης είναι η δημιουργία ενός συστήματος διαχείρισης φωτισμού. Μία φωτομεταβαλλόμενη αντίσταση (LDR) θα διαπιστώνει την ποσότητα του φωτός

Διαβάστε περισσότερα

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

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή: A. Tips 1. Τοποθέτηση σημαίας ή bit ενός καταχωρητή ή μεταβλητής... 2 2. Καθάρισμα σημαίας ή bit ενός καταχωρητή ή μεταβλητής... 2 3. Σύγκριση μονοδιάστατων πινάκων (στο παράδειγμα 5 στοιχείων)... 2 4.

Διαβάστε περισσότερα

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ. ΤΡΙΤΗ ΔΙΑΛΕΞΗ Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.): Σύνταξη τύπος όνομαα; τύπος όνομαβ{όνομαα}; όνομαβ

Διαβάστε περισσότερα

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

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 2: Βασικός Προγραμματισμός Arduino (AVR) Εργαστήριο Αυτομάτου Ελέγχου Η πλατφόρμα Arduino Microcontroller: ATmega328 Operating Voltage: 5V Digital I/O Pins:

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 8 η Δείκτες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

Διαβάστε περισσότερα

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

ΕΝΟΤΗΤΑ 12 ΣΕΙΡΙΑΚΗ ΔΙΕΠΑΦΗ ΕΝΟΤΗΤΑ 12 ΣΕΙΡΙΑΚΗ ΔΙΕΠΑΦΗ Στόχος και Περίγραμμα της Ενότητας 12 Στόχος της παρουσίασης Παρουσίαση της βασικής ιδέα και απλών παραδειγμάτων που δίνουν στο Arduino τη δυνατότητα να επικοινωνήσει με οποιαδήποτε

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

for for for for( . */

for for for for( . */ Εισαγωγή Στον Προγραµµατισµό «C» Βρόχοι Επανάληψης Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Ο βρόχος for Η εντολή for χρησιµοποιείται

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for) 4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for) 4.1 Μετρητές Ένας μετρητής (counter) είναι μία μεταβλητή η οποία ξεκινά με μία αρχική τιμή και αυξάνεται κατά ένα κάθε φορά που εκτελείται. Ο αλγόριθμος για έναν μετρητή

Διαβάστε περισσότερα

5ο σετ σημειώσεων - Δείκτες

5ο σετ σημειώσεων - Δείκτες 5ο σετ σημειώσεων - Δείκτες 11 Ιουνίου 01 1 Γενικά Σύμφωνα με το γενικό μοντέλο υπολογιστή, ένας υπολογιστής είναι μία μηχανή που διαθέτει μία κεντρική μονάδα επεξεργασίας η οποία μπορεί μεταξύ άλλων να

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

Διαβάστε περισσότερα

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Σύντομες εισαγωγικές σημειώσεις για την. Matlab Σύντομες εισαγωγικές σημειώσεις για την Matlab Δήλωση Μεταβλητών Για να εισάγει κανείς δεδομένα στη Matlab υπάρχουν πολλοί τρόποι. Ο πιο απλός είναι στη γραμμή εντολών να εισάγουμε αυτό που θέλουμε και

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 4 η Τελεστές Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

Διαβάστε περισσότερα

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης Εργαστήριο 6 Εντολές Επανάληψης Η δομή Επιλογής στη PASCAL H δομή Επανάληψης στη PASCAL. Ρεύμα Εισόδου / Εξόδου.. Ρεύμα Εισόδου / Εξόδου. To πρόγραμμα γραφικών gnuplot. Γραφικά στη PASCAL. Σκοπός 6.1 ΕΠΙΔΙΩΞΗ

Διαβάστε περισσότερα

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

Διαβάστε περισσότερα

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

Φύλλο εργασίας 9 - Αυτόνομο ρομποτικό όχημα αποφυγής εμποδίων Φύλλο εργασίας 9 - Αυτόνομο ρομποτικό όχημα αποφυγής εμποδίων Σε αυτήν τη δραστηριότητα θα κατασκευάσουμε ένα αυτόνομο ρομποτικό όχημα αποφυγής εμποδίων. Εκτός από τον μικροελεγκτή Arduino, το breadboard,

Διαβάστε περισσότερα

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

ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ ΟΙΚΟΝOΜΟΥ ΧΑΡΗΣ (6424) ΦΩΚΟΣ ΝΙΚΟΛΑΟΣ(6592) ΚΑΜΒΥΣΗΣ ΝΙΚΟΛΑΟΣ(7178) 2013-2014 ΠΕΡΙΕΧΟΜΕΝΑ Σκοπός της εργασίας Ανάλυση Arduino Uno Δημιουργία πληροφορίας Αποστολή και

Διαβάστε περισσότερα

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

Φύλλο εργασίας 7 - Δημιουργώ τα δικά μου χρώματα με το RGB LED Φύλλο εργασίας 7 - Δημιουργώ τα δικά μου χρώματα με το RGB LED Στην δραστηριότητα αυτή θα δουλέψουμε με το RGB LED για να παράγουμε μια μεγάλη ποικιλία χρωμάτων. Το RGB LED είναι στην ουσία τρία διαφορετικά

Διαβάστε περισσότερα

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

2. Δήλωση μεταβλητών. #include <avr/io.h> #include <util/delay.h> unsigned char i=0xa0; register unsigned char i asm(r3); 2. Δήλωση μεταβλητών Οι μεταβλητές είναι τα βασικά στοιχεία που διαπραγματεύεται ένα πρόγραμμα. Περιέχουν τιμές ή δεδομένα και μπορεί να έχουν μια σταθερή τιμή ή το περιεχόμενό τους να εξαρτάται από τις

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια: Εργαστήριο 6: 6.1 Δομές Επανάληψης Βρόγχοι (Loops) Όταν θέλουμε να επαναληφθεί μια ομάδα εντολών τη βάζουμε μέσα σε ένα βρόχο επανάληψης. Το αν θα (ξανα)επαναληφθεί η εκτέλεση της ομάδας εντολών καθορίζεται

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

Ψευδοκώδικας. November 7, 2011

Ψευδοκώδικας. November 7, 2011 Ψευδοκώδικας November 7, 2011 Οι γλώσσες τύπου ψευδοκώδικα είναι ένας τρόπος περιγραφής αλγορίθμων. Δεν υπάρχει κανένας τυπικός ορισμός της έννοιας του ψευδοκώδικα όμως είναι κοινός τόπος ότι οποιαδήποτε

Διαβάστε περισσότερα

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM). Μνήμες Ένα από τα βασικά πλεονεκτήματα των ψηφιακών συστημάτων σε σχέση με τα αναλογικά, είναι η ευκολία αποθήκευσης μεγάλων ποσοτήτων πληροφοριών, είτε προσωρινά είτε μόνιμα Οι πληροφορίες αποθηκεύονται

Διαβάστε περισσότερα

ΡΟΜΠΟΤΙΚΗ ΜΕ ARDUINO - ARDUINO ΚΑΙ ΗΧΟΣ I. Δημιουργός: Δρ.Αθανάσιος Μπαλαφούτης Επιβλέπων: Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ

ΡΟΜΠΟΤΙΚΗ ΜΕ ARDUINO - ARDUINO ΚΑΙ ΗΧΟΣ I. Δημιουργός: Δρ.Αθανάσιος Μπαλαφούτης Επιβλέπων: Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ ΡΟΜΠΟΤΙΚΗ ΜΕ ARDUINO - ARDUINO ΚΑΙ ΗΧΟΣ I Δημιουργός: Δρ.Αθανάσιος Μπαλαφούτης Επιβλέπων: Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ 1 ARDUINO ΚΑΙ ΗΧΟΣ ΠΕΡΙΕΧΟΜΕΝΑ Εισαγωγή, μηχανές παραγωγής ήχου Χρήση του πιεζοηλεκτρικού

Διαβάστε περισσότερα

Arduino Teachers Workshop

Arduino Teachers Workshop Arduino Teachers Workshop Εισαγωγή στο Arduino Προγραμματισμός στο Arduino IDE Επικοινωνία με τον υπολογιστή μέσω USB Πλακέτα εύκολων συνδέσεων Breadboard Projects Led Blink Αναλογική ανάγνωση Ποτενσιόμετρου

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 6 η Βρόχοι Επανάληψης Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

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

Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 1. Προγραμματισμός Φυσικών Συστημάτων. Νέα Ψηφιακά Αντικείμενα Σκοπός Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 1 ΜΕΤΡΩΝΤΑΣ ΑΠΟΣΤΑΣΗ ΜΕ ΤΟΝ ΑΙΣΘΗΤΗΡΑ ΥΠΕΡΗΧΩΝ (SR04). Ψηφιακά Αντικείμενα Μικροελεγκτής Προγραμματισμός Φυσικών Συστημάτων Νέα Ψηφιακά Αντικείμενα Αισθητήρες

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως

Διαβάστε περισσότερα

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 4: Τύποι Δεδομένων και τελεστές Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

Διαβάστε περισσότερα

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 4: Τελεστές Τελεστές: Τελεστής Ανάθεσης 2 Το σύμβολο της ανάθεσης είναι το = Προσοχή: το σύμβολο ελέγχου ισότητας είναι το ==. Η μορφή των προτάσεων ανάθεσης είναι:

Διαβάστε περισσότερα

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της; 1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες (μορφές) της; Η δομή επανάληψης χρησιμοποιείται όταν μια σειρά εντολών πρέπει να εκτελεστεί σε ένα σύνολο περιπτώσεων, που έχουν κάτι

Διαβάστε περισσότερα

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε

Διαβάστε περισσότερα

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

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 3: Βασικός Προγραμματισμός Arduino (AVR) (Συνέχεια) Εργαστήριο Αυτομάτου Ελέγχου Η πλατφόρμα Arduino Microcontroller: ATmega328 Operating Voltage: 5V Digital

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 3 η Είσοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

Δομές ελέγχου ροής προγράμματος

Δομές ελέγχου ροής προγράμματος Δομές ελέγχου ροής προγράμματος Υπάρχουν δύο είδη δομών ελέγχου ροής (control flow): Οι δομές επιλογής και Οι δομές επανάληψης Δομές ελέγχου ροής προγράμματος Είδος δομής Δομές επιλογής Δομή ελέγχου ροής

Διαβάστε περισσότερα

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

Διαβάστε περισσότερα

Ο βρόχος for Η εντολή for χρησιμοποιείται για τη δημιουργία επαναληπτικών βρόχων στη C

Ο βρόχος for Η εντολή for χρησιμοποιείται για τη δημιουργία επαναληπτικών βρόχων στη C Ο βρόχος for Η εντολή for χρησιμοποιείται για τη δημιουργία επαναληπτικών βρόχων στη C Επαναληπτικός βρόχος καλείται το τμήμα του κώδικα μέσα σε ένα πρόγραμμα, το οποίο εκτελείται από την αρχή και επαναλαμβάνεται

Διαβάστε περισσότερα

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

Διαβάστε περισσότερα

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

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 2: Βασικός Προγραμματισμός Arduino (AVR) Εργαστήριο Αυτομάτου Ελέγχου Η πλατφόρμα Arduino Microcontroller: ATmega328 Operating Voltage: 5V Digital I/O Pins:

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 4ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΟΙ ΤΕΛΕΣΤΕΣ ΣΥΓΚΡΙΣΗΣ Με τους τελεστές σύγκρισης, συγκρίνουμε τις

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Β Μέρος Δομή Ελέγχου if-elif-else Επαναληπτική Δομή Ελέγχου while Επαναληπτική Δομή Ελέγχου for Αλληλεπίδραση χρήστη-προγράμματος Συναρτήσεις Η δομή

Διαβάστε περισσότερα