Πίνακας περιεχομένων:

Αποστολή αριθμητικών δεδομένων από το ένα Arduino στο άλλο: 16 βήματα
Αποστολή αριθμητικών δεδομένων από το ένα Arduino στο άλλο: 16 βήματα

Βίντεο: Αποστολή αριθμητικών δεδομένων από το ένα Arduino στο άλλο: 16 βήματα

Βίντεο: Αποστολή αριθμητικών δεδομένων από το ένα Arduino στο άλλο: 16 βήματα
Βίντεο: CS50 2014 - Week 7 2024, Ιούλιος
Anonim
Αποστολή αριθμητικών δεδομένων από το ένα Arduino στο άλλο
Αποστολή αριθμητικών δεδομένων από το ένα Arduino στο άλλο

Εισαγωγή

από τον David Palmer, CDIO Tech. στο Πανεπιστήμιο Άστον.

Χρειάστηκε ποτέ να στείλετε μερικούς αριθμούς από το ένα Arduino στο άλλο; Αυτό το Instructable δείχνει πώς.

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

Τι κάνει

Δύο προγράμματα Arduino (σκίτσα στο Arduino μιλούν) πρέπει να αναπτυχθούν, ένα πρόγραμμα Master για σύνδεση με τον κεντρικό υπολογιστή που τρέχει το Arduino Serial Monitor, ένα για να λειτουργήσει ως Slave για να λάβει το σειριακό μήνυμα από το Master, να το αποκωδικοποιήσει και να το στείλει πίσω. Ο υποτελής είναι προαιρετικά ικανός να εμφανίζει τους αριθμούς με τους οποίους ασχολείται σε σειριακό μόνιτορ δεύτερης IDE - σε περίπτωση που θέλετε να το χρησιμοποιήσετε. Μπορεί να βοηθήσει να λειτουργήσουν τα πράγματα καταρχάς και να σας βοηθήσει εάν αποφασίσετε να κάνετε οποιεσδήποτε αλλαγές στα προγράμματα που ταιριάζουν στις δικές σας απαιτήσεις.

Εξοπλισμός

  • 2 του Arduino
  • 2 καλώδια USB
  • συρματόπλεγμα (όπως απαιτείται)
  • 1 υπολογιστής/φορητός υπολογιστής φορτωμένος με Arduino IDE (διαθέσιμο ως δωρεάν λήψη από τον ιστότοπο Arduino.cc)

Βήμα 1: Ρύθμιση - Ρυθμίστε πρώτα το υλικό σας

Ρύθμιση - Ρυθμίστε πρώτα το υλικό σας
Ρύθμιση - Ρυθμίστε πρώτα το υλικό σας
Ρύθμιση - Ρυθμίστε πρώτα το υλικό σας
Ρύθμιση - Ρυθμίστε πρώτα το υλικό σας

Συνδέστε τα 2 Arduinos σε 2 θύρες USB του υπολογιστή σας.

Συμβουλή, είναι καλή ιδέα να τα χαρακτηρίσετε ως M και S (κύριος και σκλάβος) για να μην μπλέξετε αργότερα (όπως φαίνεται στις 2 φωτογραφίες εδώ.)

Βήμα 2: Ρύθμιση - Ρύθμιση της οθόνης σας

Ρύθμιση - Ρύθμιση της οθόνης σας
Ρύθμιση - Ρύθμιση της οθόνης σας

Το καλύτερο πράγμα είναι να ρυθμίσετε την οθόνη σας έτσι ώστε να έχετε

  • το IDE φορτωμένο με το πρόγραμμα Master στα αριστερά και
  • ότι με τον Σκλάβο στα δεξιά.

Διατηρήστε επίσης τις σειριακές οθόνες για Maser και Slave στα αριστερά και τα δεξιά, όπως φαίνεται στο στιγμιότυπο οθόνης εδώ.

Βήμα 3: Ρυθμίστε το Master End και, στη συνέχεια, Συνδεθείτε μαζί - Μέρος 1

Ρυθμίστε το Master End και, στη συνέχεια, Συνδεθείτε μαζί - Μέρος 1
Ρυθμίστε το Master End και, στη συνέχεια, Συνδεθείτε μαζί - Μέρος 1

Όταν ρυθμίζετε το Master End Serial Monitor για αποστολή δύο αριθμών, πρέπει πάντα να χρησιμοποιείτε τους χαρακτήρες έναρξης και λήξης, οριοθέτησης και τον χαρακτήρα διαχωριστή με κόμμα, όπως βλέπετε εδώ.

