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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

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

Python

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

Q&A

解決済

1回答

3265閲覧

Raspberry Piで作っている電光掲示板用プログラムについて

takpika

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2016/08/20 06:52

編集2016/08/20 09:34

Raspberry PiでPythonを使用して変数内の数字を1か0か判断し、それぞれの結果を別の変数にそれぞれ格納し電光掲示板を光らせるというプログラムを作っています。SN74HC595Nというパーツを使用しています。
ですが、判断する数字の量512個と多く判断部分を入力するのが面倒です。
これを短くすることはできないでしょうか?

###現在のプログラム

Python

1# -*- coding:utf-8 -*- 2import RPi.GPIO as GPIO 3from time import sleep 4 5def sendLEDdata(data,ser,rclk,srclk): 6 n = len(data) 7 8 GPIO.output(rclk,GPIO.LOW) 9 GPIO.output(srclk,GPIO.LOW) 10 11 for i in range(n): 12 if data[i] == 1: 13 GPIO.output(ser,GPIO.HIGH) 14 else: 15 GPIO.output(ser,GPIO.HIGH) 16 17 GPIO.output(srclk,GPIO.HIGH) 18 GPIO.output(srclk,GPIO.LOW) 19 20 GPIO.output(rclk,GPIO.HIGH) 21 GPIO.output(rclk,GPIO.LOW) 22 23SER=25 24RCLK=24 25SRCLK=23 26 27GPIO.setmode(GPIO.BCM) 28GPIO.setup(SER,GPIO.OUT) 29GPIO.setup(RCLK,GPIO.OUT) 30GPIO.setup(SRCLK,GPIO.OUT) 31 32flame0=[0,0,0,0,0,0,0,0, 33 0,0,0,0,0,0,0,0, 34 0,0,0,0,0,0,0,0, 35 0,0,0,0,0,0,0,0, 36 0,0,0,0,0,0,0,0, 37 0,0,0,0,0,0,0,0, 38 0,0,0,0,0,0,0,0, 39 0,0,0,0,0,0,0,0, 40 0,0,0,0,0,0,0,0,]#ベースとなるフレーム 41 42image=[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,0, 43 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,0, 44 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,0, 45 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,0, 46 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,0, 47 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,0, 48 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,0, 49 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,0, 50 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,0, 51 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,0, 52 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,0, 53 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,0, 54 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,0, 55 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,0, 56 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,0, 57 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,0] 58 59def sendimage(Data): 60 f1=1 61 f2=2 62 f3=3 63 f4=4 64 f5=5 65 f6=6 66 f7=7 67 f8=8 68 if Data[f1] == 1: 69 flame1=[0,0,0,0,0,0,0,0, 70 0,0,0,0,0,0,0,0, 71 0,0,0,0,0,0,0,0, 72 0,0,0,0,0,0,0,0, 73 0,0,0,0,0,0,0,0, 74 0,0,0,0,0,0,0,0, 75 0,0,0,0,0,0,0,0, 76 0,0,0,0,0,0,0,1, 77 0,0,0,0,0,0,0,1] 78 else: 79 flame1=[0,0,0,0,0,0,0,0, 80 0,0,0,0,0,0,0,0, 81 0,0,0,0,0,0,0,0, 82 0,0,0,0,0,0,0,0, 83 0,0,0,0,0,0,0,0, 84 0,0,0,0,0,0,0,0, 85 0,0,0,0,0,0,0,0, 86 0,0,0,0,0,0,0,0, 87 0,0,0,0,0,0,0,0] 88 if Data[f2] == 1: 89 flame2=[0,0,0,0,0,0,0,0, 90 0,0,0,0,0,0,0,0, 91 0,0,0,0,0,0,0,0, 92 0,0,0,0,0,0,0,0, 93 0,0,0,0,0,0,0,0, 94 0,0,0,0,0,0,0,0, 95 0,0,0,0,0,0,0,0, 96 0,0,0,0,0,0,1,0, 97 0,0,0,0,0,0,0,1] 98 else: 99 flame2=[0,0,0,0,0,0,0,0, 100 0,0,0,0,0,0,0,0, 101 0,0,0,0,0,0,0,0, 102 0,0,0,0,0,0,0,0, 103 0,0,0,0,0,0,0,0, 104 0,0,0,0,0,0,0,0, 105 0,0,0,0,0,0,0,0, 106 0,0,0,0,0,0,0,0, 107 0,0,0,0,0,0,0,0] 108 if Data[f3] == 1: 109 flame3=[0,0,0,0,0,0,0,0, 110 0,0,0,0,0,0,0,0, 111 0,0,0,0,0,0,0,0, 112 0,0,0,0,0,0,0,0, 113 0,0,0,0,0,0,0,0, 114 0,0,0,0,0,0,0,0, 115 0,0,0,0,0,0,0,0, 116 0,0,0,0,0,1,0,0, 117 0,0,0,0,0,0,0,1] 118 else: 119 flame3=[0,0,0,0,0,0,0,0, 120 0,0,0,0,0,0,0,0, 121 0,0,0,0,0,0,0,0, 122 0,0,0,0,0,0,0,0, 123 0,0,0,0,0,0,0,0, 124 0,0,0,0,0,0,0,0, 125 0,0,0,0,0,0,0,0, 126 0,0,0,0,0,0,0,0, 127 0,0,0,0,0,0,0,0] 128 if Data[f4] == 1: 129 flame4=[0,0,0,0,0,0,0,0, 130 0,0,0,0,0,0,0,0, 131 0,0,0,0,0,0,0,0, 132 0,0,0,0,0,0,0,0, 133 0,0,0,0,0,0,0,0, 134 0,0,0,0,0,0,0,0, 135 0,0,0,0,0,0,0,0, 136 0,0,0,0,1,0,0,0, 137 0,0,0,0,0,0,0,1] 138 else: 139 flame4=[0,0,0,0,0,0,0,0, 140 0,0,0,0,0,0,0,0, 141 0,0,0,0,0,0,0,0, 142 0,0,0,0,0,0,0,0, 143 0,0,0,0,0,0,0,0, 144 0,0,0,0,0,0,0,0, 145 0,0,0,0,0,0,0,0, 146 0,0,0,0,0,0,0,0, 147 0,0,0,0,0,0,0,0] 148 if Data[f5] == 1: 149 flame5=[0,0,0,0,0,0,0,0, 150 0,0,0,0,0,0,0,0, 151 0,0,0,0,0,0,0,0, 152 0,0,0,0,0,0,0,0, 153 0,0,0,0,0,0,0,0, 154 0,0,0,0,0,0,0,0, 155 0,0,0,0,0,0,0,0, 156 0,0,0,1,0,0,0,0, 157 0,0,0,0,0,0,0,1] 158 else: 159 flame5=[0,0,0,0,0,0,0,0, 160 0,0,0,0,0,0,0,0, 161 0,0,0,0,0,0,0,0, 162 0,0,0,0,0,0,0,0, 163 0,0,0,0,0,0,0,0, 164 0,0,0,0,0,0,0,0, 165 0,0,0,0,0,0,0,0, 166 0,0,0,0,0,0,0,0, 167 0,0,0,0,0,0,0,0] 168 if Data[f6] == 1: 169 flame6=[0,0,0,0,0,0,0,0, 170 0,0,0,0,0,0,0,0, 171 0,0,0,0,0,0,0,0, 172 0,0,0,0,0,0,0,0, 173 0,0,0,0,0,0,0,0, 174 0,0,0,0,0,0,0,0, 175 0,0,0,0,0,0,0,0, 176 0,0,1,0,0,0,0,0, 177 0,0,0,0,0,0,0,1] 178 else: 179 flame6=[0,0,0,0,0,0,0,0, 180 0,0,0,0,0,0,0,0, 181 0,0,0,0,0,0,0,0, 182 0,0,0,0,0,0,0,0, 183 0,0,0,0,0,0,0,0, 184 0,0,0,0,0,0,0,0, 185 0,0,0,0,0,0,0,0, 186 0,0,0,0,0,0,0,0, 187 0,0,0,0,0,0,0,0] 188 if Data[f7] == 1: 189 flame7=[0,0,0,0,0,0,0,0, 190 0,0,0,0,0,0,0,0, 191 0,0,0,0,0,0,0,0, 192 0,0,0,0,0,0,0,0, 193 0,0,0,0,0,0,0,0, 194 0,0,0,0,0,0,0,0, 195 0,0,0,0,0,0,0,0, 196 0,1,0,0,0,0,0,0, 197 0,0,0,0,0,0,0,1] 198 else: 199 flame7=[0,0,0,0,0,0,0,0, 200 0,0,0,0,0,0,0,0, 201 0,0,0,0,0,0,0,0, 202 0,0,0,0,0,0,0,0, 203 0,0,0,0,0,0,0,0, 204 0,0,0,0,0,0,0,0, 205 0,0,0,0,0,0,0,0, 206 0,0,0,0,0,0,0,0, 207 0,0,0,0,0,0,0,0] 208 if Data[f8] == 1: 209 flame8=[0,0,0,0,0,0,0,0, 210 0,0,0,0,0,0,0,0, 211 0,0,0,0,0,0,0,0, 212 0,0,0,0,0,0,0,0, 213 0,0,0,0,0,0,0,0, 214 0,0,0,0,0,0,0,0, 215 0,0,0,0,0,0,0,0, 216 1,0,0,0,0,0,0,0, 217 0,0,0,0,0,0,0,1] 218 else: 219 flame8=[0,0,0,0,0,0,0,0, 220 0,0,0,0,0,0,0,0, 221 0,0,0,0,0,0,0,0, 222 0,0,0,0,0,0,0,0, 223 0,0,0,0,0,0,0,0, 224 0,0,0,0,0,0,0,0, 225 0,0,0,0,0,0,0,0, 226 0,0,0,0,0,0,0,0, 227 0,0,0,0,0,0,0,0] 228 f1=f1+32 229 f2=f2+32 230 f3=f3+32 231 f4=f4+32 232 f5=f5+32 233 f6=f6+32 234 f7=f7+32 235 f8=f8+32 236 (略) 237 238 239 240 sendLEDdata(flame1,SER,RCLK,SRCLK) 241 242 243 244try: 245 While True: 246 sendimage(image)

