Αντί να αναφερόμαστε σε μια συγκεκριμένη θέση στη μνήμη για να αποθηκεύσουμε δεδομένα (όπως γίνεται στη γλώσσα Assembly) η γλώσσα του Arduino χρησιμοποιεί απλές μεταβλητές που αντιπροσωπεύουν θέσεις μνήμης για την αποθήκευση δεδομένων.
Επειδή η γλώσσα Arduino βασίζεται στη γλώσσα C, η γλώσσα Arduino χρησιμοποιεί μεταβλητές όπως ορίζονται και χρησιμοποιούνται στη γλώσσα C.
Στη γλώσσα Arduino η δημιουργία μεταβλητών γίνεται σε δύο βήματα.
– Δήλωση της μεταβλητής για χρήση της στον κώδικα Arduino.
– Εκχώρηση δεδομένων στη μεταβλητή.
Δήλωση μεταβλητής
Κατά τη δήλωση μιας μεταβλητής ο μεταφραστής (compiler) αποθηκεύει το όνομα και άλλη πληροφορία σε ένα εσωτερικό πίνακα και έτσι ο μεταφραστής γνωρίζει τι μεταβλητές χρησιμοποιεί και πόσο χώρο καταλαμβάνουν στη μνήμη. Ωστόσο κατά την δήλωση μιας μεταβλητής, ο μεταφραστής (compiler) δεν εκχωρεί την μεταβλητή σε συγκεκριμένη θέση στη μνήμη, αυτό γίνεται αργότερα.
Το όνομα μιας μεταβλητής ορίζει την ετικέτα που χρησιμοποιούμε όταν θα αναφερθούμε σε αυτή τη θέση στη μνήμη, μέσα από τον κώδικα Arduino. Υπάρχει ένα σύνολο κανόνων που πρέπει να ακολουθούμε όταν δηλώνουμε το όνομα μιας μεταβλητής.
1] Το όνομα της μεταβλητής πρέπει να περιέχει μόνο γράμματα, αριθμούς, χαρακτήρες υπογράμμισης και δολαρίου.
2] Το όνομα μιας μεταβλητής πρέπει να ξεκινά με γράμμα.
3] Το όνομα μιας μεταβλητής ακολουθεί τον διαχωρισμό μικρών και κεφαλαίων γραμμάτων.
4] Δεν υπάρχει όριο για το μήκος του ονόματος μιας μεταβλητής.
Κατά τη δήλωση μιας μεταβλητής ορίζεται ο τύπος των δεδομένων που αποθηκεύονται στη μεταβλητή και το όνομα της μεταβλητής όλα μαζί σε μια έκφραση.
Ο τύπος δεδομένων που δηλώνεται κατά τον ορισμό μιας μεταβλητής, υποδηλώνει πόση μνήμη καταλαμβάνει για την αποθήκευση και ανάκτηση δεδομένων. Μπορούμε να χρησιμοποιήσουμε διάφορους τύπους για τον ορισμό μιας μεταβλητής όπως φαίνεται στον ακόλουθο πίνακα.
Data type Size Value Range
boolean 8-bit true or false
char 8-bit -128 to +127
byte 8-bit 0 to 255
int 16-bit -32.768 to 32.767
word 16-bit 0 to 65.535
long 32-bit -2.147.483.648 to 2.147.483.647
float 32-bit -3,4028235E+38 to 3,40282235E+38
double 32-bit -3,4028235E+38 to 3,40282235E+38
Μετά που δηλώσουμε τον τύπο για μια μεταβλητή, μόνο αυτός ο τύπος δεδομένων παρέχεται στη μεταβλητή. Για παράδειγμα, η έκφραση:
float percent;
δηλώνει μια μεταβλητή με τύπο float και όνομα percent.
Εκχώρηση τιμής σε μεταβλητή
Η δεύτερη διαδικασία του ορισμού μιας μεταβλητής είναι η εκχώρηση μιας τιμής στη ήδη δηλωμένη μεταβλητή. Για να εκχωρήσουμε μια τιμή σε μια μεταβλητή χρησιμοποιούμε τον τελεστή εκχώρησης π.χ
int length;
length = 100;
Σε αυτό το βήμα εκχώρησης τιμής σε μια μεταβλητή, έχουμε την πραγματική εκχώρηση της μεταβλητής σε μια θέση της μνήμης. Ο μεταφραστής ψάχνει για μια διαθέσιμη θέση στη μνήμη, τόση μεγάλη ώστε να κρατά το μέγεθος του τύπου της μεταβλητής και αποθηκεύει την εκχωρούμενη τιμή σε αυτή τη θέση της μνήμης.
Μπορείς να δηλώσεις τον τύπο μιας μεταβλητής και να της εκχωρήσεις μια τιμή σε ένα βήμα, όπως στο παρακάτω παράδειγμα:
float weigh = 6.7
Επίσης μπορείς να δηλώσεις μεταβλητές του ίδιου τύπου, σε ένα βήμα, όπως στο ακόλουθο παράδειγμα:
int a, b, c;
a=3; b=9; c=3;
Σταθερές μεταβλητές
Στη γλώσσα C και συνεπώς στη γλώσσα Arduino μπορούμε να χρησιμοποιήσουμε διαμορφωτές έτσι ώστε να τροποποιούμε τον τύπο δεδομένων μιας μεταβλητής. Ο διαμορφωτής const πριν από τον τύπο μιας μεταβλητής λέει στον μεταφραστή ότι η τιμή που εκχωρείται σε μια μεταβλητή δεν θα αλλάξει. Αυτοί οι τύποι τιμών ονομάζονται σταθερές (constants).
Στη γλώσσα Arduino συνηθίζεται τα ονόματα σταθερών μεταβλητών να γράφονται με κεφαλαία γράμματα π.χ.
const float TAX = 0.07;
Η βιβλιοθήκη του Arduino περιέχει διάφορες τιμές σταθερών, που ορίζονται με τιμές, που συνηθίζουμε να χρησιμοποιούμε στον κώδικα Arduino, όπως HIGH για την τιμή 1 και LOW για την τιμή 0.
Εμβέλεια μεταβλητών
Το τελευταίο χαρακτηριστικό των μεταβλητών που θα πρέπει να έχουμε ξεκαθαρίσει είναι η εμβέλεια τους. Η εμβέλεια μιας μεταβλητής καθορίζει που η μεταβλητή μπορεί να χρησιμοποιηθεί στον κώδικα Arduino. Υπάρχουν δυο επίπεδα της εμβέλειας:
– Τοπικές μεταβλητές
– Καθολικές μεταβλητές
Κατά τη δήλωση τοπικών μεταβλητών μέσα σε μια συνάρτηση, αυτές μπορούν να χρησιμοποιηθούν μόνο από αυτή τη συνάρτηση. Για παράδειγμα αν δηλώσουμε μια τοπική μεταβλητή μέσα στη συνάρτηση setup(), η τιμή αυτής της μεταβλητής είναι διαθέσιμη μόνο μέσα στη συνάρτηση setup(). Εάν προσπαθήσουμε να τη χρησιμοποιήσουμε στη συνάρτηση loop() θα πάρουμε ένα μήνυμα λάθους.
Σε αντίθεση, οι καθολικές μεταβλητές μπορούν να χρησιμοποιηθούν οπουδήποτε μέσα στον κώδικα Arduino. Συνήθως δηλώνουμε τις καθολικές μεταβλητές στην αρχή του κώδικα. Αν δηλώσουμε μια καθολική μεταβλητή μπορούμε να τη χρησιμοποιήσουμε στη συνάρτηση setup() ή στη συνάρτηση loop() ή σε οποιαδήποτε άλλη συνάρτηση που δημιουργούμε στον κώδικα. Κάθε φορά που εκχωρούμε μια τιμή σε μια καθολική μεταβλητή, μπορούμε να την ανακτούμε από οποιαδήποτε συνάρτηση μέσα στον κώδικα.
Συνήθως αποθηκεύουμε δεδομένα σε μεταβλητές για εκτέλεση αριθμητικών πράξεων. Μια αριθμητική πράξη αντιπροσωπεύεται από τον αριθμητικό τελεστή που δρα στις τιμές των μεταβλητών και το αποτέλεσμα να είναι μια αριθμητική τιμή. Οι αριθμητικοί τελεστές είναι οι γνωστές πράξεις δηλαδή η πρόσθεση η αφαίρεση, ο πολλαπλασιασμός, η διαίρεση και το υπόλοιπο διαίρεσης.
Δουλεύοντας με μεταβλητές
Μπορούμε να επεξεργαστούμε τα δεδομένα που υπάρχουν στην μνήμη με την χρήση των μεταβλητών. Δηλαδή μπορούμε να χειριστούμε τα δεδομένα της μνήμης με τις συνηθισμένες αριθμητικές πράξεις μεταξύ των μεταβλητών.
Για την δήλωση των πράξεων χρησιμοποιούμε τελεστές για να καθορίσουμε τις πράξεις που θέλουμε να κάνουμε με τις μεταβλητές και δεδομένα. Οι τελεστές χωρίζονται στις ακόλουθες κατηγορίες:
– Οι αριθμητικοί τελεστές για να κάνουμε αριθμητικές πράξεις με τις μεταβλητές και δεδομένα.
– Σχεσιακοί τελεστές για να συγκρίνουμε τα δεδομένα που είναι αποθηκευμένα στις μεταβλητές.
– Λογικοί τελεστές για πράξεις μεταξύ λογικών μεταβλητών και λογικών εκφράσεων.
Αριθμητικοί τελεστές
Με τα δεδομένα που έχουν εκχωρηθεί στις αριθμητικές μεταβλητές μπορούμε να κάνουμε αριθμητικές πράξεις όπως ορίζονται με τους αριθμητικούς τελεστές, δηλαδή όπως με τη γνωστή πρόσθεση, αφαίρεση, πολλαπλασιασμό, διαίρεση και υπόλοιπο διαίρεσης. Χρησιμοποιούμαι σύμβολα για να ορίσουμε την πράξη όπως φαίνεται στην ακόλουθη εικόνα
Τελεστής Περιγραφή
+ Πρόσθεση
- Αφαίρεση
* Πολλαπλασιασμός
/ Διαίρεση
% Υπόλοιπο διαίρεσης
Σχεσιακοί τελεστές
Χρησιμοποιούμε σχεσιακούς τελεστές για να συγκρίνουμε αριθμητικές τιμές μεταξύ τους, οι οποίες έχουν αποθηκευτεί σε μεταβλητές ή με σταθερά αριθμητικά δεδομένα. Οι σχεσιακοί τελεστές μεταξύ αριθμητικών δεδομένων, δίνουν εκφράσεις οι οποίες αντιπροσωπεύουν μια από τις δυο καταστάσεις true ή false.
Οι τελεστές που χρησιμοποιούνται στις σχεσιακές πράξεις μεταξύ αριθμών στη γλώσσα Arduino φαίνονται στον ακόλουθο πίνακα.
Τελεστής Περιγραφή
< μικρότερο από
> μεγαλύτερο από
<= μικρότερο από ή ίσο με
>= μεγαλύτερο από ή ισο με
Λογικοί τελεστές
Με τους λογικούς τελεστές κάνουμε λογικές πράξεις μεταξύ των λογικών μεταβλητών και λογικών εκφράσεων, που παίρνουν τιμές true ή false.
Σειρά εκτέλεσης Αριθμητικών πράξεων
Όπως συμβαίνει σε όλα τα υπολογιστικά συστήματα για την σειρά των μαθηματικών πράξεων, έτσι και στην γλώσσα Arduino ακολουθείται η ίδια τακτική. Για παράδειγμα, η εκχώρηση:
result = 4 + 3 * 3
ο μεταφραστής πρώτα θα εκτελέσει τον πολλαπλασιασμό 3 φορές το 3 και μετά προσθέτει το 4 σε αυτό το αποτέλεσμα, που δίνει την τελική τιμή 13 την οποία την εκχωρεί στη μεταβλητή result
Όπως στα μαθηματικά μπορείς να αλλάξεις τη σειρά των πράξεων χρησιμοποιώντας παρενθέσεις
result2 = (4 + 3) * 3
Τώρα ο μεταφραστής πρώτα προσθέτει το 4 και το 3 και μετά πολλαπλασιάζει το αποτέλεσμα με 3 δίνοντας μια τιμή ίση με 21.
Στη γλώσσα Arduino όπως στις άλλες γλώσσες μπορούμε να χρησιμοποιήσουμε όσα ζευγάρια παρενθέσεων χρειάζονται για τους υπολογισμούς μας.
Δημιουργία τυχαίων αριθμών
Κατά τη συγγραφή κώδικα, κάποιες φορές παρουσιάζεται η ανάγκη μια μεταβλητή να θέλουμε να παίρνει τυχαίες τιμές. Για παράδειγμα, αυτή η ανάγκη δημιουργείται όταν γράφουμε κώδικα για ένα ηλεκτρονικό ζάρι ή κάποιο άλλο παιχνίδι με το Arduino, που χρειάζεται οπτικά εφέ με LEDs.
Για την δημιουργία τυχαίου ακεραίου αριθμού χρησιμοποιούμε την συνάρτηση:
random(min, max+1)
Ο τυχαίος ακέραιος αριθμός που παράγεται από αυτή τη συνάρτηση βρίσκεται μεταξύ min και max. Σημειώστε ότι το δεύτερο όρισμα της συνάρτησης είναι το max+1 το οποίο δεν συμπεριλαμβάνεται στην περιοχή αριθμών. Με τον παρακάτω κώδικα το Arduino παράγεται μια τυχαία ακέραια τιμή από την περιοχή 100 έως 1000
int a=0;
a = random(100, 1001);
Για την δημιουργία ενός τυχαίου ακέραιου αριθμού μεταξύ 0 έως max+1, μπορείτε να δώσετε μόνο το πάνω όριο, όπως για παράδειγμα στην γραμμή κώδικα a = random(7); παράγεται ένας αριθμός μεταξύ 0 και 6.
Δυστυχώς το Arduino δεν έχει την δυνατότητα να επιλέξει ένα πραγματικά τυχαίο αριθμό. Μπορείτε να συμπεριλάβετε στον κώδικα σας μια τιμή seed ένα τυχαίο αρχικό αριθμό που χρησιμοποιείται στους υπολογισμούς για την δημιουργία ενός τυχαίου αριθμού από το Arduino.
Μπορείτε να ορίσετε ρητά ένα τρόπο αρχικοποίησης της γεννήτριας τυχαίων αριθμών, ξεκινώντας με ένα seed αριθμό, με την ακόλουθη γραμμή κώδικα:
randomSeed(seed);
από εσάς, αλλά ο απλούστερος τρόπος για την δημιουργία ενός τυχαίου αριθμού από το Arduino είναι να γράψετε κώδικα ο οποίος να ορίζει την τιμή seed σαν την τάση από ένα ασύνδετο αναλογικό πιν. Στην ακόλουθη γραμμή κώδικα επιδεικνύεται αυτή η μέθοδος χρησιμοποιώντας το αναλογικό πιν μηδέν.
randomSeed(analogRead(0));
Όταν το αναλογικό πιν δεν είναι συνδεμένο πουθενά, ο στατικός ηλεκτρισμός από το περιβάλλον δημιουργεί ελαφριά μετρήσιμη τάση. Η τιμή αυτής της τάσης μπορούμε να την ορίσουμε στη seed, για να παραχθεί ένας τυχαίος ακέραιος αριθμός στη περιοχή lower έως upper, με την χρήση της συνάρτησης random(lower, upper+1);