メッセージ#

導入#

2台のVEX AIMコーディングロボットをリンクさせることで、プロジェクト中に相互に通信させることができます。メッセージ機能を使うと、一方のロボットからもう一方のロボットにメッセージを送信できます。メッセージはテキストのみ、またはテキストと最大3桁の数字を組み合わせることができます。

受信したメッセージは、先入れ先出し(FIFO)キューに格納されます。つまり、最初に受信したメッセージが最初に読み取られます。

is_message_available を使用して、メッセージが読み取れる状態かどうかを確認します。次に、get_message を使用して、次のテキストメッセージを読み取ります。メッセージに数字も含まれている場合は、get_message_and_data を使用して、テキストと数字を一緒に読み取ります。

注: メッセージの送受信を行うには、両方のロボットがリンクされている必要があり、両方のロボットでメッセージメソッドを使用するプロジェクトが実行されている必要があります。

以下にすべてのメソッドの一覧を示します。

アクション — ロボット間でメッセージを送信する。

  • send_message — テキストと最大 3 つの数字をリンクされたロボットに送信します。

ゲッター — メッセージを読み取ったり、接続状態を確認したりする。

  • get_message — 次に受信したテキストメッセージを返します。

  • get_message_and_data — 次に受信したテキスト メッセージと番号を返します。

  • is_connected — ロボットが別のロボットとリンクされているかどうかを返します。

  • is_message_available — メッセージが読み取り可能かどうかを返します。

  • get_name — リンクされたロボットの名前を返します。

コールバック — メッセージイベントが発生したときに実行される関数。

  • handle_message — 特定のメッセージを受信したときに関数を実行します。

  • connected — ロボットが別のロボットとリンクされたときに関数を実行します。

  • disconnected — ロボットが他のロボットとリンクされなくなったときに関数を実行します。

アクション#

send_message#

send_message は、リンクされたロボットにテキストと最大 3 つの数値を送信します。このメソッドは、一方のロボットがコマンド、信号、または短い情報を受信する必要がある場合に、もう一方のロボットで使用します。メッセージがテキストだけで十分な場合は、テキストのみを送信します。メッセージに関連する値が必要な場合、たとえばロボットの現在の進行方向の値とともに “heading” を送信する場合、数値を追加します。

受信側のロボットでは、is_message_available を使用してメッセージが到着したかどうかを確認します。次に、テキストのみのメッセージの場合は get_message を、数値を含むメッセージの場合は get_message_and_data を使用します。

Usage:
robot.link.send_message(message, arg1, arg2, arg3)

パラメータ

説明

message

リンク先のロボットに送信するテキスト。

arg1

任意。メッセージに添付する電話番号。

arg2

任意。メッセージと一緒に送信する2つ目の電話番号。

arg3

任意。メッセージと一緒に送信する3つ目の電話番号。

例

Code for Robot 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)

パラメータ

説明

timeout

オプション。処理を続行する前にメッセージを待つ最大時間(ミリ秒)。デフォルト値は 1000です。

例

Code for Robot 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 は、メッセージキューから次に受信したテキストメッセージと数値をタプルとして返します。リンクされたロボットが 1 つ以上の数値を含むテキストを送信したときに、受信側のロボットでこのメソッドを使用します。一般的な順序は、is_message_available を使用してメッセージが到着したことを確認し、次に get_message_and_data を使用して返されたテキストと数値を使用することです。

もう一方のロボットで send_message を使用して、テキストと数字を一緒に送信します。

Usage:
robot.link.get_message_and_data(timeout)

パラメータ

説明

timeout

オプション。処理を続行する前にメッセージを待つ最大時間(ミリ秒)。デフォルト値は 1000です。

例

Code for 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)

ロボット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()

パラメータ

説明

このメソッドにはパラメータがありません。

例

Code for Robot 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)

パラメータ

説明

callback

受信したメッセージが messageと一致する場合に実行される、事前に定義された関数。

message

受信メッセージと照合するためのテキスト。

例

Code for Robot 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)

パラメータ

説明

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)

パラメータ

説明

callback

ロボットが他のロボットとの接続を解除されたときに実行される、事前に定義された関数。

args

オプション。コールバック関数に渡す引数を含むタプル。詳細については、パラメーター付き関数の使用を参照してください。

# Show a sad emoji when disconnected
def robot_sad():
    robot.screen.show_emoji(SAD)

robot.link.disconnected(robot_sad)