※実際のプログラムです。まだ製作途中です。

###追加補足
使用するパーツは
1
2
3
参考にしているサイトは
リンク

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

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

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

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

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

guest

回答1

0

ベストアンサー

シリアルイン、パラレルアウトのシフトレジスタICであるSN74HC595Nを使っているという事から、sendLEDdata関数は、各LEDを点灯するか消灯するかを指定した値を第1引数、SN74HC595Nのシリアル入力(ser)とシリアルクロック(SRCLK)が接続されているピン番号を第2引数、第3引数とするものだと推測できます。

sendLEDdataの第1引数となる変数("変数X"と呼ぶことにします)を、変数Dataの値を順に読みだして作っていらっしゃいますが、ここの仕組み(例えば、Data[n]が1だったら、変数Xのn+2番目の値を0にする。Data[n]が0だったら、変数Xのn+2番目の値を1にする。というようなもの)はどうなっているのでしょうか?
簡略化できるか否かは、この仕組みがどうなっているかに掛かっていると思います。どのようにするのかというルールが、1番目からn番目まで全部異なっているという場合には簡略にできる可能性はほとんどありません。同じルール(Dataが1なら変数Xは0)が繰り返し使われるのなら、ループを使って簡略化することができる可能性が大です。

質問のコードは、(略)となっている部分が多いため、何をしたいのかが理解できません。
他人が読んで理解できるコードを書いてください。

投稿2016/08/20 07:53

編集2016/08/23 06:43
coco_bauer

総合スコア6915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問