0

Arduino マイクロコントローラーと通信しようとしています。これは C# では非常に簡単に実行できますが、C++ では理解できません。これが私のarduinoコードです...

void loop()
{
  if (Serial.available() > 0)
  {
    byte input = Serial.read();
    Serial.write(input);
  }
}

そのため、arduino に送信したものはすべて返送されます。

fstream ライブラリを使用して書き込みを読み取ることができます。問題は、バッファから読み取ろうとしたときに何もないことです。

int main(int argc, char** argv)
{
fstream filestr;
filestr.open ("COM4", fstream::in | fstream::out | fstream::trunc);

if (!filestr.is_open())
{
    cout << "error opening port";
}
else
{
    cout << "port opened";
}

char* input = new char();
cin >> input;
filestr.write(input, 1);
filestr.flush();

char * buffer = new char [1];
buffer[0] = -1;

filestr.read (buffer,1);
while ((int)buffer[0] == -1)
{
    filestr.read (buffer,1);
}
cout << buffer[0];

cin >> input;

filestr.close();
return 0;  
}

だから私はそれにいくつかのデータを送信し、arduino が応答するまでループで読み取りを開始します。arduinoが応答する時間がないため、最初の読み取りでは何も返されないため、データを取得するまで読み取りを続けます。しかし、一向に返事が来ないようです。最初の読み取りの前に少し遅延を置き、arduino に応答する時間を与えると、うまくいきます。何かを読むと、読者の位置は前に移動しますか? バッファから何かを読み取ると、バッファから自動的に削除されますか? 誰でもこれを行う方法を知っていますか?

4

2 に答える 2

0

Boost Asio を使用してシリアル ポートを読み取ることに関するこの別の質問を確認してください: Boost Asio を使用したシリアル ポートからの読み取り

于 2012-09-09T21:38:53.187 に答える
0

arduino のfirmata Windows ツールのコードを取得する必要があります。それはあなたがやろうとしていることすべてを行います。

http://firmata.org/wiki/Main_Page

于 2012-09-09T15:03:03.840 に答える