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);
}
}
@ram patel, 👍0
Обсуждение0
Смотрите также:
- Самый прямой способ назначить байты Serial.read() массиву?
- Как точно получить значения потенциометра через USB-порт?
- Последовательная связь между ESP8266 и Arduino Uno
- Arduino Преобразование std:string в String
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Как работает последовательная связь на Arduino?
- Как связаться с датчиком через порты RX/TX Arduino?
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
таков сайт 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