Τώρα πρέπει να συνδέσετε τα 2 Arduino μαζί με σειριακό. Αυτό γίνεται με δύο καλώδια μπαλωμάτων.

Χρησιμοποίησα πράσινο και κίτρινο

  • Πάρτε το κίτρινο πρώτα, αυτό πρέπει να συνδεθεί στο D6 σε ένα Arduino και στο D7 στο δεύτερο
  • Στη συνέχεια, το αντίθετο για το πράσινο σύρμα, D7 στο πρώτο και D6 στο δεύτερο Arduino.

Εναλλακτικά, εάν έχετε κάτι διαθέσιμο σαν ένα ζευγάρι μονάδων Bluetooth - όπως το HC -05 - αυτά θα λειτουργήσουν επίσης για να σας δώσουν ακριβώς το ίδιο αποτέλεσμα με τα παραπάνω καλώδια.

Βήμα 4: Ρυθμίστε το Master End και, στη συνέχεια, Συνδεθείτε μαζί - Μέρος 2

Ρυθμίστε το Master End και, στη συνέχεια, Συνδεθείτε μαζί - Μέρος 2
Ρυθμίστε το Master End και, στη συνέχεια, Συνδεθείτε μαζί - Μέρος 2
Ρυθμίστε το Master End και, στη συνέχεια, Συνδεθείτε μαζί - Μέρος 2
Ρυθμίστε το Master End και, στη συνέχεια, Συνδεθείτε μαζί - Μέρος 2

Χρησιμοποιούμε τη βιβλιοθήκη σειριακού λογισμικού. Περισσότερες πληροφορίες είναι διαθέσιμες με αυτόν τον σύνδεσμο

Μπορείτε να το δείτε να καλείται στη γραμμή 7 οποιουδήποτε από τα προγράμματα. Διαμορφώνει τις ψηφιακές ακίδες 7 και 6 ως TX και RX (μετάδοση και λήψη). Αυτός είναι ο τρόπος με τον οποίο τα δεδομένα θα ταξιδέψουν έξω από το Master Arduino μέσω του πράσινου καλωδίου στο Slave και, όταν το πρόγραμμα Slave στο δεύτερο Arduino έχει τελειώσει τη δουλειά του, πίσω μέσω του κίτρινου καλωδίου. Στο κάτω μέρος της ίδιας εικονογράφησης (στο παράθυρο Serial Monitor) μπορείτε να δείτε ότι τα δεδομένα που μεταδώσαμε έχουν πλέον περάσει με επιτυχία στον βρόχο που περιγράφεται εδώ και επιστρέψουν στον υπολογιστή καθώς το ζεύγος ακεραίων διαχωρίζεται όμορφα.

Βήμα 5: Επισκόπηση των Σκίτσων / Προγραμμάτων - Δομή του Προγράμματος

Επισκόπηση των Σκίτσων / Προγραμμάτων - Δομή του Προγράμματος
Επισκόπηση των Σκίτσων / Προγραμμάτων - Δομή του Προγράμματος
Επισκόπηση των Σκίτσων / Προγραμμάτων - Δομή του Προγράμματος
Επισκόπηση των Σκίτσων / Προγραμμάτων - Δομή του Προγράμματος

Διάταξη Όπως σε όλα τα σκίτσα Arduino υπάρχουν 3 βασικά μέρη:

  • Οι Διακηρύξεις
  • Το Setup
  • Ο κύριος βρόχος

Όπως συμβαίνει συχνά, έχουμε χρησιμοποιήσει εδώ μια 4η ενότητα που είναι η προσθήκη των "Λειτουργιών". Εάν δεν είστε εξοικειωμένοι με τη χρήση των λειτουργιών, μπορείτε να κάνετε Google για "λειτουργίες Arduino" και θα βρείτε ιστότοπους επεξήγησης όπως το παράδειγμα σε αυτόν τον σύνδεσμο: www.tutorialspoint.com/arduino/arduino_functions…. Το

Έχουμε επίσης χρησιμοποιήσει καρτέλες για να διαχωρίσουμε το πρόγραμμα σε πιο διαχειρίσιμα μπλοκ.

Τα τρία μπλοκ που χρησιμοποιήσαμε μπορούν να εμφανιστούν στην κορυφή κάθε εικόνας των παραθύρων IDE παραπάνω:

  • simpleRxTx0330Master
  • κοινός
  • σημειώσεις

