Arduino関連の情報を探すとシリアル通信はSerial.printやSerial.printlnなどをつかったテキストで通信することが主であるように感じます。簡単ですし、直感的ですし、ArduinoIDEのシリアルモニタでも見られますから便利っちゃあ便利なんですが、当然データ量がおおくなります。例えばn=255としてprintln(n,DEC)なんてやると「255」+CR+LFと5バイトも送っちゃうことになります。遅くてもいいならこれでも充分なんですが、ちょっと真剣になにかやろうとすると時間的なネックになります。そこでバイナリモードを使います。使うコマンドはSerial.write(配列, データ長)です。これを使えばCR+LFといったデリミタを無視できるし、そこそこ長いデータも一括転送できるという御利益があります。デメリットはPCB側などがちょっと鬱陶しくなる。とりあえず動作テストにサンプルスケッチを組んで見ました。
byte x[512];
int n;
void setup(){
Serial.begin(9600);
for (n=0; n<256; n++){
x[2*n]=n;
x[2*n+1]=n;
}
}
void loop(){
Serial.write(x,512);
delay(3000);
}
実行すると3秒に1回の割合で1,1,2,2,3,3・・・・255,255という512バイトがドサッと送られてきます。
F-BASIC ver6.3で受けるサンプルプログラムも公開!正に誰得な情報!
open "COM4:(S8N1N8)" for input as #1
baud 4,9600
BUF$=space$(512)
*main
'print lof(1)
buf$=input$(512, #1)
for n=0 to 511
print asc(mid$(buf$,n+1,1))
next
goto *main
close #1
COMポートは自分の環境に併せて変更すること。
殺してあるLOFは受信バッファ内のデータ数を示すもの。
※コメント投稿者のブログIDはブログ作成者のみに通知されます