Arduino последовательный comm запись данных в программе win32

Я передаю буфер данных из Arduino Uno в программу C++ win32, но UNO отправляет данные слишком медленно. Я пытаюсь отправить 128 символьных байтов, но win32 получает байты после того, как примерно 92 места заполнены 0, а затем он идет 1,2,3,4....

com.read_n_data(data, 128); эта строка кода медленно принимает данные от UNO к ХОСТУ.
// main.cpp : Этот код предназначен для консольного приложения.
//
// Этот код записывает символ в COM2, а затем считывает из COM2 символ, который отображается.
// Это работа с платой UNO на другой стороне COM2, которая откликается на все UNO
// плата получает сигнал от COM2.
//
// Класс ComPort основан на коде в http://members.ee.net/brey/Serial.pdf
//

#include "stdafx.h"
#include <atlstr.h>
#include <iostream>
#include "COMport.h"

// необходимо , когда cin, cout используются
using namespace std;

int _tmain(int argc, _TCHAR* argv[]) // Это точка входа консольного приложения Visual C++ Application
{
    char data[128], mychar, char_skip;
    COMport com(_T("COM2")); // работает только для COM1 - COM9
    // COMport com(_T("\\\\.\\COM11"));  // Эта часть"\\\. \ " необходима для COM10 и выше

    for(int i=0; i<128; i++){
        cin.get(mychar); // это будет чтение символа с клавиатуры, включая пробел
        //cin >> mychar; // это будет читать символ с клавиатуры, но пропускать пробел
        cin.get(char_skip);  // игнорировать клавишу "Enter"
        //char b[100];
        //cin.getline(b, 100); // это будет читать целую строку с клавиатуры

        com.write_and_read(mychar); // это используется, чтобы увидеть, если другая сторона (UNO) эхом обратно символ
        cout << mychar;      
    }   

    com.write_n_data(data, 128); // запись 128 байт в COM-порт
com.read_n_data(data, 128); // чтение 128 байт из COM-порта
    // Обратите внимание, что Arduino Serial.println("...") добавляет в конце строки символ "carrige return".
    // за которым следует символ "новая строка".

Uno не отправляет данные достаточно быстро, буфер в хосте имеет серию '0' сначала 92 пятна. Вот код Uno

int const BUFSIZE = 128;
char ibuffer[BUFSIZE] ;
char obuffer[BUFSIZE] ;


void setup() {
  Serial.begin(9600); // открывает последовательный порт, устанавливает скорость передачи данных на 9600 бит / с
}

void loop() {
  if (Serial.available() > 0 ){
    for(int i= 0; i < 128; i++){
    ibuffer[i]=Serial.read();
    }
    
    Serial.write(ibuffer, BUFSIZE);
  }
}

, 👍0

Обсуждение

таков сайт sn Arduino ... программирование win32 здесь не по теме ... найдите сайт вдов, чтобы узнать о программировании последовательных портов, @jsotola

Извините, что я не дал всего кода об Arduino. Я добавил это сейчас, @ram patel

данные неинициализированы, поэтому их отправка и получение по-прежнему будут поддерживать их в неопределенном состоянии. Вы не знаете, что отправляете, поэтому вы не можете знать, чего вы ожидаете. Производительность - это определенно не ваша проблема., @PMF

Я думаю, что я отправляю данные так.. если (Serial.available() > 0 ){ для(int i= 0; i < 128; i++){ ibuffer[i]=Последовательный.чтение(); }, @ram patel

ПРОЧИТАЙТЕ: https://majenko.co.uk/blog/reading-serial-arduino, @Majenko

"Если есть хотя бы один символ, то прочитайте 128 символов".... Вы видите проблему в этом утверждении?, @Majenko

Я вроде как смущен этим утверждением на самом деле, поэтому я должен использовать serial.available()>128, @ram patel

Нет, потому что с 64-байтовым буфером этого никогда не произойдет. Вы должны правильно прочитать сериал. И для этого вы должны понять, как работает последовательная связь., @Majenko

подумайте о том, чтобы изучить функцию с именем readBytes вместо read, @Abel