Αυτά είναι στην πραγματικότητα ξεχωριστά αρχεία μέσα στο φάκελο του προγράμματος, όπως μπορείτε να δείτε σε αυτήν την προβολή των Windows Explorer των αρχείων του προγράμματος Slave.

Υπάρχει ένας πολύ καλός λόγος για τον οποίο το κάναμε αυτό.

  • Καθώς χτίζαμε το πρόγραμμα, συνειδητοποιήσαμε ότι το μεγαλύτερο μέρος του προγράμματος για τον Δάσκαλο ήταν το ίδιο με αυτό του Δούλου.
  • Καταλήξαμε να τραβήξουμε όλα τα κοινά μέρη σε μια καρτέλα, την οποία επομένως ονομάσαμε "κοινή" και, στη συνέχεια, κάθε φορά που διορθώσαμε ένα μέρος (το δοκιμάσαμε και ήμασταν ικανοποιημένοι ότι λειτούργησε εντάξει) απλώς αντιγράψαμε και επικολλήσαμε ολόκληρη αυτήν την καρτέλα απέναντι από το Master to Slave ή αντίστροφα.
  • Οι καρτέλες σημειώσεων τυχαίνει επίσης να είναι πανομοιότυπες, καθώς ο σχεδιασμός είναι γενικός.

Καμία από τις συναρτήσεις δεν καλείται από εγκατάσταση, όλες καλείται από βρόχο, οπότε τις έχουμε δημιουργήσει μετά την εγκατάσταση αλλά πριν από τον βρόχο.

Βήμα 6: Σχεδιασμός από πάνω προς τα κάτω

Είναι καλή ιδέα να σχεδιάσετε το σκίτσο σας ξεκινώντας με έναν ορισμό του τι θέλετε να κάνετε.

Μόλις το έχετε αυτό, μπορείτε να αρχίσετε να κάνετε το σκίτσο να κάνει αυτά τα πράγματα. Γενικά, εάν υπάρχει μια λεπτομέρεια που δεν ξέρετε πώς να κάνετε ακόμα, απλώς κάντε τη συνάρτηση και αφήστε τη δημιουργία της συνάρτησης μέχρι αργότερα.

