質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2450閲覧

Raspberry Pi でLEDを順次ランダムに点灯させたい

horisuke3232

総合スコア109

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/29 15:35

Raspberry Piを使ってLEDを順次点灯させたいです。
試しに3つのLEDを接続して、ランダムに点灯させようと下記の通り作成しました。

ランダムには点灯させれるのですが、2のLEDが点灯して、4のLEDが点灯して、2のLEDが消灯して、3のLEDが点灯して・・・
という様に、どこかのLEDが点灯したまま、次のLEDが点灯する場合があります。

私が行いたいのは、1つずつ点灯→消灯を繰り返すものにしたいと思っています。

下記のコードで解決できないのが、GPIO.output(random.choice(list),GPIO.HIGH)で選ばれたchoice(list)と同じ番号が取得できれば、その次に出てくる GPIO.output(random.choice(list),GPIO.LOW)のchoice(list)に同じ番号を指定すればよいのかな?と思っているのですが、私の知識ではそこから進むことができませんでした。

どの様に修正すれば、私が望むように順次ランダムに点灯消灯することができるのでしょうか?

python

1import RPi.GPIO as GPIO 2import time 3import random 4 5 6list = [2,3,4] 7 8GPIO.setmode(GPIO.BCM) 9 10GPIO.setup(list,GPIO.OUT) 11 12GPIO.output(list,GPIO.HIGH) 13 14for i in range(150): 15 GPIO.output(random.choice(list),GPIO.HIGH) 16 time.sleep(0.1) 17 GPIO.output(random.choice(list),GPIO.LOW) 18 time.sleep(0.1) 19 20GPIO.cleanup()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ループに入る前にGPIO.output(list,GPIO.HIGH)としていますが、HIGHにすると消灯という回路になっているのですか? そうでないと、最初の0.1秒は全点灯になります。意図してそうしているのならそれでもいいですけれど。(以下は、HIGHで点灯LOWで消灯という前提で書いています)

同じ番号を指定すればよいのかな?と思っているのですが、私の知識ではそこから進むことができませんでした。

さすがに勉強が足りない、といわざるを得ません。せめてPythonの入門書の頭1/4ぐらいだけでも眺めておいてください(もちろん、全部読み切ってもかまいません)。

「変数」というものがあって、値を保存できます。
val=3
とすると、その後で
print(val)
とすれば3が表示されることになります。

Python

1for i in range(150): 2 val=random.choice(list) #ここで変数valに値が設定される 3 GPIO.output(val,GPIO.HIGH) #設定された番号のLEDを点灯 4 time.sleep(0.1) 5 GPIO.output(val,GPIO.LOW) #設定された番号のLEDを消灯 6 time.sleep(0.1)

別の考え方として、「全部消しちゃえ」というのもありでしょう。変数を知らなくてもこっちを思いつけたら自分で解決出来ていたかも。

Python

1for i in range(150): 2 GPIO.output(random.choice(list),GPIO.HIGH) 3 time.sleep(0.1) 4 GPIO.output(list,GPIO.LOW) #全部消す 5 time.sleep(0.1)

投稿2020/08/29 22:52

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horisuke3232

2020/08/29 23:22

ご回答ありがとうございます。 回答を拝見させていただくと、なぜ解らなかったんだと思ってしまいます。。。 また、全部消してしまう方法は、こんな考えもあるんだと勉強になりました。 大変ありがとうございました。
guest

0

ランダムにONしてランダムにOFFしてりゃそりゃ消灯しなくなることもありますな。
というより、消灯する場合もある、のほうが正しいですか。

ランダムにONしたなら、そのONしたものをOFFしましょう

投稿2020/08/29 21:34

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問