【问题标题】:What is best way to control digital io in python在python中控制数字io的最佳方法是什么
【发布时间】:2021-08-25 14:41:25
【问题描述】:

我正在编写一段代码来控制连接到 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中实现这些功能有什么建议吗?

【问题讨论】:

    标签: python enums


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多