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

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

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

Στο επόμενο παράδειγμα, διαδοχικοί ακέραιοι αριθμοί στέλνονται από το 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);
}

Όταν το ανεβάσουμε στο 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 για απρόβλεπτα δεδομένα, για να το ετοιμάσει να δεχτεί τα δεδομένα που θέλουμε.