GAミント至上主義

Web Monomaniacal Developer.

8つのLEDでLチカして2進数で256まで数えさせる【Raspberry Pi Zero WH】

前回、Raspberry Pi Zero WHで8つのLEDをチカチカさせたが、せっかく8つあるので2進数として扱い、みんな大好き8bitで256までカウントしてみようと思った。
uyamazak.hatenablog.com

計算機科学の教材として2進数を体感する教材としても利用価値があるかもしれない。

動画


コード

前回のコードから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から書き直している。

f:id:uyamazak:20190625232625p:plain

使ったラズパイは下記。

妙に安いカメラも届いたので次の土日につなげてみて、LEDの光具合を撮影できるようにしたい。