<reponame>IlyaDanilenko/gs_pizero
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import rospy
from rospy import Service, get_namespace
from std_msgs.msg import ColorRGBA
from std_srvs.srv import SetBool, SetBoolResponse
from gs_module import ModuleLedController
from gs_interfaces.srv import Led, LedResponse

class FlasherNode(): # класс ноды мигалки
    def __init__(self, pioneer = None, time = 0.05): # pioneer - название пространства имен, time - время задержки между миганиями
        if pioneer is None:
            exit()

        self.ledController = ModuleLedController(pioneer) # объявляем объект класса управления светодиодами
        self.__time = time # время задержки между миганиями

        self.control_service = Service(f"flasher/control", SetBool, self.handle_control) # создаем сервис управления мигалкой
        self.color_service = Service(f"flasher/color", Led, self.handle_color) # создаем сервис изменения цвета
        self.__work = True # переменная отвечающая за работу мигалки
        self.colors = [ColorRGBA(255, 0, 0, 0), ColorRGBA(0, 0, 255, 0)] # массив набора цветов мигания

    def handle_control(self, request): # функция обработки запроса сервиса управления
        self.__work = request.data # запоминаем тело запроса
        return SetBoolResponse(True, "") # возвращаем статус

    def handle_color(self, request): # функция обработки запроса сервиса изменения цветов
        self.colors = request.leds # запоминаем тело запроса
        return LedResponse(True) # возвращаем статус

    def spin(self): # функция одного оборота программы
        if self.__work: # проверка нужно ли мигать
            for color in self.colors: # перебираем элементы массива набора цветов
                self.ledController.changeAllColor(color.r, color.g, color.b) # зажигаем светодиоды нужныс цветом 
                rospy.sleep(self.__time) # засыпаем на время задержки
                self.ledController.changeAllColor(0, 0, 0) # гасим светодиоды
                rospy.sleep(self.__time) # засыпаем на время задержки

if __name__ == "__main__":
    rospy.init_node("flasher_node") # инициализируем ноду

    flasher = FlasherNode(get_namespace(), 0.05) # создаем объект класса ноды

    while not rospy.is_shutdown(): # бесконечный цикл работы ноды
        flasher.spin() # один оборот программы

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import rospy
from rospy import Service, get_namespace
from std_msgs.msg import ColorRGBA
from std_srvs.srv import SetBool, SetBoolResponse
from gs_module import ModuleLedController
from gs_interfaces.srv import Led, LedResponse

class FlasherNode(): # класс ноды мигалки
    def __init__(self, pioneer = None, time = 0.05): # pioneer - название пространства имен, time - время задержки между миганиями
        if pioneer is None:
            exit()

        self.ledController = ModuleLedController(pioneer) # объявляем объект класса управления светодиодами
        self.__time = time # время задержки между миганиями

        self.control_service = Service(f"flasher/control", SetBool, self.handle_control) # создаем сервис управления мигалкой
        self.color_service = Service(f"flasher/color", Led, self.handle_color) # создаем сервис изменения цвета
        self.__work = True # переменная отвечающая за работу мигалки
        self.colors = [ColorRGBA(255, 0, 0, 0), ColorRGBA(0, 0, 255, 0)] # массив набора цветов мигания

    def handle_control(self, request): # функция обработки запроса сервиса управления
        self.__work = request.data # запоминаем тело запроса
        return SetBoolResponse(True, "") # возвращаем статус

    def handle_color(self, request): # функция обработки запроса сервиса изменения цветов
        self.colors = request.leds # запоминаем тело запроса
        return LedResponse(True) # возвращаем статус

    def spin(self): # функция одного оборота программы
        if self.__work: # проверка нужно ли мигать
            for color in self.colors: # перебираем элементы массива набора цветов
                self.ledController.changeAllColor(color.r, color.g, color.b) # зажигаем светодиоды нужныс цветом 
                rospy.sleep(self.__time) # засыпаем на время задержки
                self.ledController.changeAllColor(0, 0, 0) # гасим светодиоды
                rospy.sleep(self.__time) # засыпаем на время задержки

if __name__ == "__main__":
    rospy.init_node("flasher_node") # инициализируем ноду

    flasher = FlasherNode(get_namespace(), 0.05) # создаем объект класса ноды

    while not rospy.is_shutdown(): # бесконечный цикл работы ноды
        flasher.spin() # один оборот программы
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # класс ноды мигалки # pioneer - название пространства имен, time - время задержки между миганиями # объявляем объект класса управления светодиодами # время задержки между миганиями # создаем сервис управления мигалкой # создаем сервис изменения цвета # переменная отвечающая за работу мигалки # массив набора цветов мигания # функция обработки запроса сервиса управления # запоминаем тело запроса # возвращаем статус # функция обработки запроса сервиса изменения цветов # запоминаем тело запроса # возвращаем статус # функция одного оборота программы # проверка нужно ли мигать # перебираем элементы массива набора цветов # зажигаем светодиоды нужныс цветом # засыпаем на время задержки # гасим светодиоды # засыпаем на время задержки # инициализируем ноду # создаем объект класса ноды # бесконечный цикл работы ноды # один оборот программы