2014年5月6日火曜日

C# で arduino シリアル通信するときの落とし穴

C# 2008 です。
arduino => C# の受信をやるとき。

ArduinoとC#でのシリアル通信
Invokeとdelegate
この辺を参考に作っていたんだけど。
動かない!!!!

色々調べると、受信バッファにはデータがたまっているけどイベントが発生していないことが判明。
Invokeとかの問題以前だった。


で、結局、何が悪かったのかというと。

  • VisualStduioのIDEでserialPortコンポーネント貼り付けただけじゃだめ。
  • 受信イベントをメンバ関数に紐付けてやる必要があった。

こんなこと書いてあるHPひとつも無かった(笑


どうやるかっていうと。



private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    Console.WriteLine("reved!");
}

こんなイベント受信メソッド書いたとします。
動作は「何か受信したら "reved!" という文字をコンソールに吐き出す」というもの。
これはテンプレ通り。


そうしたら
こんな風にプロパティウインドウから稲妻マーク押して、イベント一覧出す。
そして serialPort1_DataReceived を書いてやらなきゃいけない。
これでイベント発生がメンバ関数に紐づきました。


VB6とかで慣れていた自分には盲点でした。
いやはや・・



見付けるきっかけになったのは以下の3つ





睡眠と支援大事だなあ。



.

0 件のコメント:

コメントを投稿