Αυτό ακολουθεί την καλή σχεδιαστική φιλοσοφία, που διδάσκεται σε πολλά Πανεπιστήμια, που ονομάζεται CDIO (Εάν δεν το γνωρίζετε ήδη, μπορείτε να το κάνετε στο Google και να βρείτε ιστότοπους που να το εξηγούν όπως: https://www.cdio.org/s.) Αυτό βασικά λέει: Μην ξεκινάτε το Σχέδιο προτού καταστήσετε σαφές το Concept. Μην ξεκινήσετε την εφαρμογή μέχρι να έχετε ξεκαθαρίσει το σχέδιο. Μην περιμένετε να λειτουργήσει πριν να έχετε ξεκαθαρίσει την εφαρμογή. C πρώτα, στη συνέχεια D, I και O. Σε κάθε επόμενο στάδιο επαναλαμβάνετε (επιστρέψτε στον βρόχο), οπότε μόλις είστε ευχαριστημένοι με τον αρχικό σας βρόχο σχεδίασης και ελέγξτε ότι εξακολουθεί να πληροί την έννοια και ενημερώστε το C αν χρειαστεί. Και ούτω καθεξής, οπότε ακόμα και όταν φτάσετε στο Λειτουργία, πηγαίνετε μέχρι την κορυφή και δείτε ξανά πώς φαίνεται το C τώρα, μετά το D και εγώ, και κάντε και ελέγξτε όλα Με σκίτσα προγραμματισμού αυτό λειτουργεί ακριβώς το ίδιο εάν σχεδιάζετε από πάνω προς τα κάτω.

Βήμα 7: Έννοια και Σχεδιασμός - Μέρος 1

Έννοια και Σχεδιασμός - Μέρος 1
Έννοια και Σχεδιασμός - Μέρος 1
Έννοια και Σχεδιασμός - Μέρος 1
Έννοια και Σχεδιασμός - Μέρος 1

Η έννοια εδώ μοιάζει με τις απαιτήσεις περιγράμματος που αναφέρονται στην καρτέλα "σημειώσεις"."

Το σχέδιο θα μπορούσε να μοιάζει με μια πρώιμη έκδοση του βρόχου, που ταιριάζει με την καρτέλα σημειώσεις και θα μπορούσε να μοιάζει με αυτό που βλέπετε σε αυτό το σχήμα

Δείτε πώς μου αρέσει να ξεκινάω με το CTRL-C να αντιγράφω πρώτα τα σχόλια στο κεφάλι του βρόχου και μετά να αρχίσω να συμπληρώνω τα κενά με εντολές που θα κάνουν αυτά τα πράγματα.

Αυτό συγκεντρώνει πραγματικά το OK όπως μπορείτε να δείτε στο κάτω μέρος της οθόνης στο σχήμα. Αυτό φτάνει από το στάδιο CDIO D στο I, και καθώς αναπτύσσουμε τον κώδικα, είναι καλή ιδέα να συνεχίσουμε αυτόν τον βρόχο D-I.

Τώρα ήρθε η ώρα να περάσουμε στο επόμενο στάδιο, υπάρχει ένα σχόλιο που λέει ότι: // θα λάβουμε κάτι από το USB υλικού και μετά θα το μεταδώσουμε στο σειριακό κανάλι του λογισμικού. Γράφουμε αυτόν τον κωδικό για να συμβεί αυτό - οι γραμμές 133 έως 138 εμφανίζονται εδώ με κίτρινο highlighter

Βήμα 8: Έννοια και Σχεδιασμός - Μέρος 2

Έννοια και Σχεδιασμός - Μέρος 2
Έννοια και Σχεδιασμός - Μέρος 2
Έννοια και Σχεδιασμός - Μέρος 2
Έννοια και Σχεδιασμός - Μέρος 2

Οι δύο πρώτες δύο συναρτήσεις που εισάγουμε εδώ είναι (recv () και tran () για τη λήψη από τη θύρα υλικού και τη μετάδοση στη θύρα λογισμικού - καλώντας τις με τις παραμέτρους "hw" ή "sw" που εμφανίζονται.

Εκτός από αυτά, έχουμε προσθέσει μια δοκιμή σε μια παγκόσμια μεταβλητή που ονομάζεται newData. Αυτή είναι μια σημαία που θα ορίσουμε μέσα στη συνάρτηση "void recv ();". Όταν ληφθεί ένα μήνυμα, αυτή η μεταβλητή επισημαίνεται από false σε true. Το κάνουμε αυτό έτσι ώστε να μεταδίδουμε ένα μήνυμα μόνο εάν έχει ληφθεί (σημαία == αληθινή) στη γραμμή 134. Και μόλις μεταδώσουμε το μήνυμά μας ότι «έχει γίνει δουλειά», έτσι καθαρίζουμε ξανά τη σημαία σε ψευδή στη γραμμή 137.

Και πάλι μπορούμε να ελέγξουμε τη μεταγλώττιση (D έως I) και αυτή τη φορά έχουμε ένα μήνυμα σφάλματος "δεν έχει δηλωθεί" (εμφανίζεται). Αυτό μας λέει ότι δεν έχουμε δηλώσει το recv (). λειτουργία. Σχεδιάζουμε να το κάνουμε αυτό αργότερα, οπότε προς το παρόν για να μπορέσουμε να αποκτήσουμε ένα καθαρό μεταγλωττιστή πρέπει να δημιουργήσουμε μια ομοίωση ή συνάρτηση κράτησης θέσης, όπως φαίνεται παρακάτω.

Και πάλι μπορούμε να ελέγξουμε τη μεταγλώττιση (D έως I) και αυτή τη φορά έχουμε ένα άλλο μήνυμα σφάλματος "δεν έχει δηλωθεί" για το tran (). λειτουργία. Αυτό χρειάζεται μια παρόμοια δημιουργία στέλεχος. Και πάλι μπορούμε να ελέγξουμε τη μεταγλώττιση (D έως I) και αυτή τη φορά θα διαπιστώσουμε ότι λειτουργεί τέλεια. μέχρι εδώ καλά.

Βήμα 9: Ολοκληρώστε τον κύριο βρόχο: Α) Λήψη από USB, Β) Λήψη από Slave Arduino

Ολοκληρώστε τον κύριο βρόχο: Α) Λήψη από USB, Β) Λήψη από Slave Arduino
Ολοκληρώστε τον κύριο βρόχο: Α) Λήψη από USB, Β) Λήψη από Slave Arduino
Ολοκληρώστε τον κύριο βρόχο: Α) Λήψη από USB, Β) Λήψη από Slave Arduino
Ολοκληρώστε τον κύριο βρόχο: Α) Λήψη από USB, Β) Λήψη από Slave Arduino

Υπάρχει ένα τελευταίο κομμάτι που έχουμε προσθέσει για να ολοκληρώσουμε αυτό το μέρος, το οποίο είναι η προσθήκη κάποιου κώδικα εντοπισμού σφαλμάτων.

