Μήνυμα#
Εισαγωγή#
Δύο ρομπότ κωδικοποίησης VEX AIM μπορούν να συνδεθούν, ώστε να μπορούν να επικοινωνούν κατά τη διάρκεια ενός έργου. Οι μέθοδοι μηνυμάτων επιτρέπουν σε ένα ρομπότ να στέλνει ένα μήνυμα στο άλλο ρομπότ. Ένα μήνυμα μπορεί να περιλαμβάνει κείμενο από μόνο του ή κείμενο με έως και τρεις αριθμούς.
Τα ληφθέντα μηνύματα αποθηκεύονται σε μια ουρά FIFO (first-in, first-out). Αυτό σημαίνει ότι το πρώτο μήνυμα που λαμβάνεται είναι το πρώτο μήνυμα που θα διαβαστεί.
Χρησιμοποιήστε την εντολή is_message_available για να ελέγξετε εάν ένα μήνυμα είναι έτοιμο για ανάγνωση. Στη συνέχεια, χρησιμοποιήστε την εντολή get_message για να διαβάσετε το επόμενο μήνυμα κειμένου. Εάν το μήνυμα περιλαμβάνει επίσης αριθμούς, χρησιμοποιήστε την εντολή get_message_and_data για να διαβάσετε το κείμενο και τους αριθμούς μαζί.
Σημείωση: Για να είναι δυνατή η αποστολή και η λήψη μηνυμάτων, και τα δύο ρομπότ πρέπει να είναι συνδεδεμένα και τα δύο ρομπότ πρέπει να εκτελούν έργα που χρησιμοποιούν μεθόδους μηνυμάτων.
Παρακάτω είναι μια λίστα με όλες τις μεθόδους:
Ενέργεια — Αποστολή μηνυμάτων μεταξύ ρομπότ.
send_message— Στέλνει κείμενο και έως τρεις αριθμούς στο συνδεδεμένο ρομπότ.
Λήπτες — Διαβάστε μηνύματα ή ελέγξτε την κατάσταση σύνδεσης.
get_message— Επιστρέφει το επόμενο ληφθέν μήνυμα κειμένου.get_message_and_data— Επιστρέφει το επόμενο ληφθέν μήνυμα κειμένου και τους αριθμούς.is_connected— Επιστρέφει εάν το ρομπότ είναι συνδεδεμένο με άλλο ρομπότ.is_message_available— Επιστρέφει εάν ένα μήνυμα είναι διαθέσιμο για ανάγνωση.get_name— Επιστρέφει το όνομα του συνδεδεμένου ρομπότ.
Επανακλήσεις — Εκτέλεση συναρτήσεων όταν προκύπτουν συμβάντα μηνυμάτων.
handle_message— Εκτελεί μια συνάρτηση όταν λαμβάνεται ένα συγκεκριμένο μήνυμα.connected— Εκτελεί μια συνάρτηση όταν το ρομπότ είναι συνδεδεμένο με ένα άλλο ρομπότ.disconnected— Εκτελεί μια συνάρτηση όταν το ρομπότ δεν είναι πλέον συνδεδεμένο με άλλο ρομπότ.
Δράση#
send_message#
send_message στέλνει κείμενο και έως τρεις αριθμούς στο συνδεδεμένο ρομπότ. Χρησιμοποιήστε αυτήν τη μέθοδο σε ένα ρομπότ όταν το άλλο ρομπότ χρειάζεται να λάβει μια εντολή, σήμα ή μια σύντομη πληροφορία. Στείλτε κείμενο μόνο του όταν το μήνυμα είναι αρκετό από μόνο του. Προσθέστε αριθμούς όταν το μήνυμα χρειάζεται σχετικές τιμές, όπως αποστολή “heading” με την τρέχουσα τιμή επικεφαλίδας του ρομπότ.
Στο ρομπότ λήψης, χρησιμοποιήστε την εντολή is_message_available για να ελέγξετε ότι έχει φτάσει ένα μήνυμα. Στη συνέχεια, χρησιμοποιήστε την εντολή get_message για ένα μήνυμα μόνο κειμένου ή την εντολή get_message_and_data για ένα μήνυμα που περιλαμβάνει αριθμούς.
Usage:
robot.link.send_message(message, arg1, arg2, arg3)
Παράμετρος |
Περιγραφή |
|---|---|
|
Το κείμενο που θα σταλεί στο συνδεδεμένο ρομπότ. |
|
Προαιρετικό. Ένας αριθμός για αποστολή με το μήνυμα. |
|
Προαιρετικό. Ένας δεύτερος αριθμός για αποστολή με το μήνυμα. |
|
Προαιρετικό. Ένας τρίτος αριθμός για αποστολή με το μήνυμα. |
Παράδειγμα
Κωδικός για Ρομπότ 1
# Press the screen to tell Robot 2 which way to turn
robot.screen.print("Robot 1")
while not robot.screen.pressing():
wait(5, MSEC)
robot.link.send_message("right")
Κωδικός για Ρομπότ 2
# Turn in the direction that Robot 1 sends
robot.screen.print("Robot 2")
while not robot.link.is_message_available():
wait(5, MSEC)
direction = robot.link.get_message()
if direction == "left":
robot.turn_for(LEFT, 90)
elif direction == "right":
robot.turn_for(RIGHT, 90)
# Robot 1: continuously send the current heading to Robot 2
robot.screen.print("Robot 1")
while True:
robot.link.send_message("heading", robot.inertial.get_heading())
wait(50, MSEC)
# Robot 2: turn to match Robot 1's heading
robot.screen.print("Robot 2")
while True:
if robot.link.is_message_available():
message, heading = robot.link.get_message_and_data()
robot.turn_to(heading)
wait(50, MSEC)
Αποκτητές#
get_message#
get_message επιστρέφει το επόμενο ληφθέν μήνυμα κειμένου από την ουρά μηνυμάτων. Χρησιμοποιήστε αυτήν τη μέθοδο στο ρομπότ λήψης όταν το συνδεδεμένο ρομπότ έστειλε ένα μήνυμα μόνο κειμένου. Μια συνηθισμένη εντολή είναι να χρησιμοποιήσετε την is_message_available για να ελέγξετε ότι έχει φτάσει ένα μήνυμα και, στη συνέχεια, να χρησιμοποιήσετε get_message πριν εμφανίσετε, συγκρίνετε ή χρησιμοποιήσετε το επιστρεφόμενο κείμενο με άλλη μέθοδο.
Χρησιμοποιήστε την εντολή send_message στο άλλο ρομπότ για να στείλετε ένα μήνυμα μόνο κειμένου.
Usage:
robot.link.get_message(timeout)
Παράμετρος |
Περιγραφή |
|---|---|
|
Προαιρετικό. Ο μέγιστος χρόνος αναμονής, σε χιλιοστά του δευτερολέπτου, για ένα μήνυμα πριν από τη συνέχιση. Η προεπιλογή είναι |
Παράδειγμα
Κωδικός για Ρομπότ 1
# Press the screen to send a message to Robot 2
robot.screen.print("Robot 1")
while not robot.screen.pressing():
wait(5, MSEC)
robot.link.send_message("Hello, Robot 2!")
Κωδικός για Ρομπότ 2
# Display the message sent by Robot 1
robot.screen.print("Robot 2")
robot.screen.next_row()
while not robot.link.is_message_available():
wait(5, MSEC)
message = robot.link.get_message()
robot.screen.print(message)
get_message_and_data#
get_message_and_data επιστρέφει το επόμενο ληφθέν μήνυμα κειμένου και τους αριθμούς από την ουρά μηνυμάτων ως πλειάδα. Χρησιμοποιήστε αυτήν τη μέθοδο στο ρομπότ λήψης όταν το συνδεδεμένο ρομπότ έστειλε κείμενο με έναν ή περισσότερους αριθμούς. Μια συνηθισμένη σειρά είναι να χρησιμοποιήσετε is_message_available για να ελέγξετε ότι έχει φτάσει ένα μήνυμα και, στη συνέχεια, να χρησιμοποιήσετε get_message_and_data πριν χρησιμοποιήσετε το επιστρεφόμενο κείμενο και τους αριθμούς.
Χρησιμοποιήστε την εντολή send_message στο άλλο ρομπότ για να στείλετε το κείμενο και τους αριθμούς μαζί.
Usage:
robot.link.get_message_and_data(timeout)
Παράμετρος |
Περιγραφή |
|---|---|
|
Προαιρετικό. Ο μέγιστος χρόνος αναμονής, σε χιλιοστά του δευτερολέπτου, για ένα μήνυμα πριν από τη συνέχιση. Η προεπιλογή είναι |
Παράδειγμα
Κωδικός για Ρομπότ 1
# Continuously send the current heading to Robot 2
robot.screen.print("Robot 1")
while True:
robot.link.send_message("heading", robot.inertial.get_heading())
wait(50, MSEC)
Κωδικός για Ρομπότ 2
# Turn to match Robot 1's heading
robot.screen.print("Robot 2")
while True:
if robot.link.is_message_available():
message, heading = robot.link.get_message_and_data()
robot.turn_to(heading)
wait(50, MSEC)
is_connected#
Η συνάρτηση is_connected επιστρέφει εάν το ρομπότ είναι συνδεδεμένο με άλλο ρομπότ. Χρησιμοποιήστε αυτήν τη μέθοδο πριν από την αποστολή ή την αναμονή μηνυμάτων εάν το έργο χρειάζεται να ελέγξει ότι η σύνδεση ρομπότ προς ρομπότ είναι έτοιμη.
True— Το ρομπότ είναι συνδεδεμένο με ένα άλλο ρομπότ.False— Το ρομπότ δεν είναι συνδεδεμένο με άλλο ρομπότ.
Usage:
robot.link.is_connected()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Display whether the robot is connected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
robot.screen.print(robot.link.is_connected())
wait(50, MSEC)
is_message_available#
is_message_available επιστρέφει εάν ένα μήνυμα περιμένει στην ουρά μηνυμάτων. Χρησιμοποιήστε αυτήν τη μέθοδο πριν από το get_message ή το get_message_and_data, έτσι ώστε το ρομπότ λήψης να προσπαθεί να διαβάσει ένα μήνυμα μόνο αφού έχει φτάσει ένα.
True— Υπάρχει ένα μήνυμα διαθέσιμο για ανάγνωση.False— Δεν υπάρχουν διαθέσιμα μηνύματα για ανάγνωση.
Usage:
robot.link.is_message_available()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
Παράδειγμα
Κωδικός για Ρομπότ 1
# Press the screen to send a message to Robot 2
robot.screen.print("Robot 1")
while not robot.screen.pressing():
wait(5, MSEC)
robot.link.send_message("Hello, Robot 2!")
Κωδικός για Ρομπότ 2
# Wait until a message is available, then display it
robot.screen.print("Robot 2")
robot.screen.next_row()
while not robot.link.is_message_available():
wait(5, MSEC)
message = robot.link.get_message()
robot.screen.print(message)
get_name#
Η συνάρτηση get_name επιστρέφει το όνομα του συνδεδεμένου ρομπότ. Χρησιμοποιήστε αυτήν τη μέθοδο για να δείξετε ποιο ρομπότ είναι συνδεδεμένο πριν από την αποστολή ή τη λήψη μηνυμάτων. Εάν δεν υπάρχει συνδεδεμένο ρομπότ, αυτή η μέθοδος επιστρέφει None.
Usage:
robot.link.get_name()
Παράμετροι |
Περιγραφή |
|---|---|
Αυτή η μέθοδος δεν έχει παραμέτρους. |
# Display the name of the linked robot
robot.screen.print(robot.link.get_name())
Επανακλήσεις#
handle_message#
handle_message καταχωρεί μια συνάρτηση που εκτελείται όταν το ρομπότ λαμβάνει ένα συγκεκριμένο μήνυμα κειμένου. Χρησιμοποιήστε αυτήν τη μέθοδο όταν το ρομπότ θα πρέπει να απαντήσει αυτόματα σε ένα γνωστό μήνυμα αντί να ελέγξει την ουρά μηνυμάτων σε έναν βρόχο. Ορίστε πρώτα τη συνάρτηση επανάκλησης και, στη συνέχεια, καταχωρήστε την με handle_message και το κείμενο του μηνύματος που θα παρακολουθείτε.
Usage:
robot.link.handle_message(callback, message)
Παράμετρος |
Περιγραφή |
|---|---|
|
Μια προηγουμένως καθορισμένη συνάρτηση που εκτελείται όταν το ληφθέν μήνυμα ταιριάζει με το |
|
Το κείμενο για τον έλεγχο των εισερχόμενων μηνυμάτων. |
Παράδειγμα
Κωδικός για Ρομπότ 1
# Press the screen to send "smile" to Robot 2
robot.screen.print("Robot 1")
while not robot.screen.pressing():
wait(5, MSEC)
robot.link.send_message("smile")
Κωδικός για Ρομπότ 2
# Show a happy emoji when Robot 1 sends "smile"
def robot_smile():
robot.screen.show_emoji(HAPPY)
robot.link.handle_message(robot_smile, "smile")
while True:
wait(50, MSEC)
connected#
Η συνάρτηση connected καταχωρεί μια συνάρτηση που εκτελείται όταν το ρομπότ είναι συνδεδεμένο με ένα άλλο ρομπότ. Χρησιμοποιήστε αυτήν τη μέθοδο όταν το έργο θα πρέπει να ανταποκριθεί μόλις πραγματοποιηθεί η σύνδεση ρομπότ-προς-ρομπότ. Ορίστε πρώτα τη συνάρτηση επανάκλησης και, στη συνέχεια, καταχωρήστε την με connected.
Usage:
robot.link.connected(callback, args)
Παράμετρος |
Περιγραφή |
|---|---|
|
Μια προηγουμένως καθορισμένη συνάρτηση που εκτελείται όταν το ρομπότ είναι συνδεδεμένο με ένα άλλο ρομπότ. |
|
Προαιρετικό. Μια πλειάδα που περιέχει ορίσματα για να μεταβιβαστούν στη συνάρτηση επανάκλησης. Δείτε Χρήση Συναρτήσεων με Παραμέτρους για περισσότερες πληροφορίες. |
# Show a happy emoji when connected
def robot_smile():
robot.screen.show_emoji(HAPPY)
robot.link.connected(robot_smile)
disconnected#
disconnected καταχωρεί μια συνάρτηση που εκτελείται όταν το ρομπότ δεν είναι πλέον συνδεδεμένο με άλλο ρομπότ. Χρησιμοποιήστε αυτήν τη μέθοδο όταν το έργο θα πρέπει να ανταποκριθεί μόλις χαθεί η σύνδεση ρομπότ-προς-ρομπότ. Ορίστε πρώτα τη συνάρτηση επανάκλησης και, στη συνέχεια, καταχωρήστε την με disconnected.
Usage:
robot.link.disconnected(callback, args)
Παράμετρος |
Περιγραφή |
|---|---|
|
Μια προηγουμένως καθορισμένη συνάρτηση που εκτελείται όταν το ρομπότ δεν είναι πλέον συνδεδεμένο με άλλο ρομπότ. |
|
Προαιρετικό. Μια πλειάδα που περιέχει ορίσματα για να μεταβιβαστούν στη συνάρτηση επανάκλησης. Δείτε Χρήση Συναρτήσεων με Παραμέτρους για περισσότερες πληροφορίες. |
# Show a sad emoji when disconnected
def robot_sad():
robot.screen.show_emoji(SAD)
robot.link.disconnected(robot_sad)