Mesaj#

giriiş#

İki VEX AIM Kodlama Robotu, bir proje sırasında iletişim kurabilmeleri için birbirine bağlanabilir. Mesaj yöntemleri, bir robotun diğer robota mesaj göndermesine olanak tanır. Bir mesaj, yalnızca metin içerebileceği gibi, en fazla üç rakam içeren metin de içerebilir.

Alınan mesajlar, ilk giren ilk çıkar (FIFO) kuyruğunda saklanır. Bu, alınan ilk mesajın okunacak ilk mesaj olduğu anlamına gelir.

Bir mesajın okunmaya hazır olup olmadığını kontrol etmek için is_message_available kullanın. Ardından, bir sonraki metin mesajını okumak için get_message kullanın. Mesajda sayılar da varsa, metni ve sayıları birlikte okumak için get_message_and_data kullanın.

Not: Mesajların gönderilip alınabilmesi için her iki robotun da birbirine bağlı olması ve her iki robotun da Mesaj yöntemlerini kullanan projeler çalıştırıyor olması gerekir.

Aşağıda tüm yöntemlerin listesi bulunmaktadır:

Eylem — Robotlar arasında mesaj gönder.

  • send_message — Bağlı robota metin ve en fazla üç sayı gönderir.

Getter’lar — Mesajları okur veya bağlantı durumunu kontrol eder.

  • get_message — Alınan bir sonraki metin mesajını döndürür.

  • get_message_and_data — Alınan bir sonraki kısa mesajı ve sayıları döndürür.

  • is_connected — Robotun başka bir robotla bağlantılı olup olmadığını döndürür.

  • is_message_available — Bir mesajın okunabilir olup olmadığını döndürür.

  • get_name — Bağlantılı robotun adını döndürür.

Geri Çağrı Fonksiyonları — Mesaj olayları gerçekleştiğinde fonksiyonları çalıştırın.

  • handle_message — Belirli bir mesaj alındığında bir fonksiyon çalıştırır.

  • connected — Robot başka bir robotla bağlantılı olduğunda bir fonksiyon çalıştırır.

  • disconnected — Robot artık başka bir robotla bağlantılı olmadığında bir fonksiyon çalıştırır.

Aksiyon#

send_message#

send_message , bağlantılı robota metin ve en fazla üç rakam gönderir. Diğer robotun bir komut, sinyal veya kısa bir bilgi alması gerektiğinde bu yöntemi bir robot üzerinde kullanın. Mesaj tek başına yeterliyse metni gönderin. Mesajın ilgili değerlere ihtiyacı olduğunda rakamlar ekleyin, örneğin robotun mevcut yön değeriyle birlikte “heading” gönderin.

Alıcı robotta, bir mesajın gelip gelmediğini kontrol etmek için is_message_available kullanın. Ardından, yalnızca metin içeren bir mesaj için get_message veya sayılar içeren bir mesaj için get_message_and_data kullanın.

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

Parametre

Tanım

message

Bağlantılı robota gönderilecek metin.

arg1

İsteğe bağlı. Mesajla birlikte gönderilecek numara.

arg2

İsteğe bağlı. Mesajla birlikte gönderilecek ikinci bir numara.

arg3

İsteğe bağlı. Mesajla birlikte gönderilecek üçüncü bir numara.

Örnek

Robot 1 için kod

# 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")

Robot 2 için kod

# 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)

Getters#

get_message#

get_message , mesaj kuyruğundan alınan bir sonraki metin mesajını döndürür. Bağlantılı robot yalnızca metin içeren bir mesaj gönderdiğinde, alıcı robotta bu yöntemi kullanın. Yaygın bir sıra, bir mesajın geldiğini kontrol etmek için is_message_available kullanmak, ardından döndürülen metni başka bir yöntemde görüntülemeden, karşılaştırmadan veya kullanmadan önce get_message kullanmaktır.

Diğer robotta yalnızca metin içeren bir mesaj göndermek için send_message kullanın.

Usage:
robot.link.get_message(timeout)

Parametre

Tanım

timeout

İsteğe bağlı. Devam etmeden önce bir mesaj beklenmesi için maksimum süre (milisaniye cinsinden). Varsayılan değer 1000.

Örnek

Robot 1 için kod

# 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!")

Robot 2 için kod

# 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 , mesaj kuyruğundan bir sonraki alınan metin mesajını ve sayıları bir demet olarak döndürür. Bağlantılı robot bir veya daha fazla sayı içeren metin gönderdiğinde, alıcı robotta bu yöntemi kullanın. Yaygın bir sıra, bir mesajın geldiğini kontrol etmek için is_message_available kullanmak, ardından döndürülen metni ve sayıları kullanmadan önce get_message_and_data kullanmaktır.

