Проблема с последовательной связью C++

Я пытаюсь создать консольную программу 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() не находит никакой информации в последовательном порту.

Кто-нибудь случайно не знает, почему?

P.S.: Полный код в консольной программе C++ можно найти здесь: .com/questions/27844956/c-console-program-serial-communication-arduino


person CodeBlocks    schedule 09.01.2015    source источник
comment
Количество возможных причин, по которым последовательная связь не работает, превышает место, доступное в ответе SO, чтобы перечислить их все.   -  person Martin James    schedule 09.01.2015
comment
IC. Не могли бы вы предложить, какой подход вы бы использовали для отладки ситуации? Возможно, вы бы проверили несколько вещей, которые могут быть вероятной проблемой?   -  person CodeBlocks    schedule 09.01.2015
comment
Начните с попытки прочитать данные с помощью HyperTerminal или аналогичной программы последовательного терминала. Используйте его, чтобы узнать, какими должны быть все настройки порта. Затем заставьте свою программу реплицировать эти настройки.   -  person ScottMcP-MVP    schedule 09.01.2015
comment
@ScottMcP-MVP Очень интересно, я проверю это. Вы случайно не видели ничего странного в моем коде консоли C++? Полная версия кода находится в ссылке, которую я разместил в P.S. сообщение этого вопроса.   -  person CodeBlocks    schedule 09.01.2015


Ответы (2)


Функция ReadFile последовательно возвращает значение «False», что означает, что она ничего не находит.

Нет, это не то, что это означает. Возвращаемое значение FALSE указывает на неудачу. Это никогда не бывает нормальным, вы должны реализовать код сообщения об ошибках, чтобы вы могли диагностировать причину. И завершите программу, так как нет причин продолжать ее выполнение. Если вы не настроили последовательный порт на преднамеренный сбой, установив тайм-аут чтения.

Используйте GetLastError() для получения базового кода ошибки Windows.

person Hans Passant    schedule 09.01.2015
comment
Ты прав! Я неправильно прочитал документ msdn на нем. Я сейчас проверю, смогу ли я увидеть, что происходит так, как вы предложили. - person CodeBlocks; 09.01.2015

Вы хотите использовать MS Windows, поэтому попробуйте перехватить вывод Arduino с помощью portmon. во-первых, вы можете отлаживать свой код C++.

person willll    schedule 09.01.2015