2013-10-26 4 views
0

У меня есть вопрос с разъяснением относительно приема данных через последовательный порт от Arduino. В частности, я использую Sparkfun Pro Micro 5v/16MHz и пытаюсь написать простой графический интерфейс на C++ для отправки сообщений через последовательный порт, а затем получить один из нескольких ответов, которые указаны в коде, запущенном на плате Arduino.Последовательная связь в C++ (Visual Studio 2010, .NET 4.5)

Я знаю, что связь и код, работающие на Arduino, работают, потому что я попытался использовать инструмент Serial Monitoring в среде Arduino и могу отправлять и получать соответствующие ответы.

При отправке сообщений через графический интерфейс C++, который я создал, я вижу, что светодиодный индикатор трафика мигает при отправке сообщения, заставляя меня поверить, что отправка через C++ GUI работает, но ничего не касается приема сообщений.

Некоторые из моего кода:

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 или аппаратным обеспечением, поэтому я не совсем уверен, что мои варианты для отладки.

Если у кого-то есть какие-либо отладочные предложения или идеи, что я делаю неправильно, я был бы очень признателен. Кроме того, если я не предоставил никакой информации, дайте мне знать, что нужно, и я ее отредактирую!

Спасибо, -К

+1

Я предполагаю, что у вас установлено аппаратное управление потоком, но подключены только линии TX/RX. Попробуйте отключить аппаратное управление потоком, когда вы настроите свой последовательный порт. – rm5248

+0

@ rm5248 Спасибо за предложение! Как мне это сделать? Я подключен через USB-порт, и я не вижу эту опцию в объекте Serial Port в VS. –

+0

Я не знаю, как это сделать в C++ /. NET, но попробуйте это: http://msdn.microsoft.com/en-us/library/system.io.ports.handshake.aspx – rm5248

ответ

0

Наконец понял это после того, как найти неясный комментарий говорить о настройках.

Оказалось, что мне нужно, чтобы свойство DTREnabled для Serial Port было установлено как True, а не false, чтобы обработчик DataReceived срабатывал. Этот параметр никогда не устанавливался ни в одной из документации MSDN, касающейся связи через последовательный порт. Если вы читаете это и имеете аналогичную проблему, убедитесь, что DTREnabled, RTSEnabled оба установлены в true и, возможно, даже настроили Handshaking на RequestToSend. Возможно, одним или всеми из них будет то, что в конечном итоге его исправление.

В моем случае только DTREnabled должен быть правдой. Я не совсем понимаю, что делают эти настройки, но там у вас есть.

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