通过c++中的串口发送数据
sending data through serial port in c++
我已经复制了这段代码,以便通过c++中的串行端口进行编写。它工作正常,但我现在需要知道如何将字符串转换为字节数组,因为我想写几个字符串来与arduino通信。我把代码粘贴在这里:
#include <windows.h>
#include <stdio.h>
int main()
{
// Define the five bytes to send ("hello")
char bytes_to_send[5];
bytes_to_send[0] = 104;
bytes_to_send[1] = 101;
bytes_to_send[2] = 108;
bytes_to_send[3] = 108;
bytes_to_send[4] = 111;
// Declare variables and structures
HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts = {0};
// Open the highest available serial port number
fprintf(stderr, "Opening serial port...");
hSerial = CreateFile(
"\\.\COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if (hSerial == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "Errorn");
return 1;
}
else fprintf(stderr, "OKn");
// Set device parameters (38400 baud, 1 start bit,
// 1 stop bit, no parity)
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (GetCommState(hSerial, &dcbSerialParams) == 0)
{
fprintf(stderr, "Error getting device staten");
CloseHandle(hSerial);
return 1;
}
dcbSerialParams.BaudRate = CBR_38400;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if(SetCommState(hSerial, &dcbSerialParams) == 0)
{
fprintf(stderr, "Error setting device parametersn");
CloseHandle(hSerial);
return 1;
}
// Set COM port timeout settings
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
if(SetCommTimeouts(hSerial, &timeouts) == 0)
{
fprintf(stderr, "Error setting timeoutsn");
CloseHandle(hSerial);
return 1;
}
// Send specified text (remaining command line arguments)
DWORD bytes_written, total_bytes_written = 0;
fprintf(stderr, "Sending bytes...");
if(!WriteFile(hSerial, bytes_to_send, 5, &bytes_written, NULL))
{
fprintf(stderr, "Errorn");
CloseHandle(hSerial);
return 1;
}
fprintf(stderr, "%d bytes writtenn", bytes_written);
// Close serial port
fprintf(stderr, "Closing serial port...");
if (CloseHandle(hSerial) == 0)
{
fprintf(stderr, "Errorn");
return 1;
}
fprintf(stderr, "OKn");
// exit normally
return 0;
}
这是我想更改的部分:
// Define the five bytes to send ("hello")
char bytes_to_send[5];
bytes_to_send[0] = 104;
bytes_to_send[1] = 101;
bytes_to_send[2] = 108;
bytes_to_send[3] = 108;
bytes_to_send[4] = 111;
我想使用我自己的字符串和一种方法将它们转换为字节,这样我就可以通过串行端口发送它们。
字符串已经是一个字节数组。
char bytes_to_send[] = "hello";
相关文章:
- 为什么我要从串口读取垃圾?
- Boost Asio SerialPort。无法创建并打开串口服务
- 如何在QtWidget中使用c++串口发送数据
- 如何插入十六进制值并发送到串口?
- 串口打开返回 EAGAIN
- QT 5.10.1 串口不发送,为什么?
- 通过串口发送后无法获取原始值
- C++ / RS232C 串口 / 事件回调异步读取缓冲区 / 不使用线程
- 为什么Qt(4.8)串口(qextserialport)分两部分从设备读取数据
- 通过c++中的串口发送数据
- 将十六进制数据发送到串口
- 在Ubuntu中使用c++从串口读取数据到USB
- 无法向串口写入数据
- 接收在第一次读取之前被发送到串口的数据
- 通过RS232串口发送数据到条码扫描器
- 如何在c++中从串口发送和读取数据
- 在Qt中等待数据从串口到达
- 什么是c++中串口数据读取的回调函数?下面是Matlab中的一个例子
- RFID虚拟串口读取数据时超时
- Boost asio串口最初发送坏数据