日々是好日

日記とかそういったもの

Arduinoでシリアル通信 さらにバイナリモード

2013-06-20 12:40:34 | 電気・電子・PC

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は受信バッファ内のデータ数を示すもの。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 起きて半畳、寝て一畳といい... | トップ | 与太話数話 »
最新の画像もっと見る

コメントを投稿

電気・電子・PC」カテゴリの最新記事