【问题标题】:LED chase using python使用python进行LED追逐
【发布时间】:2015-08-12 07:08:20
【问题描述】:

我正在使用一个简单的 while 循环和一个数组来跟踪条带上的 LED。

while True:
    for i in range(nLEDs):
        R = [ 255 ] * nLEDs
        G = [ 255 ] * nLEDs
        B = [ 255 ] * nLEDs
        intensity = [ 0 ] * nLEDs
        intensity[i] = 1
        setLEDs(R, G, B, intensity)
        time.sleep(0.05)

什么是最优雅的反复追逐终点和回来的方式(有点像一个弹跳球)?

【问题讨论】:

    标签: python led


    【解决方案1】:

    非常简单,您可以复制 for 循环。让它第二次反转。

    似乎没有必要一遍又一遍地重新定义 R、G、B,因此可以将它们移出循环,但也许您打算更改它们,所以我暂时保留它们

    while True:
        for i in range(nLEDs):
            R = [ 255 ] * nLEDs
            G = [ 255 ] * nLEDs
            B = [ 255 ] * nLEDs
            intensity = [ 0 ] * nLEDs
            intensity[i] = 1
            setLEDs(R, G, B, intensity)
            time.sleep(0.05)
    
        for i in reversed(range(nLEDs)):
            R = [ 255 ] * nLEDs
            G = [ 255 ] * nLEDs
            B = [ 255 ] * nLEDs
            intensity = [ 0 ] * nLEDs
            intensity[i] = 1
            setLEDs(R, G, B, intensity)
            time.sleep(0.05)
    

    理想情况下,您的 API 有一个您可以调用的 setLED 函数,那么当一次只有 2 个 LED 发生变化时,您无需设置所有 LED 的状态。

    【讨论】:

    • 谢谢,很有意义。作为后续,添加一些物理效果(让球的弹跳感觉更真实)的简单方法是什么?
    【解决方案2】:

    您可以将其定义为collections.deque,然后将其定义为rotate,而不是将强度定义为列表

    R = [ 255 ] * nLEDs
    G = [ 255 ] * nLEDs
    B = [ 255 ] * nLEDs
    intensity = collections.deque([ 0 ] * nLEDs)
    intensity[0] = 1
    while True:
        for i in range(nLEDs):
            intensity.rotate(1)
            setLEDs(R, G, B, list(intensity))
            time.sleep(0.05)
    

    然后添加一个额外的for循环返回

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2019-12-18
      相关资源
      最近更新 更多