gpt4 book ai didi

c++ - 不正确的值被打印到文件中。串口通信程序

转载 作者:行者123 更新时间:2023-11-28 08:16:12 25 4
gpt4 key购买 nike

此代码应该向 COM3 发送命令,将响应发送到文件 - 然后从 COM5 读取一定数量的字符并将其写入文件。正在打印奇怪的值。

我想我看代码的时间太长了。任何帮助都会很棒。

#include <Windows.h>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;
int main()
{
ofstream myfile;
myfile.open ("example.txt", 'w');

HANDLE hSerial = CreateFile("COM3",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
HANDLE hSerial2 = CreateFile("COM5",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

if(hSerial==INVALID_HANDLE_VALUE)
std::cout << "Insert error message";

DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);

if (!GetCommState(hSerial, &dcbSerialParams))
std::cout << "Insert error message";

dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;

if (!SetCommState(hSerial,&dcbSerialParams))
std::cout << "Insert error message";


COMMTIMEOUTS timeouts={0};
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
if(!SetCommTimeouts(hSerial, &timeouts))
std::cout << "Insert error message";


int i = 0;
while(i < 10)
{
char szBuff[50+1] = {0};
char lzBuff[400] = {0};
char wzBuff[14] = {"AT+CSQ\r"};

DWORD dZBytesRead = 0;
DWORD dwBytesRead = 0;


if(!WriteFile(hSerial, wzBuff, 7, &dZBytesRead, NULL))
std::cout << "Write error";

if(!ReadFile(hSerial, szBuff, 50, &dwBytesRead, NULL))
std::cout << "Read Error";

if(!ReadFile(hSerial2, lzBuff, 400, &dZBytesRead, NULL))
std::cout << "Read Error";


std::string test2 = std::string(lzBuff).substr(300,10);
//std:: cout << szBuff;
if(dwBytesRead > 9)
{
std::string test = std::string(szBuff).substr(8,3);
myfile << test <<endl << endl << endl;

std::cout << test << endl;
}

if(dZBytesRead > 200)
{
std::string test2 = std::string(lzBuff).substr(1,10);
myfile << test2 << '\n' << '\n';

}

Sleep(500);
i++;
}

myfile.close();
return 0;
}

最佳答案

当我的 COM 端口吐出奇怪的字符时,通常是因为波特率不匹配。

您应该在 hSerial2 上调用 SetCommState 以确保它具有与 hSerial 相同的波特率。

关于c++ - 不正确的值被打印到文件中。串口通信程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7692411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com