0

Так что я нашел этот учебник для Arduino Visual Studio Communication: http://playground.arduino.cc/Interfacing/CPPWindowsArduino и Visual C++ Последовательная связь

После чтения на нем я написал небольшую программу на Arduino, который считывает код ASCII персонажа и возвращает измененное значение. Я уже тестировал его с помощью последовательного монитора. Однако, когда я написал программу ниже, я получил не только ответ, но также получил «мусор».

#include <iostream> 
#include <string> 
#include "Serial.h" 

using namespace std; 

int main(int argc, char* argv[]) 
{ 
    Serial * Arduino = new Serial("COM8"); 
    cout << "Communicating with COM7 enter data to be sent\n"; 
    char data[256] = ""; 
    int nchar = 256; 
    char incomingData[256] = ""; 
    while (Arduino->IsConnected()) 
    { 
     cin >> data; 
     Arduino->WriteData(data, nchar); 
     Arduino->ReadData(incomingData, nchar); 
     cout << incomingData << endl; 
    } 
    return 0; 
} 

вывод выглядит следующим образом:

F:\Serial\Debug>Serial.exe 
Communicating with COM7 enter data to be sent 
1 
2☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
a 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺b☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ 
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺╠╠╠╠╠╠╠╠ 
^C 
F:\Serial\Debug> 

Может кто-нибудь пролить свет на как я должен идти об изменении этого кода, так что я могу послать и получить определенное количество символов, или в этом случае, если один персонаж. Я уже пытался изменить nchar на 1, чтобы он мог отправлять только один символ; однако это приводит к тому, что выходные данные не синхронизируются. Любая помощь приветствуется.

ответ

2

Прежде всего, вы всегда пришлите nchar байт, независимо от того, сколько (или немного) вы читаете от пользователя. А также данные, которые вы читаете из последовательного порта, вы не завершаете его как строку.

Для начала просто остановите использование массива для этого и используйте std::string (чтобы избежать возможных переполнений буфера) и отправьте size байт.

Затем, при получении, вам нужно узнать, сколько байтов вы получили, а затем завершите массив как строку (или используйте std::string там тоже, есть constructor, который позволяет передавать указатель и размер).

+0

Спасибо, я понимаю, что вы имели в виду, и это помогло, хотя мне также понадобилось добавить цикл while, который продолжал читать, пока не будут доступны данные. По крайней мере, для первого чтения. – user2881196

Смежные вопросы