前回、Raspberry Pi Zero WHで8つのLEDをチカチカさせたが、せっかく8つあるので2進数として扱い、みんな大好き8bitで256までカウントしてみようと思った。
uyamazak.hatenablog.com
計算機科学の教材として2進数を体感する教材としても利用価値があるかもしれない。
動画
8個のLEDを使って2進数で256まで数える #RaspberryPi pic.twitter.com/QBtkCmtRoS
— uyamazak - 🐐 (@uyamazak) 2019年6月25日
コード
前回のコードからgenerate_demo_pattern()部分を差し替えるだけ。
今回も無駄にジェネレータを使い、さらに無理にでもリスト内包表記で表現することでコメントを入れてもびっくりするほど読みづらいコードとなった。 メモリが少ないラズパイでメモリ効率大事だとしても職場で書いたら場合によっては命に関わるレベル。
def generate_binary_list(): for i in range(0, 256): print(i) yield [index + 1 for index, value in enumerate([int(b) for b in reversed(format(i, 'b').rjust(8, '0'))]) if value == 1]
書いた本人もすでに解読不能となっている。
出力はこんな感じで、要求通り。
0 [] 1 [1] 2 [2] 3 [1, 2] 4 [3] 5 [1, 3] # 省略 248 [4, 5, 6, 7, 8] 249 [1, 4, 5, 6, 7, 8] 250 [2, 4, 5, 6, 7, 8] 251 [1, 2, 4, 5, 6, 7, 8] 252 [3, 4, 5, 6, 7, 8] 253 [1, 3, 4, 5, 6, 7, 8] 254 [2, 3, 4, 5, 6, 7, 8] 255 [1, 2, 3, 4, 5, 6, 7, 8]
せっかく無駄にがんばったので、途中までの過程もがんばってGoogle Colaboratoryで書き、GitHub Gistで公開してみた。ジェネレータにはしてないけどほぼ同じ。
良いことないけどリスト内包表記でここまで出来るって感じてもらえたら嬉しい。良いことはないっていうのが分かるのは良いことかも。
なお一度書いたら解読や変更は困難な模様で、Colaboratoryでは0から書き直している。
使ったラズパイは下記。
For raspberry pi カメラモジュール 5MP Raspberry Pi 3 b+ / Pi Zero Camera とケース500W画素 感光チップOV5647センサー
- 出版社/メーカー: LOTW
- メディア: エレクトロニクス
- この商品を含むブログを見る
妙に安いカメラも届いたので次の土日につなげてみて、LEDの光具合を撮影できるようにしたい。
Raspberry Pi Zero WH スターターセット (本体・ケース・ヒートシンク・Mini-HDMIケーブル・OTGアダプター)
- 出版社/メーカー: Raspberry Pi
- メディア: エレクトロニクス
- この商品を含むブログを見る