2016-05-13 29 views
1

私が今のところ持っているのは、以下のループです。forループ内の最初のn番目のリスト項目を選択します

while True: 
    for i in range(24): 
     pixels = [ (0,0,0) ] * numLEDs 
     pixels[i] = (100, 100, 100) 
     client.put_pixels(pixels) 
     time.sleep(0.02) 

私が持っていると思うのは、以前に点灯したLEDが繰り返しごとに点灯していることです。したがって、点灯しているLEDの数は毎回1つずつ増えます。

リストの先頭から次のようにi番目のアイテムまで簡単に選択できると仮定しました。 しかし、これは "TypeError: 'int'オブジェクトが反復可能ではありません"を返します。

これがうまくいかない理由はわかりません。私はあなたの注意を持っている間

while True: 
    for i in range(24): 
     pixels = [ (0,0,0) ] * numLEDs 
     pixels[:i] = (100, 100, 100) 
     client.put_pixels(pixels) 
     time.sleep(0.02) 

、より良い方法は、これらのループはtime.sleepを使用するよりも、他の時間にありますか()?私はスレッディングを使用していますが、スリープはLEDのパターンが変わったときにも若干の遅延を引き起こします。

+1

* numLEDs'だけのためのループの前にあるべきです。 – venkatKA

+0

スティーブン、私はあなたが2つの連続したledを毎晩オンにしたいという理解で答えを出しましたが、今私はそれについてそれほど確信していません...もし私があなたのQを誤解すれば、 A.私に知らせてください。 – gboffi

答えて

0

最初の例では、ループは(0,0,0)に設定してLEDを消灯します。代わりに、なぜこれを使用しない:これは(100,100,100)にリストの最初のi要素を設定

while True: 
    for i in range(24): 
     pixels = [ (100,100,100) ] * (i) + [ (0,0,0) ] * (numLEDs - i) 
     client.put_pixels(pixels) 
     time.sleep(0.02) 

次いでれるべき残りの(0,0,0)。

I = 5とnumLEDs = 15の場合は、この出力を取得します:

[(100, 100, 100), (100, 100, 100), (100, 100, 100), (100, 100, 100), (100, 100, 100), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)] 

あなたが見ることができるように、これは上で他の人を残します。

+0

iの値に応じて異なる色を設定するにはどうすればよいですか? 私は以下を試しましたが、それほどぎこちないです もしi≦8なら ピクセル= [(100,0,0)] *([0,0,0)] *(numLEDs - * 8 + [(100,0,0)] *(i)+ [(0,0,0)] i = 16ではなく、 * 8 + [(0,100,0)] *(i(0,0,0,0))*(numLEDs-i + 8) elif i> = 16: ピクセル= [ )+ [(0,0,0)] *(numLEDs - i + 16) client.put_pixels(pixels、channel = 0) time.sleep(0.5) – StephenHiggins

+0

@StephenHiggins hmm interesting q ...私に教えてそれを熟考する – Tim

2

問題は、現在のピクセル状態をすべてゼロで永久に上書きしてしまうことです。無限のwhileループの外側でピクセル構造を定義し、一度に1つずつ調整するだけで問題が解決されるはずです。

numLEDs = 24 
pixels = [ (0,0,0) ] * numLEDs 

while True: 
    for i in range(numLEDs): 
     pixels[i] = (100, 100, 100) 
     client.put_pixels(pixels) 
     time.sleep(0.02) 
0

は、これは常にオンになって二つの連続LEDを有するのタスクを扱うの答えですので、あなたは二重の光は、周波数と円上に移動する参照円の形であなたのLEDの配列をマウントする場合約2Hzである。
私はOPが効果的に尋ねたことについて誤った印象で答えました。私は本当の質問に答える別の答えを与えましたが、私はこの回答を残したいと思います。我々はスタートLEDシンプルなモジュール演算は、オフとオンされなければならない、トリックを使用する必要があります使用してあなたが計算したい...

、(私はそれがあなたの要件の下で許可されている願っていること)部分的に点灯したボードを使用しています。あなたはpxリストに0 ONを主導してきた第一の繰り返しの前に

# constants 
ON = (100, 100, 100) 
OFF = (0, 0, 0) 
N = 24 

# initial state of the leds 
px = [ OFF ] * N 
client.put_pixels(px) # no leds on 

# set initial conditions for the iteration 
px[0] = ON 
n = -1 

# the never-ending loop 
while True: 
    n +=1 
    i, j = (n-1)%N, (n+1)%N 
    px[i], px[j] = OFF, ON 
    client.put_pixels(px) 
    time.sleep(0.02) 

、第一の繰り返しの後、あなたはOFF主導1を入れ、すべてのさらなる反復でON 2つのLEDを、持っているし、別の電源を入れので、すべての瞬間には、上のLEDあなたは2つのLEDが点灯しています。

0

シーケンス内のすべてのLEDを点灯させたい場合は、一度に電源を切るなどなど私もあなたの最初のスニペットはその初期 `ピクセル= [(0,0,0)]を除いて完璧だと思うなど

# constants 
ON = (100, 100, 100) 
OFF = (0, 0, 0) 
N = 24 

n = 0 
while 1: 

    if n%N == 0: 
     px = [ OFF ] * N 
     client.put_pixels(px) 
     time.sleep(0.02) 

    px[n%N] = ON 
    client.put_pixels(px) 
    time.sleep(0.02) 

    n += 1 
関連する問題