Example #1
0
 def callback_input(self, gpio_pin):
     """
     スイッチ押下のコールバック関数
     Parameters
     ----------
     gpio_pin : int
         ピン番号
     """
     # 送信するメッセージの作成
     msg = gpio_mes()
     # BCMポート番号をX端子番号に読み替え
     msg.port = self.__GpioPin.index(gpio_pin)
     msg.value = 1
     # ボタンが押された情報を送信
     self.pub.publish(msg)
     # ログの表示
     self.__s.message("Port (IN): %s, Val: %s" % (msg.port, msg.value))
Example #2
0
 def StatusReset(self):
     """
     ステータスを全てリセット(上手く動いてない)
     """
     # 値をリセット
     for i in range(len(self.__worker_stat)):
         self.__worker_stat[i] = self.STAT_NONE
     # ボタン点灯もリセット
     for i in c.GPIO_OUT_WORKERSTAT:
         # 指定のトピックへメッセージを送信:ボタンランプ
         pub = rospy.Publisher('mes_gpio_out', gpio_mes, queue_size=10)
         # 送信するメッセージの作成
         msg = gpio_mes()
         msg.port = i
         msg.value = self.STAT_OFF
         # メッセージ送信
         pub.publish(msg)
         # 有効なボタンだけゼロリセット
         self.__worker_stat[i] = self.STAT_OFF
Example #3
0
def update_signaltower(arg_Color):
    """
    シグナルタワーの色変更
    Parameters
    ----------
    arg_Color:int
        シグナルタワーの色番号
    """
    # 指定のトピックへメッセージを送信
    pub = rospy.Publisher('mes_gpio_out', gpio_mes, queue_size=10)
    # 送信するメッセージの作成
    msg = gpio_mes()
    for i in c.GPIO_OUT_SIGTOWER:
        # 点灯状態を変更するポート番号(X番号)を指定
        msg.port = i
        if i == arg_Color:
            # 引数に受け取ったポート番号(X番号)と一致していれば
            # 指定のランプをON
            msg.value = 1
        else:
            # それ以外のランプをOFF
            msg.value = 0
        # メッセージ送信
        pub.publish(msg)
Example #4
0
 def callback_button(self, arg_mes):
     """
     ボタン入力を受け取るコールバック関数
     Parameters
     ----------
     message : gpio_mes
         メッセージ
     """
     # 無効化されているときは、以降の処理をしない
     if not self.__enabled:
         return
     # ボタン受付処理
     try:
         #
         # WORKSTATボタンの点灯を更新
         #
         # 指定のトピックへメッセージを送信:ボタンランプ
         pub = rospy.Publisher('mes_gpio_out', gpio_mes, queue_size=10)
         # 送信するメッセージの作成
         msg = gpio_mes()
         stat = []
         logmes = "<WorkStat PB P:V, PL P:V> "
         # GPIO_OUT_WORKERSTATをスキャン
         for i in c.GPIO_OUT_WORKERSTAT:
             # 点灯状態を変更するポート番号(X番号)を指定
             msg.port = i
             if i == arg_mes.port:
                 # callbackで受け取ったポート番号(X番号)と一致していれば
                 # 指定のランプをON
                 msg.value = self.STAT_ON
             else:
                 # それ以外のランプをOFF
                 msg.value = self.STAT_OFF
             # メッセージ送信
             pub.publish(msg)
             # ステータスバッファに追加
             stat.append(msg.value)
             logmes += ("[ %s:%s,%s:%s ], " %
                        (arg_mes.port, arg_mes.value, msg.port, msg.value))
         # ログの表示
         self.__s.message(logmes)
     except:
         # 例外発生時
         self.__s.message(
             "Grove AD Measure Error: %s" % (sys.exc_info()[0]), s.WARN)
     finally:
         pass
     #
     # 色ボタンごとのステータスの更新
     # 0:RED  1:GREEN  2:YELLOW  3:UMBER  4:BLUE  5:WHITE
     #
     i = 0
     for j in c.GPIO_WORKERSTATORDER:
         if j == "RED":
             self.__worker_stat[0] = stat[i]
         if j == "YELLOW":
             self.__worker_stat[1] = stat[i]
         if j == "GREEN":
             self.__worker_stat[2] = stat[i]
         if j == "BLUE":
             self.__worker_stat[3] = stat[i]
         if j == "WHITE":
             self.__worker_stat[4] = stat[i]
         if j == "UMBER":
             self.__worker_stat[5] = stat[i]
         else:
             pass
         i += 1
Example #5
0
def do():
    """
    publish関数
    Parameters
    ----------
    """

    # ノードの初期化と名称設定
    # anonymousをTrueにして、ノード名を自動で変更して複数接続OKとする
    rospy.init_node('gpio_test', anonymous=True)

    # 指定のトピックへメッセージを送信
    pub_out = rospy.Publisher('mes_gpio_out', gpio_mes, queue_size=10)
    # 指定のトピックからメッセージを受信
    rospy.Subscriber("mes_gpio_in", gpio_mes, callback)

    # ローカルプロキシにサービス名(srv_grove_ad)と型(grove_ad_srv)を設定
    grove_ad = rospy.ServiceProxy('srv_grove_ad', grove_ad_srv)

    # 送信周期(Hz)を設定
    rate = rospy.Rate(1)

    count = 0
    port = 0
    while not rospy.is_shutdown():

        # ------------------------------
        # テスト:GPIO
        # ------------------------------

        # 送信するメッセージの作成
        msg = gpio_mes()
        msg.port = port
        msg.value = 1
        rospy.loginfo("[%s]Lamp Port: %s, Val: %s" %
                      (count, msg.port, msg.value))

        # 送信
        pub_out.publish(msg)
        rate.sleep()
        count += 1

        # 送信するメッセージの作成
        msg = gpio_mes()
        msg.port = port
        msg.value = 0
        rospy.loginfo("[%s]Lamp Port: %s, Val: %s" %
                      (count, msg.port, msg.value))

        # 送信
        pub_out.publish(msg)
        count += 1

        port += 1
        if port > 7:
            port = 0

        # ------------------------------
        # テスト:GROVE AD
        # ------------------------------
        # word_counterが呼び出されたときにサービスコールが行われる
        try:
            ad_0 = grove_ad(0)
            ad_1 = grove_ad(1)
            ad_2 = grove_ad(2)
            ad_3 = grove_ad(3)
            ad_4 = grove_ad(4)
            ad_5 = grove_ad(5)
            rospy.loginfo("Grove AD [%sch]:%s [%sch]:%s [%sch]:%s [%sch]:%s" %
                          (0, ad_0.Val_VOLT, 2, ad_2.Val_VOLT, 3,
                           ad_3.Val_VOLT, 4, ad_4.Val_VOLT))
        except:
            pass
        finally:
            pass