私はBluesmirf Silverモジュールが接続されたArduino Unoを持っています。私のArduinoには定期的に温度を記録する温度センサーがあります。 Arduinoは、ブルートゥースを介して送信された文字列をリッスンし、最新のデータで応答します。C#からBluetoothシリアルポート経由でArduinoにテキストを送信する問題を解決するには
私はこのデータを取得するためにC#アプリケーションを作成しましたが、私はいくつかの奇妙な動作を見ています。次のコードを使用して接続し、文字列を送信し、返されたデータを取得します。
mPort = new SerialPort(mPortName, 115200, Parity.None, 8, StopBits.One);
mPort.Open();
mPort.Write("download");
Thread.Sleep(1000);
while (mPort.BytesToRead > 0)
{
String data = mPort.ReadExisting();
this.BeginInvoke(new Action<String>(AddMessage), data);
}
私は戻って取得データは、次のようになります。
ラインは、C#アプリケーション内で局所的に追加:
Send: download
行はアルドゥイーノから受信したデータに基づいて、コメントを追加しました:
Read: d???+?
GotData
------
Total Readings, 1069
Num Readings, 360
Lost Readings, 709
Reading Interval, 240000
------
350,19.34
351,19.34
352,19.34
353,20.31
....
すべてのテキストは、私がArduinoに送ったエコーバックされている文字列とは別に、上手く見えます。私がデータを送った方法に間違ったことをしましたか?
FYI- ブルートゥースモジュールのデータシートはこちらです:http://www.sparkfun.com/datasheets/Wireless/Bluetooth/rn-bluetooth-um.pdf
@Jeff - これは私がデータを受信するために私のArduinoの上で使用するコードです:https://github.com/mchr3k/arduino/blob/master/tempsensor/StringReader.cpp
@Jeff - stringDataLenは長さを定義し、私はこのファイルから、全体的な関数を呼び出す:https://github.com/mchr3k/arduino/blob/master/tempsensor/tempsensor.ino
編集:ここでは完全なソースコードがある
- アルドゥイーノ - https://github.com/mchr3k/arduino/tree/master/tempsensor
- C#アプリケーション - https://github.com/mchr3k/arduino/tree/master/serialdownload
C#のコードは間違いなくいくつかの理由で間違ったフロー制御を取得しています。私はC#で次のコードを使用するように切り替えると、これは破損せずに文字列を取得します。
private void write(SerialPort mPort, string str)
{
foreach (char c in str)
{
mPort.Write(new char[] {c}, 0, 1);
Thread.Sleep(10);
}
}
関連するArduinoコードを表示できますか?受け取った文字をエコーするようにプログラムされていますか? – Jeff
StringReader.cppでstringDataの長さを宣言していないため、変数が壊れていると思います。 – Jeff