プログラム周り

PythonでGainerを制御する。

Gainerは、IAMASのプロジェクトで生まれたA/D,D/Aコンバータだ。USB接続で電源も、USBから供給できるので、A/Dコンバーターを手軽に行うことが出来る。

ProcessingやMax/MSP,Flashなどのライブラリがあるが、pythonのライブラリは無かった。見てみたら、シリアル通信の延長のようなものだったので、A/Dの部分をテストしてみた。

pythonでシリアル通信。pythonでシリアル通信をする際には、PySerialライブラリが必要なので、ここでダウンロードする。 windowsの場合は、win32all extensionsも必要なので一緒に落とす。

大雑把な概要

gainerはシリアル通信で、たとえば、"I*"見たいなコマンドを送れば、"AFFFF00FF*"みたいな値を返してくる。それを使って、入出力をする。

はまったのは、送ったコマンドには、必ず返信があるので、それを全部読んで、バッファーに残さないことと、使い終わったら、"Q*"を送信して、リセット?をすることだと思います。

簡単なサンプル

簡単な使い方。

ser=serial.Serial(3,115200,timeout=1) ##COM番号は適当、環境に合わせてください。
def spr(ser): ##ser.read()をして、バッファが空になるまで読んで、値を返す関数
    k=""
    while True:
        p=ser.read()
        if p=='*':
            break
        k+=p
    return k
ser.write('KONFIGURATION_1*') ##モードを設定する。
print ser.readline()
ser.write('R*')
print spr(ser) ##R0001*みたいな値が帰ってくる
ser.write('Q*') #rebootして初期化しておく
ser.close()

色々と試してみた,AD,DAを色々と試してみた。

import serial,time
ser=serial.Serial(3,38400,timeout=1)
print ser.portstr
print ser
#ser.write('Q')
#ser.read(2)
ser.write('?*')
print ser.read(20)
#ser.write('V1*')
#print ser.read(3)
ser.write('KONFIGURATION_1*')
print ser.readline()
#time.sleep(0.1)
def spr(ser):
    k=""
    while True:
        p=ser.read()
        if p=='*':
            break
        k+=p
    return k
def ain(ser):
    k=""
    numa=[]
    while True:
        p=ser.read()
        if p=='*':
            break
        k+=p
    k=k[1:]
    for i in range(0,8,2):
        num=k[i:i+2]
        num=int(num,16)
        numa.append(num)
    return numa


for i in range(10):
    ser.write('h*')
    print spr(ser)
#    time.sleep(0.1)
    ser.write('l*')
    print spr(ser)
#    time.sleep(0.1)

for i in range(8):
    k=31*(i+1)
    str='a0%0X*' % k
    print str
    ser.write(str)
    print spr(ser)
    time.sleep(0.1)
    ser.write('a000*')
    print spr(ser)
    time.sleep(0.1)
for i in range(200):
    str='I*'
    ser.write(str)
    print ain(ser)
    time.sleep(0.1)
for i in range(10):
    str='S0*'
    ser.write(str)
    print spr(ser)
    str='S1*'
    ser.write(str)
    print spr(ser)
    time.sleep(0.1)
str='E*'
ser.write(str)
print spr(ser)

for i in range(10):
    str='R*'
    ser.write(str)
    print spr(ser)
    time.sleep(0.1)

ser.write('AFFFFFFFF*')
time.sleep(0.1)
print ser.read(2)
ser.write('Q*')
ser.close()

拡張

pygameでgainerを制御する


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-02-01 (日) 14:38:23 (819d)