Работа с Arduino через COM-порт на C++

Мне необходимо передать данные на Arduino Uno с компьютера, после чего получить другие данные уже на компьютер от Arduino. Я написал реализующий данную логику код на Arduino и на компьютер, используя C++. К сожалению код работает исправно только сразу после прошивки Arduino Uno. Но если отключить Arduino от COM-порта, а затем опять подключить, то компьютер не может передать данные на плату. Какие могут быть причины? Код для компьютера

#include <windows.h>
#include <iostream>
using namespace std;

HANDLE serial;
char outData[] = "s";
DWORD outDataSize = sizeof(outData);
DWORD outBytesWritten;

void SerialRead() {
    DWORD inputDataSize;
    char receivedChar;
    while (true) {
        ReadFile(serial, &receivedChar, 1, &inputDataSize, 0); 
        if (inputDataSize > 0) cout << receivedChar;
    }
}

int main(){
    cout << ">> begin\n";
    LPCTSTR name = L"COM4";
    DCB sParams;

    serial = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (serial == INVALID_HANDLE_VALUE){
        if (GetLastError() == ERROR_FILE_NOT_FOUND){
            cout << ">> serial port does not exist\n";
            CloseHandle(serial);
            return 0;
        }
        cout << ">> some other error occurred\n";
        CloseHandle(serial);
        return 0;
    }

    if (!GetCommState(serial, &sParams)) {
        cout << ">> getting state error\n";
        CloseHandle(serial);
        return 0;
    }
    sParams.BaudRate = CBR_9600;
    sParams.ByteSize = 8;
    sParams.StopBits = ONESTOPBIT;
    sParams.Parity = NOPARITY;
    if (!SetCommState(serial, &sParams)) {
        cout << ">> error setting serial port state\n";
        CloseHandle(serial);
        return 0;
    }

    BOOL write = WriteFile(serial, outData, outDataSize, &outBytesWritten, NULL);
    cout << write;

    cout << ">> reading\n";
    while (true) SerialRead();

    return 0;
}

Код для Arduino Uno

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.read() == 's') Serial.print('e');
}

Ответы (1 шт):

Автор решения: Федор Яроцкий.

Добавил перед отправкой данных с компьютера паузу в три секунды Sleep(3000). Всё заработало.

→ Ссылка