この種の質問はインターネット上に散らばっていますが、何も私を正しく指し示すものはありません。シリアル・ストリームへのバイト書き込み
私はPropellerコントロールボードにシリアルストリームでコマンドを送信しようとしています。接続は機能しているようですが、送信するコマンドの種類によっては打撃エラーが発生します。10ffffffe1という同じ16進数のデータが返されます。送信されるデータが正しい形式でないようです。ボードはバイトデータを期待しているようですが、私のコードはそれをやっているようですが、私が間違っていることは分かりません。私はデータを正しく変換していないと思う。以下は私のコードです。みんな、ありがとう。
注:以下のコードは応答を読み取ることを示していません。それは動作する別のプログラムで実行され、シリアル端末からの応答も正しく読み込まれます。
#include <iostream>
#include <SerialStream.h>
using namespace LibSerial;
using namespace std;
int main(int argc, char** argv) {
SerialStream serial;
serial.Open("/dev/ttyUSB0");
serial.SetCharSize(SerialStreamBuf::CHAR_SIZE_8);
serial.SetBaudRate(SerialStreamBuf::DEFAULT_BAUD);
serial.SetNumOfStopBits(1);
serial.SetFlowControl(SerialStreamBuf::FLOW_CONTROL_NONE);
if(serial.good()){
cout << "SUCCESSFUL: serial port opened at: /dev/ttyUSB0" << endl;
usleep(5000);
}
else{
cout << "ERROR: Could not open serial port." << endl;
return 1;
}
std::string str= "ver\r"; //command to get version of firmware
const char* data = str.data();
serial.write(data, sizeof data);
return 0 ;
}
str.size()に関するアドバイスをいただき、ありがとうございます。明日の朝仕事でそれを最初に試してみるでしょう。それがうまくいくことを望みます。 ええ、デフォルトのボーレートの問題も問題ですが、私はこれを現時点で持ち上げたいとは思っていませんでした。場合によっては、デフォルト以外のボーレートの設定はできません。すべてエラーを返します。どうしてか分かりません。理由を知っていると思いますか? –
@ 30hoursflight:シリアルポートライブラリが表示されていないと、他のボーレートが動作していない理由がわかりません。実際のPC-ATシリアルポート、またはUSBシリアルアダプタですか?そして私は間違ったボーレートを使用するとあなたの質問が話すゴミデータの種類を与えると信じています。あなたはボーレートを解決するまでは何も解決できません。 –
しかし、私はデバイスからシリアルデータを読み取る別のプログラムを持っています。ボーレートと同じ問題がありますが、正しいデータを読み取ることができます。したがって、私はボーレートが大きな問題ではないと考えました。どう思いますか?シリアルポートライブラリの名前は、コードに見られるように "LibSerial"です。私は彼らが有効なボーレート値であると確信しています。どう思いますか? –