안녕하세요 저는 Windows 컴퓨터에 연결된 xbees와의 인터페이스를 시도하고 있습니다. AT 모드에서 코디네이터를 통해 최종 장치에 쓸 수 있으며 내 XCTU 콘솔로 스트리밍 된 데이터를 볼 수 있습니다. 그러나 들어오는 데이터를 읽는 방법을 이해하는 데 문제가 있습니다.직렬 포트에서 바이트 읽기 C++ Windows
현재 사용중인 코드는 아래에 있습니다. 근본적으로 중요한 부분은 마지막 5 줄 정도 (특히 읽기 및 쓰기 파일 행)이지만, 모든 내용을 철저히 게시하려고합니다. com 포트를 통해 xbee로 보낸 데이터를 어떻게 읽습니까? 보낸 데이터는 단순히 0x00-0x0F입니다.
내가 읽은 파일의 기능을 잘못 이해하고 있다고 생각합니다. 나는 xbee에 보내는 비트가 한 번에 하나씩 읽을 수있는 버퍼에 저장되어 있다고 가정합니다. 그 맞습니까? 또는 데이터를 읽는 것보다 전체 바이트를 쓸 필요가 있습니까? 실망 스럽지만 열차가 혼란 스럽다면 직렬 통신을 처음 접했습니다. 어떤 도움을 주셔서 감사합니다. 명세서에서
#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;
}