У меня есть вопрос уточнения относительно получения данных через последовательный порт от Arduino. В частности, я использую Sparkfun Pro Micro 5v/16MHz и пытаюсь написать простой графический интерфейс в C++ для отправки сообщений через последовательный порт, а затем получить один из нескольких ответов, которые указаны в коде, запущенном на плате Arduino,
Я знаю, что связь и код, работающие на Arduino, работают, потому что я попытался использовать инструмент Serial Monitoring в среде Arduino и могу отправлять и получать соответствующие ответы.
При отправке сообщений через графический интерфейс C++, который я создал, я вижу, что светодиод трафика мигает при отправке сообщения, заставляя меня поверить, что отправка через C++ графический интерфейс работает, но ничего не касается приема сообщений.
Некоторые из моего кода:
private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)
{
String^ testStr = serialPort1->ReadExisting();
log_textBox->Text += testStr + "\n";
}
Это очень простой обработчик событий, который присваивается событию DataReceived
моего объекта SerialPort
который является частью моей формы. Я установил контрольную точку внутри нее, и она никогда не срабатывает. Я немного растерялся, я сделал несуществующий объем работы с Arduino или аппаратным обеспечением, поэтому я не совсем уверен, что мои варианты для отладки.
Если у кого-то есть какие-то отладочные предложения или идеи, что я делаю неправильно, я бы очень признателен. Кроме того, если я не предоставил никакой информации, дайте мне знать, что нужно, и я ее отредактирую!
Спасибо, -K
Наконец понял это после поиска неясного комментария, говорящего о настройках.
Оказывается, мне нужно, чтобы свойство DTREnabled для Serial Port устанавливалось как True, а не false, чтобы обработчик DataReceived запускался. Этот параметр никогда не устанавливался ни в одной из документации MSDN, касающейся связи через последовательный порт. Если вы читаете это и имеете аналогичную проблему, убедитесь, что DTREnabled, RTSEnabled оба установлены в true и, возможно, даже настроили Handshaking на RequestToSend. Возможно, одним или всеми из них будет то, что в конечном итоге его исправление.
В моем случае только DTREnabled должен быть правдой. Я не совсем понимаю, что делают эти настройки, но там у вас есть.