#python #enums
Вопрос:
Я пишу фрагмент кода для управления тремя цветными лампами, подключенными к Jetson nano.
Каждый пин-код GPIO предназначен для его цвета, пин-кода и состояния. Скажи
Pins[0] = [Color.RED, pin=11, state=State.OFF]
Pins[1] = [Color.YEL, pin=13, state=State.SOLID_ON]
Pins[2] = [Color.GRN, pin=15, state=State.BLINK]
и в функции SetGPIO я хотел бы управлять каждым пин-кодом следующим образом
def SetGPIO(self, color, state):
if color == Color.RED:
Pins[0].state = state
elif color == Color.YEL:
Pins[1].state = state
elif color == Color.GRN:
Pins[2].state = state
Затем в функции обновления, которая вызывается каждые 0,5 секунды,
def Update(self):
foreach Pin in Pins
if Pins.state == State.off:
GPIO.output(Pins.pin, GPIO.LOW)
elif Pins.state == State.SOLID_ON:
GPIO.outpu(Pins.pin, GPIO.HIGH)
elif Pins.state == State.BLINK:
toggle GPIO(Pins.pin, state)
Есть какие-либо предложения о том, как реализовать такие функции в python?
Ответ №1:
Мне удалось реализовать нечто подобное. Все выглядит нормально? Какие-либо улучшения или предложения?
import Jetson.GPIO as GPIO
from enum import Enum
class Color(Enum):
RED = 0
YEL = 1
GRN = 2
class LampState(Enum):
OFF = 0
ON = 1
BLINK = 2
class Lamp:
def __init__(self, color, pinNum):
self.color = color
self.pin = pinNum
self.state = LampState.OFF
self.onoff = False
GPIO.setup(self.pin, GPIO.OUT)
GPIO.output(self.pin, GPIO.LOW)
def On(self):
self.onoff = True
GPIO.outpu(self.pin, self.onoff)
def Off(self):
self.onoff = False
GPIO.output(self.pin, self.onoff)
def Toggle(self):
self.onoff = not self.onoff
GPIO.output(self.pin, self.onoff)
def SetState(self, state):
self.state = state
class LampHandler:
def __init__(self):
GPIO.setmode(GPIO.BOARD)
self.lamps = [ Lamp(Color.RED, 11),
Lamp(Color.YEL, 13),
Lamp(Color.GRN, 15)]
def Update_5Hz(self):
for i in range(len(self.lamps)):
if self.lamps[i].state == LampState.BLINK:
self.lamps[i].Toggle()
elif self.lamps[i].state == LampState.ON:
self.lamps[i].On()
elif self.lamps[i].state == LampState.OFF:
self.lamps[i].Off()
def SetState(self, color, state):
if color == Color.RED:
self.lamps[0].state = state
elif color == Color.YEL:
self.lamps[1].state = state
elif color == Color.GRN:
self.lamps[2].state = state