Υπάρχει ένα άλλο εγχειρίδιο σχετικά με το σκίτσο εντοπισμού σφαλμάτων στο οποίο μπορεί να γίνει αναφορά για να καταλάβετε τι κάναμε εδώ και γιατί. Ανατρέξτε στο Instructable "Πώς να δημιουργήσετε και να δοκιμάσετε τα σκίτσα Arduino μέχρι να λειτουργήσουν"

Αυτές οι γραμμές εντοπισμού σφαλμάτων [εμφανίζονται 136-139] προστίθενται στη συνέχεια στον κύριο βρόχο και, ιδού, μπορείτε να τις δοκιμάσετε στο Master end κάνοντας την μεταβλητή εντοπισμού σφαλμάτων αληθινή και Μεταγλώττιση (Ι), τότε εάν συνδέετε ένα Arduino επάνω που μπορείτε να ανεβάσετε, ανοίξτε τη Σειριακή οθόνη και δείτε αν αυτό που επιστρέφει στην Σειριακή οθόνη είναι όπως φαίνεται εδώ (βλέπετε ότι έχει προστεθεί το μήνυμα "DEBUG MODE";)

Βήμα 10: Λήψη και χειρισμός των δεδομένων στο Slave Arduino

Λήψη και χειρισμός των δεδομένων στο Slave Arduino
Λήψη και χειρισμός των δεδομένων στο Slave Arduino
Λήψη και χειρισμός των δεδομένων στο Slave Arduino
Λήψη και χειρισμός των δεδομένων στο Slave Arduino

Λήψη από τον Slave Arduino

Προσθέστε τον απαραίτητο κωδικό για το δεύτερο κανάλι στον κύριο βρόχο, τον σειριακό δέκτη του λογισμικού όπως φαίνεται - γραμμές 149 έως 155.

Μπορείτε να δείτε ότι η δομή βασίζεται χαλαρά σε αυτό που γράψαμε παραπάνω για την κύρια περίπτωση;

Επίσης, θα δείτε ότι λαμβάνουμε ένα σφάλμα μεταγλωττιστή, μια άλλη αδήλωτη συνάρτηση - αυτή τη φορά parseData (); - έτσι πρέπει να κάνουμε ένα στέλεχος και για αυτό, προτού μπορέσουμε να εκτελέσουμε μια δοκιμαστική μεταγλώττιση χωρίς σφάλματα.

Χειρισμός των δεδομένων στο Slave Arduino

Προσθέστε τον κύριο βρόχο που απαιτείται για το Arduino εάν έχει διαμορφωθεί ως συσκευή Slave όπως φαίνεται - γραμμές 163 έως 174. Βλέπετε ότι η δομή του είναι πολύ παρόμοια με αυτή του πρώτου καναλιού;

Και θα πρέπει να βρείτε αυτή τη φορά να συντάσσεται εντάξει.

Βήμα 11: Γράψτε τη λειτουργία λήψης

Γράψτε τη λειτουργία λήψης
Γράψτε τη λειτουργία λήψης

Η συνάρτηση λήψης - void recv (char from) {} - έχει δύο κύριες εργασίες.

1 για να λάβετε μια σειρά χαρακτήρων από το κανάλι USB και

2 για να λάβετε ένα από το κανάλι Arduino στο Arduino.

Για το πρώτο θα πρέπει να το χρησιμοποιήσουμε επειδή χρησιμοποιεί το ενσωματωμένο υλικό UART του Arduino και για το δεύτερο χρησιμοποιώντας την τυπική βιβλιοθήκη Arduino: λογισμικό UART.

Όταν αρχίζουμε να προσθέτουμε κώδικα σε μια συνάρτηση - για να δημιουργήσουμε μια συνάρτηση που κάνει κάτι, αντί για ένα στέλεχος - πρέπει να θυμόμαστε να αφαιρέσουμε ή να σχολιάσουμε το στέλεχος που αντικαθιστά. Διαφορετικά, λαμβάνουμε ένα σφάλμα μεταγλώττισης: αναφορά του "void lrec (char)".

Δοκιμάστε να λάβετε το σφάλμα και, στη συνέχεια, δοκιμάστε έναν από τους τρόπους που προτείνονται παραπάνω για να το απαλλαγείτε.

Ξεκινήστε με μια συνάρτηση που μοιάζει με αυτήν που δείχνουμε εδώ των γραμμών 75 έως 88 με κίτρινο χρώμα.

