6. Επικοινωνία με το Serial Monitor

Αποστολή δεδομένων στο Serial Monitor

Το Serial Monitor, είναι μια πρόσθετη δυνατότητα του Arduino IDE. Με αυτό μπορούμε να προβάλουμε δεδομένα, τα οποία στέλνει το Arduino, σε ένα αναδευόμενο παράθυρο του PC. Επίσης μπορούμε να στείλουμε δεδομένα από τον προσωπικό μας υπολογιστή στο Arduino, διαμέσου της θύρας USB και μέσω του αντίστοιχου IC driver στη σειριακή θύρα του AVR μικροελεγκτή του Arduino.

Για να στείλουμε δεδομένα από το Arduino στο Serial Monitor πρέπει πρώτα να αρχικοποιήσουμε την επικοινωνία εισάγωντας την συνάρτηση: Serial.begin(9600); μέσα στην συνάρτηση setup(). Για να στείλουμε μια γραμμή κειμένου, από το Arduino, χρησιμοποιούμε την εντολή:

Serial.print(“My number is”);

Ενώ για να στείλουμε τα δεδομένα μιας μεταβλητής που π.χ. την έχουμε ορίσει προηγουμένως σαν int x = 32; γράφουμε μέσα στις συναρτήσεις setup() ή loop() την εντολή:

Serial.print(x);

Αν θέλουμε αμέσως μετά την αποστολή των δεδομένων, να αλλάξουμε γραμμή στο Serial Monitor θα γράφαμε:

Serial.println(x);

Στο επόμενο παράδειγμα, διαδοχικοί ακέραιοι αριθμοί στέλνονται από το Arduino στο Serial Monitor.

#Project – Sending data to Serial Monitor
int num = 0;
void setup()
{
      Serial.begin(9600);
}
void loop ()
{
       Serial.print(num);
       Serial.print(“ multiplied by two is “);
       Serial.println(num*2);
       num++;
}

Μετά που ανεβάσουμε τον προηγούμενο κώδικα στο Arduino, για δούμε πως προβάλλονται τα δεδομένα, θα πρέπει πρώτα να έχουμε ενεργοποιήσει το Serial Monitor με ένα από τους ακόλουθους τρόπους:

1] Από το μενού Εργαλεία > Παρακολούθηση σειριακής.
2] Πιέστε τον συνδυασμό πλήκτρων Ctrl + Shift + M.
3] Κάνε κλικ στο εικονίδιο στην εργαλειοθήκη του Serial Monitor.

Αν έχεις επιλέξει τη σωστή σειριακή πόρτα ώστε το PC να μπορεί να επικοινωνεί με το Arduino χρησιμοποιώντας μια USB σύνδεση, ένα αναδυόμενο παράθυρο εμφανίζεται, το ονομαζόμενο Serial Monitor, όπου προβάλλονται τα δεδομένα που στέλνει το Arduino στο PC

Πέντε επιλογές είναι διαθέσιμες στο κάτω μέρος του παραθύρου του Serial Monitor:

1] Αυτόματη κύλιση. Με αυτή την επιλογή, τα δεδομένα μέσα στο παράθυρο του Serial Monitor κυλίονται αυτόματα όταν γεμίσει με δεδομένα, για να μπορέσει να προβάλει τα υπόλοιπα.
2] Επίδειξη χρονοσήμανσης. Με αυτή την επιλογή το Serial Monitor προβάλει την ώρα που εισέρχονται και προβάλλονται τα δεδομένα.
3] Χαρακτήρας τέλους γραμμής. Καθώς στέλνουμε δεδομένα από τον προσωπικό υπολογιστή στο Arduino, καθώς τα πληκτρολογούμε πάνω στη πρώτη γραμμή και πατάμε “αποστολή”, ένα χαρακτήρας τέλους θα σταλθεί στο τέλος της αποστολής. Μπορεί να είναι UNIX-style χαρακτήρας ή Window-style χαρακτήρας ή κανένας χαρακτήρας αλλαγής γραμμής.
4] Baud Rate. Με αυτή την επιλογή ορίζουμε την ταχύτητα επικοινωνίας του Serial Monitor με το Arduino. Θα πρέπει να συμφωνεί με το όρισμα της συνάρτησης Serial.begin() του κώδικα που γράψαμε για το Arduino. Η συνάρτηση Serial.begin() μέσα στο εσωτερικό της συνάρτησης setup(), ορίζει και αρχικοποιεί την επικοινωνία του Arduino με το Serial Monitor.

Αποστολή δεδομένων από το Serial Monitor στο Arduino

Μπορούμε να στείλουμε δεδομένα από το Serial Monitor στο Arduino με τον εξής τρόπο: πληκτρολογούμε τα δεδομένα στην πρώτη γραμμή στο πάνω μέρος του Serial Monitor και πατάμε το πλήκτρο “Αποστολή”. Τότε αμέσως τα δεδομένα μεταφέρονται στο serial buffer, μια σειριακή μνήμη στην οποία “ακούει” το Arduino.

Με την συνάρτηση Serial.available() το Arduino καταλαβαίνει εάν υπάρχουν δεδομένα στο serial buffer. Αν Serial.available()>0 σημαίνει ότι υπάρχουν χαρακτήρες στο serial buffer και τους διαβάζει με την συνάρτηση Serial.read().

Αν Serial.available()==0 τότε το Arduino καταλαβαίνει ότι δεν υπάρχουν διαθέσιμοι χαρακτήρες στο serial buffer.

Για να καταλάβουμε πως επικοινωνεί το Serial Monitor με το Arduino ας δούμε τον ακόλουθο κώδικα, στον οποίο το Arduino δέχεται ψηφία, τα πολλαπλασιάζει επί 2 και ανεβάζει το αποτέλεσμα στο παράθυρο του Serial Monitor.

// Project – Myltiplying a Number by Two
int number;
void setup()
{
     Serial.begin(9600);
}
void loop()
{
      number = 0;  //zero the incoming number ready for a new read
      Serial.flush(); // clear any “junk” out of the serial buffer before waiting
      while(Serial.available()==0)
      {
           //do nothing until something enters the serial buffer
      }
      while(Serial.available()>0)
      {
           number = Serial.read()-'0';
           //read the number in the serial buffer
           //remove the ASCII text offset for zero: ‘0’
      }
      // Show me the number!
      Serial.print(“You entered:    “);
      Serial.println(number);
      Serial.print(“   multiplied by two is “);
      number = number * 2;
      Serial.println(number);
}

Η πρώτη έκφραση while εκτελείται όταν η συνάρτηση Serial.available() επιστρέφει μηδέν και το Arduino μπαίνει σε αδράνεια μέχρι αυτή η συνάρτηση επιστέψει μη μηδενική τιμή. Τώρα μπαίνει στο μπλοκ εντολών στον οποίο διαβάζει τον αριθμό που βρίσκεται στο serial buffer. Η τιμή που διαβάζει είναι ο κωδικός ASCII του χαρακτήρα που υπάρχει στο serial buffer.

Η συνάρτηση Serial.flush στην αρχή του κώδικα, καθαρίζει το serial buffer για απρόβλεπτα δεδομένα, για να το ετοιμάσει να δεχτεί τα δεδομένα που θέλουμε.