マカロニペンギンの健忘録

特にテーマを決めているわけじゃないが、私が気になったことを書いていく予定です。

Arduono+Python+Firmataの今日の成果

2014年11月26日 | 電子工作
先日のラズパイコンテストに応募してから逆にArduono+Python+Firmataに魅せられて、頑張っています。(念の為、別にRaspberryPiが嫌いというわけではないです)

とりあえず、今日完成した成果から

Arduonoのシールドは何年か前のMakerFaireTokyoでスイッチサイエンス + セニオネットワークのワークショップに参加した時に娘がハンダゴテを使用して作った「五徳バーLEDシールド」です。

その時に使われていた教科書がどこかに行ってしまったので逆にハード側から調べたのですが、バーLEDのしくみが分からない。
ホント、四苦八苦して調べたら、Complementary LED Driveという方式で点滅していることが判明。

参考:パレットソフトさんの複数LED制御のページの「サンプルプログラム(その2:Complementary LED Drive)」という項目。

とりあえず、作ってみたスケッチはこちら

from firmata import * 

a = Arduino('/dev/ttyUSB0',baudrate=57600) # 3 for COM4

#[Z,Z,Z,L,H]→Z:入力にするポート、L:出力LOWにするポート、H:出力HIGHにするポートの順番で配列(リスト)

led_matrix = [[2,3,4,1,5],[1,3,4,2,5],[1,2,4,3,5],[1,2,3,4,5],[2,3,5,1,4],[1,3,5,2,4],[1,2,5,3,4],[1,2,3,5,4],[2,4,5,1,3],[1,4,5,2,3],[1,2,5,4,3],[1,2,4,5,3],[3,4,5,1,2],[1,4,5,3,2],[1,3,5,4,2],[1,3,4,5,2],[3,4,5,2,1],[2,4,5,3,1],[2,3,5,4,1],[2,3,4,5,1]]


def led_print(n):
#毎回、一旦全部のポートを出力LOWにしている。
    for j in range(5):
       a.pin_mode(n[j] + 4, firmata.OUTPUT)
       a.digital_write(n[j] + 4, firmata.LOW)

#入力にするポート、出力LOWにするポート、出力HIGHにするポートの順番で設定

    print 'SEG' + str(n[0] + 3) + '= Z'
    a.pin_mode(n[0] + 3, firmata.INPUT)

    print 'SEG' + str(n[1] + 3) + '= Z'
    a.pin_mode(n[1] + 3, firmata.INPUT)

    print 'SEG' + str(n[2] + 3) + '= Z'
    a.pin_mode(n[2] + 3, firmata.INPUT)

    print 'SEG' + str(n[3] + 3) + '= L'
    a.pin_mode(n[3] + 3, firmata.OUTPUT)
    a.digital_write(n[3] + 3, firmata.LOW)

    print 'SEG' + str(n[4] + 3) + '= H'
    a.pin_mode(n[4] + 3, firmata.INPUT)
    a.digital_write(n[4] + 3, firmata.HIGH)

    a.delay(0.02)

#本文
a.delay(2)
while 1:
    for i in range(20):  
        print str(i) + " = " + str(led_matrix[i])
        led_print(led_matrix[i])


まあどれをとっても最初にしては上出来では・・・

最新の画像もっと見る

コメントを投稿