Μέχρι τώρα γνωρίζετε ότι έχοντας κώδικα θα πρέπει να δοκιμάσετε τη λειτουργία Compile. Σας βγάζει ένα σφάλμα, όπως αυτά που είχαμε νωρίτερα, του τύπου: το όνομα της συνάρτησης δεν δηλώνεται σε αυτό το πεδίο. Θα χρειαστούμε αρχικά ένα άλλο στέλεχος για να μπορέσουμε να μεταγλωττίσουμε το παρελθόν αυτού του σφάλματος, οπότε προσθέστε ένα όπως πριν, και βεβαιωθείτε ότι μπορείτε τώρα να λάβετε μια μεταγλώττιση χωρίς σφάλματα.

Τώρα ας ρίξουμε μια ματιά στον κώδικα που έχουμε γράψει για τη συνάρτηση recv ().

Είναι αρκετά καθαρό, μπορείτε να δείτε τη χρήση της συνθήκης "εάν" για να δημιουργήσετε τα δύο μέρη της συνάρτησης που αναφέρθηκε παραπάνω.

Ο κώδικας μέσα στο τμήμα «sw» και στο τμήμα «hw» είναι της ίδιας μορφής και θα τον περιγράψω εδώ.

Το πρώτο από το ζεύγος γραμμών σε κάθε περίπτωση είναι η αρχή ενός βρόχου while. Εάν δεν είστε εξοικειωμένοι με το χρόνο, μπορείτε να το αναζητήσετε στον ιστότοπο Arduino.cc/Reference για επεξήγηση και παραδείγματα. Εδώ περιμένουμε 'ενώ' η ενσωματωμένη 'Serial' συνάρτηση δεν έχει λάβει κανένα χαρακτήρα (ους) και επειδή η μεταβλητή newData έχει απενεργοποιηθεί (δηλαδή η ψευδής συνθήκη newData == είναι αληθής). Μόλις ληφθεί ένας χαρακτήρας - ή περισσότεροι από ένας χαρακτήρες - ο χρόνος θα "πέσει" στη δεύτερη γραμμή αυτού του ζεύγους. Αυτό θα καλέσει στη συνέχεια το recAstringChar (char). λειτουργία για τον χειρισμό του τρέχοντος χαρακτήρα. Αυτό το ζεύγος γραμμών στη συνέχεια θα εναλλάσσεται ενώ (ή για όσο διάστημα) υπάρχουν ακόμη χαρακτήρες που απαιτούνται ακόμη λήψεις. Μόλις τελειώσουν όλα τελειώνει η κατάσταση while, επιτρέποντας το αν ή αλλιώς το επόμενο επίπεδο να τελειώσει, και με τη σειρά του επιτρέποντας το rec (char). λειτουργία να τελειώσει. Έτσι, ελήφθη τώρα ένα πλήρες μήνυμα.

Βήμα 12: Γράψτε την υπο -λειτουργία Λήψη - Μέρος 1

Γράψτε τη συνάρτηση λήψης - Μέρος 1
Γράψτε τη συνάρτηση λήψης - Μέρος 1
Γράψτε τη συνάρτηση λήψης - Μέρος 1
Γράψτε τη συνάρτηση λήψης - Μέρος 1

Τώρα πρέπει να γράψουμε τη συνάρτηση που ονομάζεται recAstringChar (char). Το Βλέπετε από το σχόλιο στη γραμμή 50 εδώ στο επάνω μέρος του, ότι η δουλειά του είναι να ενημερώσει δύο buffer με αντίγραφα του εισερχόμενου σειριακού μηνύματος. [Αποδείχθηκε ότι προσπαθούσα να λειτουργήσω όλο αυτό, ένα πράγμα που έμαθα ήταν ότι χρειαζόμουν δύο διαφορετικά buffer - ή τουλάχιστον αυτός ήταν ο ευκολότερος τρόπος για να ξεπεράσω κάποια προβλήματα, επομένως εξελίχθηκε κάπως σε ανάγκη 2 buffers, έτσι Μόλις τα έφτιαξα.] Κάλεσα το ένα buffer: receData και το άλλο: receChars.

Τα buffer είναι καθολικές μεταβλητές, επομένως δηλώνονται σε επίπεδο ενότητας, βλέπε γραμμές 9 και 10 της κοινής καρτέλας. Υπάρχουν άλλες μεταβλητές που δηλώνονται μέσα σε αυτήν τη συνάρτηση και επομένως έχουν τοπική εμβέλεια- φαίνεται στις γραμμές 51-54 εδώ. Αυτό δεν είναι το μέρος για να εξηγήσετε τις διαφορές μεταξύ παγκόσμιων και ντόπιων, αλλά υπάρχουν περισσότερες πληροφορίες σχετικά με αυτό στη διεύθυνση https://www.arduino.cc/glossary/el/ στην περιοχή Local and Global.

