ちょっと私は私のWindowsマシンに接続しているxbeesとのインターフェースを試みています。 ATモードのコーディネータを介してエンドデバイスに書き込むことができ、XCTUコンソールにストリーミングされたデータを見ることができます。しかし、私はそのデータを読む方法を理解するのに苦労しています。シリアルポートからバイトを読むC++ Windows
現在使用しているコードは次のとおりです。本質的に重要な部分は最後の5行程度です(具体的には、読み書きのファイル行)が、私はそれを徹底的に投稿するつもりです。 comポート経由でxbeeに送信したデータを読み取るにはどうすればよいですか?送信したデータは単純に0x00-0x0Fでした。
私は読んだファイルの機能を誤解していると思います。私はxbeeに送るビットは、一度に1つずつ読むことができるバッファに格納されていると仮定しています。あれは正しいですか?または、利用可能なデータを読み込むよりもバイト全体を書き込む必要がありますか?私の列車が混乱している場合は申し訳ありませんが、私はシリアル通信にかなり新しいです。どんな助けもありがとうございます。あなたの声明の中で
#include <cstdlib>
#include <windows.h>
#include <iostream>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
int n = 8; // Amount of Bytes to Read
HANDLE hSerial;
HANDLE hSerial2;
hSerial = CreateFile("COM3",GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);// dont need to GENERIC _ WRITE
hSerial2 = CreateFile("COM4",GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);// dont need to GENERIC _ WRITE
if(hSerial==INVALID_HANDLE_VALUE || hSerial2==INVALID_HANDLE_VALUE){
if(GetLastError()==ERROR_FILE_NOT_FOUND){
//serial port does not exist. Inform user.
cout << "Serial port error, does not exist" << endl;
}
//some other error occurred. Inform user.
cout << "Serial port probably in use" << endl;
}
DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams)) {
cout << "error getting state" << endl;
}
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams)){
cout << "error setting serial port state" << endl;
}
COMMTIMEOUTS timeouts = {0};
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier =10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
if (!SetCommTimeouts(hSerial, &timeouts)){
cout << "Error occurred" << endl;
}
DWORD dwBytesWritten = 0;
DWORD dwBytesRead = 0;
unsigned char oneChar;
for (int i=0; i<16; i++)
{
oneChar=0x00+i;
WriteFile(hSerial, (LPCVOID)&oneChar, 1, &dwBytesWritten, NULL);
ReadFile (hSerial2, &oneChar, 1, &dwBytesRead, NULL); // what I tried to do, just outputs white space
}
CloseHandle(hSerial);
return 0;
}