Metni ve sayıları birlikte göndermek için diğer robotta send_message kullanın.

Usage:
robot.link.get_message_and_data(timeout)

Parametre

Tanım

timeout

İsteğe bağlı. Devam etmeden önce bir mesaj beklenmesi için maksimum süre (milisaniye cinsinden). Varsayılan değer 1000.

Örnek

Robot 1 için kod

# 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 için kod

# 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 , robotun başka bir robotla bağlantılı olup olmadığını döndürür. Projenin robotlar arası bağlantının hazır olup olmadığını kontrol etmesi gerekiyorsa, mesaj göndermeden veya mesajları beklemeden önce bu yöntemi kullanın.

  • True — Robot başka bir robotla bağlantılı.

  • False — Robot başka bir robotla bağlantılı değil.

Usage:
robot.link.is_connected()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# 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 , mesaj kuyruğunda bir mesajın bekleyip beklemediğini döndürür. Bu yöntemi get_message veya get_message_and_data yöntemlerinden önce kullanın, böylece alıcı robot yalnızca bir mesaj geldikten sonra mesajı okumaya çalışır.

  • True — Okunabilecek bir mesaj mevcut.

  • False — Okunabilecek mesaj yok.

Usage:
robot.link.is_message_available()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

Örnek

Robot 1 için kod

# 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!")

Robot 2 için kod

# 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 , bağlı robotun adını döndürür. Mesaj göndermeden veya almadan önce hangi robotun bağlı olduğunu göstermek için bu yöntemi kullanın. Hiçbir robot bağlı değilse, bu yöntem None döndürür.

Usage:
robot.link.get_name()

Parametreler

Tanım

Bu yöntemin parametresi yoktur.

# Display the name of the linked robot
robot.screen.print(robot.link.get_name())

Geri aramalar#

handle_message#

handle_message , robot belirli bir metin mesajı aldığında çalışan bir fonksiyonu kaydeder. Robotun, mesaj kuyruğunu bir döngüde kontrol etmek yerine bilinen bir mesaja otomatik olarak yanıt vermesi gerektiğinde bu yöntemi kullanın. Önce geri çağırma fonksiyonunu tanımlayın, ardından handle_message ve izlenecek mesaj metni ile kaydedin.

Usage:
robot.link.handle_message(callback, message)

Parametre

Tanım

callback

Alınan mesaj message ile eşleştiğinde çalışan, önceden tanımlanmış bir fonksiyon.

message

Gelen mesajların doğruluğunu kontrol etmek için kullanılacak metin.

Örnek

Robot 1 için kod

# 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")

Robot 2 için kod

# 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 robot başka bir robotla bağlantı kurduğunda çalışan bir fonksiyonu kaydeder. Projenin robotlar arası bağlantı kurulur kurulmaz yanıt vermesi gerektiğinde bu yöntemi kullanın. Önce geri çağırma fonksiyonunu tanımlayın, ardından connected ile kaydedin.

Usage:
robot.link.connected(callback, args)

Parametre

Tanım

callback

Robot başka bir robotla bağlantı kurduğunda çalışan, önceden tanımlanmış bir fonksiyon.

args

İsteğe bağlı. Geri çağrı fonksiyonuna iletilecek argümanları içeren bir demet. Daha fazla bilgi için Parametreli Fonksiyonları Kullanma bölümüne bakın.

# Show a happy emoji when connected
def robot_smile():
    robot.screen.show_emoji(HAPPY)

robot.link.connected(robot_smile)

disconnected#

disconnected robotun başka bir robotla bağlantısı kesildiğinde çalışan bir fonksiyonu kaydeder. Projenin robotlar arası bağlantı kesilir kesilmez yanıt vermesi gerektiğinde bu yöntemi kullanın. Önce geri çağırma fonksiyonunu tanımlayın, ardından disconnected ile kaydedin.

Usage:
robot.link.disconnected(callback, args)

Parametre

Tanım

callback

Robotun başka bir robotla bağlantısı kesildiğinde çalışan, önceden tanımlanmış bir fonksiyon.

args

İsteğe bağlı. Geri çağrı fonksiyonuna iletilecek argümanları içeren bir demet. Daha fazla bilgi için Parametreli Fonksiyonları Kullanma bölümüne bakın.

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

robot.link.disconnected(robot_sad)