Μπορείτε επίσης να μάθετε τα πάντα για τους τύπους δεδομένων και τους τροποποιητές τύπου: στατικά, boolean, byte, const, char σε https://www.arduino.cc/reference/en/#variables, που εμφανίζονται εδώ.

Η κύρια ροή προγράμματος σε αυτήν τη συνάρτηση ελέγχεται από το εάν στη γραμμή 56 εδώ και το αντίστοιχο άλλο στη γραμμή 74. Αυτό αφορά δύο σενάρια

α) [από τη γραμμή 74 και μετά] όταν ξεκινά το ληφθέν μήνυμα. Αυτό συμβαίνει όταν εντοπίζεται το startMarker - έχει οριστεί ως ο χαρακτήρας '<', γι 'αυτό κάθε φορά που δοκιμάζουμε το σκίτσο ξεκινάμε πάντα τη συμβολοσειρά μας με αυτόν τον χαρακτήρα. Εάν δεν το κάνουμε, τότε τίποτα δεν θα υποβληθεί σε επεξεργασία ως ληφθέν, θα αγνοηθεί όλα σαν να πληκτρολογούμε ανοησίες στη γραμμή πληκτρολογίου «Serial Monitor».

β) [γραμμές 56 έως 73] που λαμβάνει όλους τους άλλους χαρακτήρες, όποιοι και αν είναι, αλλά ασχολούνται μόνο με χαρακτήρες αφού έχει συμβεί μια έγκυρη έναρξη (έχει ληφθεί ένα '>' όπως στο α) παραπάνω.)

Σε αυτές τις γραμμές (από 74 έως 78) βάζουμε αυτό που λαμβάνεται <σε ένα από τα buffer (receData [0]) αλλά όχι στο άλλο. Ρυθμίζουμε τον δείκτη buffer (μεταβλητή: char ndx) για να δείξει στην επόμενη εφεδρική θέση buffer (ληφθέντα δεδομένα [1]) χρησιμοποιώντας την εντολή post-increment (++) στη γραμμή ndx ++;, και ορίσαμε τη σημαία σε εξέλιξη σε true.

Η ροή προγράμματος σε αυτό το μέρος της συνάρτησης ελέγχεται από το εάν στη γραμμή 57 εδώ και το αντίστοιχο άλλο στη γραμμή 65. Αυτό αφορά δύο σενάρια

α) [από τη γραμμή 65 και μετά] όταν τελειώσει το ληφθέν μήνυμα. Αυτό συμβαίνει όταν εντοπιστεί το endMarker - ορίζεται ως>, γι 'αυτό κάθε φορά που δοκιμάζουμε το σκίτσο μας τελειώνουμε πάντα τη συμβολοσειρά μας με αυτόν τον χαρακτήρα. Ένα από τα πράγματα που συμβαίνει όταν λαμβάνεται ο τελικός χαρακτήρας είναι ότι η καθολική σημαία (τεχνικά μεταβλητή) newData έχει οριστεί αληθινός όπως τελειώνει η συνάρτηση, έτσι ώστε η συνάρτηση που κάλεσε την υπο-συνάρτηση μας (η λειτουργία κλήσης: recv (char);) μπορεί να "γνωρίζει" ότι τα έγκυρα νέα δεδομένα έχουν ληφθεί πλήρη.

β) [γραμμές 57 έως 64] που λαμβάνει όλους τους άλλους χαρακτήρες, όποιοι και αν είναι αυτοί. Απλώς τα παρκάρει τακτοποιημένα σε σειρές και στα δύο buffer.

Βήμα 13: Γράψτε τη συνάρτηση λήψης - Μέρος 2

Γράψτε τη συνάρτηση λήψης - Μέρος 2
Γράψτε τη συνάρτηση λήψης - Μέρος 2
Γράψτε τη συνάρτηση λήψης - Μέρος 2
Γράψτε τη συνάρτηση λήψης - Μέρος 2

Θα μπορούσε να βοηθήσει να δώσουμε ένα παράδειγμα για το πώς μοιάζουν τα 2 buffer όταν έχουν συμπληρωθεί. Εάν πληκτρολογούσαμε το enter, τα buffer θα είχαν τους χαρακτήρες:

