Το Serial Monitor είναι ένα από τα σημαντηκότερα εργαλεία του Arduino IDE 2. Επιτρέπει την επικοινωνία μεταξύ του υπολογιστή και της πλακέτας Arduino μέσω σειριακής σύνδεσης και χρησιμοποιείται τόσο για την εμφάνιση πληροφοριών από το Arduino προς τον υπολογιστή όσο και για την αποστολή δεδομένων από τον υπολογιστή προς το Arduino.
Η εμφάνισή του είναι απλή και οργανωμένη, καθώς παρέχει έναν χώρο όπου εμφανίζονται τα μηνύματα και οι τιμές που στέλνει το Arduino, ενώ διαθέτει επίσης πεδίο για την αποστολή δεδομένων προς την πλακέτα. Επιπλέον, μπορούμε να επιλέξουμε την ταχύτητα επικοινωνίας (baud rate) και τη μορφή με την οποία αποστέλλονται τα δεδομένα. Για να ανοίξουμε το παράθυρο του Serial Monitor του υπολογιστή πλοηγούμαστε ως εξής: Tools>Serial Monitor.
Με την βοήθεια του Serial Monitor μπορούμε για παράδειγμα να εμφανίζουμε τις τιμές ενός αισθητήρα, να ελεγχουμε αν ένα πρόγραμμα δουλεύει σωστά, να εντοπίζουμε σφάλματα, να παρακολουθούμε μεταβλητές κ.ά. Το περιβάλλον Arduino IDE 2 διαθέτει ενσωματωμένο Serial Monitor. Το Serial Monitor λειτουργεί σαν ένα παράθυρο αμφίδρομης σειριακής επικοινωνίας μεταξύ Arduino και Υπολογιστή.
Η συνάρτηση Serial.begin()
Πριν χρησιμοποιήσουμε τη σειριακή επικοινωνία, πρέπει να την αρχικοποιήσουμε. Η βασική εντολή γι’ αυτό το σκοπό είναι:
Serial.begin(9600);
Συνήθως τοποθετείται μέσα στη setup()
void setup() {
Serial.begin(9600);
}
Το 9600 είναι η ταχύτητα επικοινωνίας, γνωστή ως band rate και καθορίζει την ταχύτητα με την οποία πραγματοποιείται η σειριακή επικοινωνία. Συνηθισμένες τιμές είναι: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 Θα πρέπει να προσέξουμε ότι η ταχύτητα που χρησιμοποιεί το Arduino να αντιστοιχεί στη ρύθμιση ταχύτητας που έχουμε κάνει στο Serial Monitor
Το πρώτο μας πρόγραμμα
Ένα πολύ απλό πρόγραμμα αποστολής δεδομένων στο Serial Monitor είναι το ακόλουθο:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println(“Hello from Arduino”);
delay(1000);
}
Το πρόγραμμα αυτό χρησιμοποιεί την εντολή: Serial.println(“Hello from Arduino”); για να στείλει στο παράθυρο του Serial Monitor το αλφαριθμητικό: “Hello from Arduino” κάθε δευτερόλεπτο.
Η συνάρτηση Serial.print()
Η εντολή Serial.print() στέλνει δεδομένα χωρίς να προσθέσει αυτόματα αλλαγή γραμμής. Για παράδειγμα:
Serial.print(“Hello “);
Serial.print(“Arduino”);
θα εμφανίσει:
Hello Arduino
Η συνάρτηση Serial.println();
Η εντολή Serial.println() λειτουργεί όπως η Serial.print(), αλλά στο τέλος προσθέτει αλλαγή γραμμής. Για παράδειγμα:
Serial.println(“Hello”);
Serial.println(“Arduino”);
εμφανίζει στο Serial Monitor το αποτέλεσμα:
Hello
Arduino
Εμφάνιση ακεραίων αριθμών
Μπορούμε να εμφανίσουμε στο Serial Monitor την τιμή μιας μεταβλητής με την συνάρτηση println() όπως στο ακόλουθο παράδειγμα:
int counter = 10;
void setup(){
Serial.begin(9600);
Serial.println(counter);
}
void loop(){
}
και έχουμε το ακόλουθο αποτέλεσμα:
10
Εμφάνιση πολλών μεταβλητών
Για την εμφάνιση διαδοχικών δεδομένων στο Serial Monitor, όπως αλφαριθμηκών και τιμών μεταβλητών, πρέπει να χρησιμοποιούμε ξεχωριστές συναρτήσεις print() ή println()
int temperature = 25;
int humidity = 60;
void setup() {
Serial.begin(9600);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
void loop() {
}
Αυτό έχει ως αποτέλεσμα:
Temperature: 25 C
Humidity: 60 %
Εμφάνιση μεταβλητών τύπου float
Το Arduino μπορεί να εμφανίσει αριθμούς κινητής υποδιαστολής στο Serial Monitor όπως στο ακόλουθο παράδειγμα:
float voltage=3.14159
void setup() {
Serial.begin(9600);
Serial.println(voltage);
}
void loop() {
}
Μπορούμε επίσης να καθορίσουμε πόσα δεκαδικά ψηφία θέλουμε. π.χ η συνάρτηση Serial.println(voltage, 2);
θα εμφανίσει:
3.14
ενώ η συνάρτηση: Serial.println(voltage, 4); θα εμφανίσει:
3.1416
Εμφάνιση σε διαφορετικές αριθμητικές βάσεις
Οι Serial.print() και Serial.println() μπορούν να εμφανίσουν ακέραιους αριθμούς σε διαφορετικές βάσεις. Για παράδειγμα:
int number = 255;
void setup() {
Serial.begin(9600);
Serial.println(number);
Serial.println(number, DEC);
Serial.println(number, HEX);
Serial.println(number, OCT);
Serial.println(number, BIN);
}
void loop() {
}
Αυτό έχει το ακόλουθο αποτάλεσμα στο Serial Monitor
255
255
FF
377
11111111
Ακολουθεί ένας πίνακας βάσεων αριθμών που χρησιμοποιούνται στην πλατφόρμα Arduino
| Όνομα | Βάση | Περιγραφή |
| DEC | 10 | Δεκαδικό σύστημα |
| HEX | 16 | Δεκαεξαδικό σύστημα |
| OCT | 8 | Οκταδικό σύστημα |
| BIN | 2 | Δυαδικό σύστημα |
Παράδειγμα Binary
Για την εμφάνιση ακεραίων αριθμών σε δυαδική μορφή, έχουμε το ακόλουθο παράδειγμα:
int value = 10;
void setup() {
Serial.begin(9600);
Serial.print("Decimal: ");
Serial.println(value, DEC);
Serial.print("Binary: ");
Serial.println(value, BIN);
}
void loop() {
}
Έχουμε το αποτέλεσμα:
Decimal: 10
Binary: 1010
Αυτό είναι ιδιαίτερα χρήσιμο όταν δουλεύουμε με: bit, registers, flags, ψηφιακά πρωτόκολλα, low-level προγραμματισμό.
Η συνάρτηση Serial.write()
Η συνάρτηση Serial.write() είναι διαφορετική από την Serial.print(). Η συνάρτηση print() είναι σχεδιασμένη για αναγνωσιμη μορφή κειμένου, ενώ η write() στέλνει δεδομένα bytes σε μορφή χαρακτήρων ASCII.
Για παράδειγμα η συνάρτηση με όρισμα την τιμή 65 και συγκεκριμένα η Serial.write(65); στέλνει το byte 65 όπου το ASCII 65 αντιστοιχει στον χαρακτήρα Α. Έτσι το Serial Monitor μπορεί να εμφανίσει:
Α
Η συνάρτηση Serial.write() με χαρακτήρα
Η συνάρτηση Serial.write(‘A’) στέλνει τον χαρακτήρα Α. Για παράδειγμα:
void setup() {
Serial.begin(9600);
Serial.write('H');
Serial.write('i');
}
void loop() {
}
Έχουμε το αποτέλεσμα:
Hi
Η συνάρτηση Serial.write() με πίνακα bytes
Μπορούμε να στείλουμε έναν πίνακα bytes στο Serial Monitor, όπως στο ακόλουθο παράδειγμα:
byte data[] = {65, 66, 67, 68};
void setup() {
Serial.begin(9600);
Serial.write(data, 4);
}
void loop() {
}
Στο Serial Monitor έχουμε το αποτέλεσμα:
ABCD
Στον κώδικα αυτό το data είναι ένας δείκτης στην πρώτη τιμή του πίνακα data[] ο οποίος έχει 4 στοιχεία τύπου byte. Η Serial.write() είναι ιδιαίτερα σημαντική όταν επικοινωνούμε με άλλες συσκευές μέσω πρωτοκόλλων όπου τα δεδομένα δεν είναι απλό κείμενο.