Я пытаюсь создать консольную C ++-программу, которая сможет обмениваться данными через последовательный порт с моим микроконтроллером Arduino, однако у меня возникла проблема с функцией ReadFile ():
Это код функции ReadFile () из моей консольной программы C ++:
if(ReadFile(myPortHandle, &szBuf, 1, &dwIncommingReadSize, NULL) != 0)
{
cout<<"FOUND IT!"<<endl;
Sleep(100);
}
else
{
cout<<".";
Sleep(100);
}
Функция ReadFile последовательно возвращает значение «False», означающее, что она ничего не находит в последовательном порту. На другой стороне последовательного порта у меня подключен Arduino со следующим кодом:
int switchPin = 4; // Switch connected to pin 4
void setup() {
pinMode(switchPin, INPUT); // Set pin 0 as an input
Serial.begin(9600); // Start serial communication at 9600 bps
}
void loop() {
if (digitalRead(switchPin) == HIGH) { // If switch is ON,
Serial.write(1); // send 1 to Processing
} else { // If the switch is not ON,
Serial.write(0); // send 0 to Processing
}
delay(100); // Wait 100 milliseconds
}
И каждый раз, когда я нажимаю кнопку, я посылаю значение «1» на последовательный порт и «0» каждый раз, когда я не нажимаю кнопку. По сути, я получил код Arduino из учебного пособия, которое я наблюдал за тем, как осуществлять последовательную связь с программой Processing (которая работала идеально), хотя я не могу сделать то же самое с простым консольным приложением, которое я сделал с C ++, потому что по какой-то причине Функция ReadFile () не находит никакой информации в последовательном порту.
Кто-нибудь случайно знает почему?
П.С .: Полный код в C ++ Console Program можно найти здесь:
https://stackoverflow.com/questions/27844956/c-console-program-serial-communication-arduino
Функция ReadFile последовательно возвращает значение «False», то есть ничего не находит
Нет это не что это означает. Возвращаемое значение FALSE указывает, что оно не удалось. Это никогда не бывает нормальным, вы должны внедрить код сообщения об ошибках, чтобы вы могли диагностировать причину. И завершите программу, так как нет особых причин продолжать работу. Если вы не настроите последовательный порт на преднамеренный сбой, установив таймаут чтения.
Используйте GetLastError () для получения кода ошибки Windows.
Вы собираетесь использовать MS Windows, поэтому попробуйте перехватить вывод arduino, используя Portmon Сначала вы можете отладить ваш код на C ++.