Я использую Arduino и Visual studio C++ и пытаюсь построить двухстороннюю последовательную связь в реальном времени. Я использую win 10 (в VMware Fusion), 32-битную систему, визуальную студию 2013, Arduino IDE 1.8.0 и Arduino board Uno.arduino и visual studio C++, двухсторонняя последовательная связь
Я использовал библиотеку файлов из http://playground.arduino.cc/Interfacing/CPPWindows, которые два файла: SerialClass.h и Serial.cpp. И я использую readData() и WriteData() Функция в моем основном.
Я хочу запустить его еще несколько раз, пользователь может ввести ввод в консоль, и Arduino будет генерировать результат соответственно. Но когда я добавил цикл while, он работает неправильно.
Ниже мой main.cpp: (с в то время как цикл в строке комментария)
int main() {
Serial* port = new Serial("COM3");
if (port->IsConnected()) cout << "Connected!" << endl;
char data[4] = "";
char command[2] = "";
int datalength = 4; //length of the data,
int readResult = 0;
int n;
for (int i = 0; i < 4; ++i) { data[i] = 0; } //initial the data array
//read from user input
//this is where I added while loop
// while(1){
std::cout << "Enter your command: ";
std::cin.get(command, 2); //input command
int msglen = strlen(command);
if (port->WriteData(command, msglen)); //write to arduino
printf("\n(writing success)\n");
//delay
Sleep(10);
//read from arduino output
n = port->ReadData(data, 4);
if (n != -1){
data[n] = 0;
cout <<"arduino: " data << endl;
}
// }
system("pause");
return 0;
}
и мой Arduino код:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0) {
char c = Serial.read();
if (c == '1')
Serial.write("10");
else if (c == '2')
Serial.write("20");
else if (c == '3')
Serial.write("30");
else
Serial.write("Invalid");
}
}
И если я запускаю мой код без цикла While, я могу получить то, что я хочу:
Connection established!!!
Enter your command: 1
arduino: 10
Но когда добавить во время цикла, он пропускает просит вход, и мой выход становится:
Enter your command: 1
arduino: 10
Enter your command: arduino:
Enter your command: arduino:
Enter your command: arduino:
Enter your command: arduino:
...
После попытки некоторых решений, я думаю, это могут быть данные буфера [] и команда [], я не опорожнил его перед следующим прогоном. Но я попытался с
memset(data,0,4);
или
data[4]='\0';
Но она по-прежнему не работает, и пропустить задаёте. Любое предложение, как я могу его решить? Благодаря!
Спасибо! Оно работает!! – Vera
Еще одна проблема ... Когда я попытался подключить arduino, используя bluetooth, HC-05, он отлично работает на серийном мониторе Arduino, но если я использую визуальную студию для подключения (даже я выбрал правильный COM-порт), это не может дать корректный вывод, а также показывает ошибку: Исключенное исключение в 0x00CD7037 в Arduino2.exe: Код измерительной системы RangeChecks обнаружил доступ к диапазону вне диапазона. Любая идея, почему это происходит? Заранее благодарю вас ... – Vera
В предоставленном исходном коде есть 'char data [4] =" ";, а затем' n = port-> ReadData (данные, 4); 'и' data [n] = 0; 'означает, что в случае' n = 4', последние 'data [n] = 0;' находятся вне диапазона ... Поэтому попробуйте изменить размер строки данных ==> 'char data [5 ] = ""; ". –