Έτσι, τώρα μπορείτε να δείτε ότι έχουμε ένα buffer που είναι ακριβώς όλοι οι ίδιοι χαρακτήρες με το πρώτο γράψαμε και ένα buffer που έχει μόνο τις δύο τιμές και ένα διαχωριστικό κόμμα. Τώρα έχουμε κάποιον κώδικα που μπορεί να λάβει τους χαρακτήρες που πληκτρολογούμε στο πληκτρολόγιο Serial Monitor, μπορούμε να μετακινηθούμε από τη φάση I του CDIO στο O, πληκτρολογώντας μερικές συμβολοσειρές και βλέποντας τι συμβαίνει. Ανεβάστε τον κώδικα στο Master Arduino, ανοίξτε το Serial Monitor και δοκιμάστε να πληκτρολογήσετε κάτι έγκυρο, όπως το enter. Λαμβάνετε ηχώ στην οθόνη Serial Monitor όπως αυτή που εμφανίζεται εδώ;

Βήμα 14: Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης

Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης
Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης
Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης
Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης

Πρώτα για τη Μετάδοση

Έτσι, τώρα έχουμε λάβει μια συμβολοσειρά, μπορούμε να γράψουμε τη συνάρτηση μετάδοσης: tran (char); να αντικαταστήσει το στέλεχος του. Αυτό θα μας επιτρέψει να στείλουμε μια συμβολοσειρά από το Master στο Slave Arduino, οπότε βεβαιωθείτε ότι και οι δύο συσκευές είναι συνδεδεμένες και συνδεδεμένες μεταξύ τους για να δοκιμάσετε αυτήν τη νέα λειτουργικότητα.

Εισαγάγετε αυτήν τη λειτουργία όπως φαίνεται εδώ στις γραμμές 117 έως 133. Όπως θα αναγνωρίσετε, έχει δύο μέρη, ένα για μετάδοση στο κανάλι USB (υλικό UART) και ένα για μετάδοση στο άλλο Arduino (λογισμικό UART.) Αυτό θα πρέπει να μεταγλωττίσει σφάλμα -δωρεάν, και μπορείτε να ανεβάσετε αμέσως το σκίτσο και να δείτε τι συμβαίνει. Αυτή τη φορά θα στείλω. Παίρνετε το αποτέλεσμα που εμφανίζεται;

Η λήψη οθόνης είναι ενδιαφέρουσα επειδή η συμβολοσειρά Received… θα πρέπει να φαίνεται σωστή όπως πριν και η συμβολοσειρά Transmission… θα πρέπει τώρα να φαίνεται σωστή. Ωστόσο, σημειώστε ότι η μετατροπή του ακέραιου αριθμού δεν λειτούργησε. Υπάρχει ακόμα λίγος κώδικας για να προσθέσετε για να λειτουργήσει.

Βήμα 15: Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης

Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης
Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης
Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης
Γράψτε τις συναρτήσεις μετάδοσης και ανάλυσης

Στη συνέχεια για το Parse

Αυτό είναι ένα κομμάτι κώδικα που αναλύει τη συμβολοσειρά που ελήφθη για την ανάκτηση των αριθμητικών μερικών συμβολοσειρών και τις μετατρέπει σε ακέραιες τιμές. Είναι το κενό parseData ()? συνάρτηση του κύριου βρόχου

Αντικαταστήστε το στέλεχος ανάλυσης με τον κωδικό που εμφανίζεται στις γραμμές 98 - 113. Μεταφορτώστε το και ας δούμε αν το πρόβλημα που αντιμετωπίζαμε με τις 2 ακέραιες τιμές έχει διορθωθεί τώρα. Ας δοκιμάσουμε.

Ναι, λειτουργεί, όπως φαίνεται, οι ακέραιοι αριθμοί που βρέθηκαν είναι 49 και 98.

Βήμα 16: Τελικό

Φινάλε!
Φινάλε!

Αυτά τα δεδομένα έχουν περάσει ακριβώς από το βρόχο από τον υπολογιστή μέσω του Master μέσω του βοηθού και πάλι πίσω μέσω του Master ξανά στον υπολογιστή. Με την τελική έκδοση του κοινού που έχει μεταφορτωθεί τόσο στο Master όσο και στο slave, και με απενεργοποιημένη τη λειτουργία εντοπισμού σφαλμάτων τώρα, βλέπουμε τα δεδομένα που έχουν ληφθεί σωστά και στα δύο άκρα, όπως φαίνεται εδώ.

Συνιστάται: