Я новичок в последовательном программировании и пытаюсь создать программу, которая отправляет байты через последовательный порт на Arduino для управления светодиодной матрицей. Для эффективности я хочу сделать это в C ++, используя Windows API, с высокой скоростью передачи данных. Вот мой минимальный пример, который просто отправляет '1':
#include <windows.h>
DCB serialParams;
byte data[1];
DWORD bytessent;
int main(int argc, char* argv[])
{
data[0] = 1;
HANDLE arduino = CreateFile("/COM5", GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
serialParams.BaudRate = CBR_19200;
serialParams.ByteSize = 8;
serialParams.StopBits = ONESTOPBIT;
serialParams.Parity = NOPARITY;
SetCommState(arduino, &serialParams);
WriteFile(arduino, &data, 1, &bytessent, 0);
return 0;
}
Это работает хорошо, за исключением того, что вызов функции SetCommState, похоже, отправляет целую загрузку случайных данных в порт, что является головной болью, чтобы попытаться сортировать из фактических данных, поступающих. Есть ли способ в Windows API временно закрыть порт при внесении изменений? Это должно быть возможно, поскольку это может быть сделано довольно просто в Python с pySerial:
from serial import Serial
s = Serial("/COM5")
s.close()
s.baudrate = 18400
s.open()
s.write([1])