僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
GPIOを合計10本(LEDに8本、ダイナミック点灯のために2本)使って、
やっと数字二桁(整数が0-99, 小数つきで0.0から9.9、合計200種)
までだから、かなり無駄の多い仕様だ。
8本なら256とおりが表現できるし、コモンにGPIOを2本割り当てて
切り替えれば組み合わせは倍になる。
でも、一度はやってみたかった。
使ったLEDは「7セグメント」でもドットが二つあり、9本あった。
GPIOがちょっと不足(26ピンのP1で8本)なおかつ短絡してしまったので、
ドットの一つは不採用とした。
なんとか点灯を確認し、コマンドライン向けのスクリプトと、
ダイナミック点灯の動作確認
スクリプトを作成。
いずれもシェルでは遅すぎて、「数字」が一瞬で点灯するようには
見えない。特に
ダイナミック点灯は
当初
交互に点灯するのが見えたので
差分だけIN/OUTを切り替えるようにしてみたが、それでもちらつき
は消せなかった。
受け取った文字列の数字を左右逆にする方法を、まず 以前考えてすっかり忘れていた手段で実装する。
#!/usr/bin/env python
from sys import argv
numstr = argv[1]
if numstr.isdigit():
if int(numstr) > 99:
print 'too large'
else:
upper = int(numstr)/10
lower = int(numstr)%10
print str(lower) + str(upper)
else:
print 'NG'
$ python numreb.py 34 43
もっと簡単で 基本的な方法を思い出した。
#!/usr/bin/env python
from sys import argv
numstr = argv[1]
if numstr.isdigit():
if int(numstr) > 99:
print('too large')
else:
print(numstr[::-1])
else:
print('NG')
過去に書いたことなかったっけ。
$ number 239010397.5 two hundred thirty-nine million. ten thousand. three hundred ninety-seven. and five. tenths.
どのくらい合ってるのかよく分からないが
今度はpython で
"72"と十秒間表示するスクリプトを
書いてみた。
速度的には問題無し。ちらつきも感じられず
二つの数字が瞬時に点灯し、同時に消灯する
ように見える。
python3でも動いたが、両方が同時に 点灯するまで、少し(0.6秒ほど余計に)待たされる。
$ time sudo python dytest.py real 0m10.600s user 0m0.400s sys 0m0.120s $ time sudo python3 dytest.py real 0m11.192s user 0m0.990s sys 0m0.120s
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。