在c ++中通过串口发送数据

时间:2014-08-31 09:13:14

标签: c++ serial-port arduino

我已将此代码复制到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, "Error\n");
        return 1;
}
else fprintf(stderr, "OK\n");

// 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 state\n");
    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 parameters\n");
    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 timeouts\n");
    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, "Error\n");
    CloseHandle(hSerial);
    return 1;
}   
fprintf(stderr, "%d bytes written\n", bytes_written);

// Close serial port
fprintf(stderr, "Closing serial port...");
if (CloseHandle(hSerial) == 0)
{
    fprintf(stderr, "Error\n");
    return 1;
}
fprintf(stderr, "OK\n");

// 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;

我想使用自己的字符串和方法将它们转换为字节,以便我可以通过串口发送它们。

1 个答案:

答案 0 :(得分:0)

字符串已经是一个字节数组。

char bytes_to_send[] = "hello";