開発ブログ

第20回 パペロ本体のボタンを2度押し、3度押しで操作できるようにしてみた

投稿日時:2019年7月9日 09:07

こんにちは。ピャペロンです!
今回はパペロ本体のボタンを2度押し、3度押しで操作をしてみたよ。
パペロ本体にはボタンが3つしかないのでパペロ単体では限られた操作しかできません。
そこでボタンを押した回数で操作ができるようになると、2度押しでは6通り、3度押しでは9通りの機能を割り当てることが可能です。※四度押し以上も可能だと思いますが検証していません

使用するハード
・PaPeRo i実機

使用するソフト
・Windows 10
・テキストエディタ(Visual Studio Code
・Python 3.4(PaPeRo i)
・WinSCP
・Tera Term


各ボタンを押すと「〇ボタンをX度押しました」と発話する簡単なプログラムです。
右ボタンを2度押すと「右ボタンを2度押しました」と発話します。
中央ボタンだけは3度押しもできるようにしています。

 

● PaPeRo i でPythonを使えるようにする | PaPeRo i [非公式] Developer Forumを参考にパペロ本体でpythonを実行できるようにします。

● パペロ本体にプログラムを転送して実行します。


test.py

  1. #!/Extension/pkgroot/usr/bin/python3
  2. import logging
  3. import sys
  4. import time
  5. import pypapero
  6. logger = logging.getLogger("pypapero")
  7. sh = logging.StreamHandler()
  8. fh = logging.FileHandler(filename="/var/log/test.log")
  9. logger.setLevel(logging.DEBUG)
  10. logger.addHandler(sh)
  11. #logger.addHandler(fh)
  12. class TestPapero(pypapero.Papero):
  13.     def __init__(self, simulator_id=None, robot_name=None, arg_ws_server_addr="ws://127.0.0.1:8088/papero"):
  14.         """PaPeRo i class
  15.                 
  16.         Keyword Arguments:
  17.             simulator_id {str} -- simulator_id (default: {None})
  18.             robot_name {str} -- robot_name (default: {None})
  19.             arg_ws_server_addr {str} -- websocket server address (default: {"ws://127.0.0.1:8088/papero"} simulator: {None})
  20.         """
  21.         self.end = False
  22.         return super().__init__(simulator_id, robot_name, arg_ws_server_addr)
  23.     def send_main_message(self, msg): # メインメッセージを処理
  24.         """メインメッセージを処理
  25.         """
  26.         if msg.get("Name") == "detectButton" and msg.get("Status") == "C": # 中央ボタン
  27.             for count in range(5):
  28.                 msg = self.recv_msg(0.1)
  29.                 if msg is not None:
  30.                     if msg.get("Name") == "detectButton" and msg.get("Status") == "C": # 中央ボタンを二度押し
  31.                         for count in range(5):
  32.                             msg = self.recv_msg(0.1)
  33.                             if msg is not None:
  34.                                 if msg.get("Name") == "detectButton" and msg.get("Status") == "C": # 中央ボタンを三度押し
  35.                                     return self.send_start_speech("中央ボタンを三度押しました")
  36.                         return self.send_start_speech("中央ボタンを二度押しました")
  37.             self.send_start_speech("中央ボタンを押しました")
  38.         elif msg.get("Name") == "detectButton" and msg.get("Status") == "R": # 右ボタン
  39.             for count in range(5):
  40.                 msg = self.recv_msg(0.1)
  41.                 if msg is not None:
  42.                     if msg.get("Name") == "detectButton" and msg.get("Status") == "R": # 右ボタンを二度押し
  43.                         return self.send_start_speech("右ボタンを二度押しました")
  44.             self.send_start_speech("右ボタンを押しました")
  45.         elif msg.get("Name") == "detectButton" and msg.get("Status") == "L": # 左ボタン
  46.             for count in range(5):
  47.                 msg = self.recv_msg(0.1)
  48.                 if msg is not None:
  49.                     if msg.get("Name") == "detectButton" and msg.get("Status") == "L": # 左ボタンを二度押し
  50.                         return self.send_start_speech("左ボタンを二度押しました")
  51.             self.send_start_speech("左ボタンを押しました")
  52.     
  53.     def recv_msg(self, timeout=None):
  54.         """Receive a message
  55.         
  56.         Keyword Arguments:
  57.             timeout {float} -- [description] (default: {None})
  58.         
  59.         Returns:
  60.             [dict] -- Message dictionary
  61.         """
  62.         msg = papero.papero_robot_message_recv(timeout)
  63.         if msg is not None:
  64.             msg = msg[0]
  65.             return msg
  66.         else:
  67.             return None
  68. if __name__ == "__main__":
  69.     while True:
  70.         papero = TestPapero()
  71.         if papero.errOccurred == 0:
  72.             break
  73.         time.sleep(1)
  74.     papero.send_start_speech("パペロが起動しました")
  75.     
  76.     while not papero.end:
  77.         msg = papero.recv_msg()
  78.         papero.send_main_message(msg)
  79.         
  80.     papero.papero_cleanup()


0

最新開発ブログ一覧  (一覧で確認
2020年8月19日 14:08
開発ブログ
第30回 パペロで赤外線アレイセンサを動かしてみよう!【中編:顔の表面温度を測ってみよう】
by 管理者
2020年7月22日 16:07
開発ブログ
第29回 パペロで赤外線アレイセンサを動かしてみよう!【前編:簡易サーモグラフィを作ろう】
by 管理者
2019年11月20日 17:11
開発ブログ
第28回 パペロでJulius4.5を実行してみた
by 管理者
2019年11月13日 09:11
開発ブログ
第27回 JuliusをPaPeRoi向けにクロスコンパイルしてみた
by 管理者
2019年9月19日 17:09
開発ブログ
第26回Linaro Toolchainでクロスコンパイルしてみた
by 管理者

コメントは受け付けていません。