トップ «前の日記(2014-05-28(Wed)) 最新 次の日記(2014-05-30(Fri))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2014-05-29(Thu) 寝不足。晴れがまぶしい

7セグメントLEDダイナミック直接接続

7 segment LED

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を切り替えるようにしてみたが、それでもちらつき は消せなかった。

ABをBAにする

受け取った文字列の数字を左右逆にする方法を、まず 以前考えてすっかり忘れていた手段で実装する。

#!/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(6)

過去に書いたことなかったっけ。

$ 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や内容が変った場合はあしからず。

index.htmlは ここから。