秋月のUSBIOの入門 使い方と性能 | 遥かなるひよこ道
秋月のUSBIOを買ってかれこれ半年は経っていた
http://akizukidenshi.com/catalog/g/gM-05131/

簡単に説明するとこのモジュールを接続すればVBなどでLチカをやれるようにしてくれる
HIDとして認識されるので挿すだけでOK
VBのサンプルプログラムもあるためとっかかりやすいぞ

IOは12(J1:8本 J2:4本)本あり1ポート25mA、合計で80mA取れる。全ポート出力で使うならちょっと足りないのでトランジスタなどが入るだろう
またJ2の4ポートは内部プルアップが可能だ
処理速度はおおむね300Hzといわれているぞ

1.APIと構造体宣言をコピる
接続したらさっそくVBでプログラムを書くわけだが、提供されているコードを最初にコピペーしよう
必要なのは上部の膨大なAPIなど宣言全部
API宣言は改行を消して1行にしたほうがすっきりする
APIのあとにグローバル変数(これもこぴるぞ)
    Dim byteStInJ1 As Byte      ' Pin Function J1
    Dim byteStInJ2 As Byte      ' Pin Function J2
    Dim byteOutJ1 As Byte = 0
    Dim byteOutJ2 As Byte = 0
    Dim byteInJ1 As Byte = 0
    Dim byteInJ2 As Byte = 0

byteStInJx:ポートのIOステータスメモリ
byteOutJx:ポート出力メモリ
byteInJx:ポート入力メモリ
ただしこの変数に値をいれたからといってすぐ通信されるわけではないぞ

2.関数をコピル
デバイスオープン、クローズ、通信の3関数をコピル
・openDevice
・closeDevice
・SendRecv

の3つだ


3.通信について
通信も上記関数をコピっておけば非常に簡単にできる
・ポート設定送信(&HF9)
・ポート設定受信(&HF8)
・ポートIO設定(&H20)
の3つくらいで十分だ(実は他にもたくさんコマンドがあるが)


▲通信時バッファの構造

上記を参考にバッファに値を設定すればいい

例.J1でできる限り早いLチカをやるプログラム
Dim i As Long
        Dim sendData(63) As Byte
        Dim recvData(63) As Byte
        For i = 0 To 100000
            ' J1.0でLチカをする
            byteOutJ1 = byteOutJ1 Xor &H1 : byteOutJ2 = &H0
            sendData(0) = &H20              'コマンド :デジタル入出力
            sendData(1) = &H1               '出力1:J1
            sendData(2) = byteOutJ1         '値
            sendData(3) = &H2               '出力2:J2
            sendData(4) = byteOutJ2         '値
            sendData(63) = &H0              'シーケンス
            SendRecv(sendData, recvData)    '送受信
            Label8.Text = i.ToString
            Application.DoEvents()
        Next i


Label8に現在のカウント値がでるがおおむね1秒で300カウントくらいである。
プログラムをいじることで1000Hzくらいまで早めることができるらしいので次回の課題にする

USB IOはパソコンで手軽にLEDが光らせられるアイテムの代表格と思っています


<参考資料>
km2net - 本家サイト
ここやサンプルには乗っていないコマンドなどが乗っているぞ