2017-02-06 82 views
0

まずは、私はドイツの学生ですので、私の悪い英語をお許しください。 現時点では、xbeeモジュールによるシリアル通信によってarduinoボード上のサーボモータを制御することを目標とするプロジェクトに取り組んでいます。 今私はSerialPortを勉強していますが、write()を使って問題があります。シリアル通信C++ SerialPort-Class

私の計画は、シリアルポートを介してコンマで区切られた整数値を送信することです。 Visual Studioエラーを報告し、適切な引数型がないことを示します。 私はこの問題をどのように処理するのか分かりません。なぜなら、私はこの全体のプログラミングのトピックに全く新しいものですからです。

#include <iostream> 
using namespace std; 
#using <System.dll>; 

using namespace System; 
using namespace System::IO::Ports; 
using namespace System::Threading; 

int main() { 
    unsigned char values[2] = { 50, 120 }; 
    SerialPort^ mySerialPort = gcnew SerialPort("COM3"); 
     mySerialPort->BaudRate = 9600; 
     mySerialPort->Open(); 
while (true) { 

      mySerialPort->Write(values); 

    } 
} 
+0

は、私はあなたがC#ではなく、マネージドC++(別名C++/CLI別名C++/CX)に切り替える提案、およびC#が新規参入者へのより寛容です。私が見ている最初のエラーは、あなたがループを通してあなたのポートを開いているが、それを閉じたり、ループ内の何かを待ったりしていないということです。 – metal

+0

アンマネージ配列[]を 'array ^'を必要とする.NETメソッドに渡しています。 "整数値をコンマで区切って"欲しい場合は、バイト配列ではなく文字列を記述する必要があります。 –

+0

@HansPassant、ご協力いただきありがとうございます。 配列の代わりに文字列を使用する場合は、 mySerialPort-> Write( "String")と書く必要があります。右? したがって、明示的な値があります。文字列を使用して、ループの繰り返しごとに値を含む ""などを送信するにはどうすればよいですか? ありがとう! – ElseTU

答えて

0

あなたは、このようにそれを修正することができます。

#include <iostream> 
using namespace std; 
#using <System.dll> 

using namespace System; 
using namespace System::IO::Ports; 
using namespace System::Threading; 

int main() { 
    // Managed array 
    cli::array<unsigned char> ^values = { 50, 120 }; 
    SerialPort^ mySerialPort = gcnew SerialPort("COM3"); 
    mySerialPort->BaudRate = 9600; 
    mySerialPort->Open(); 
    while (true) { 

    // some work with values goes here... 

    // We should specify buffer offset and length 
    mySerialPort->Write(values, 0, values->Length); 
    } 
} 

あなたが気づいたとして、あなたはまた、文字列として、このデータを送信することができます

mySerialPort->WriteLine(String::Format("val1 = {0}; val2 = {1}", values[0], values[1])); 

しかしmySerialPort->Write()を送ることを警告しますバイト、mySerialPort->WriteLine()は各文字を1バイトとして送信します。例えば :

cli::array<unsigned char> ^buffer = {123}; 

// Send one single byte 0x7b 
mySerialPort->Write(buffer, 0, buffer->Length); 

// Send 3 bytes (0x49, 0x50, 0x51) 
mySerialPort->WriteLine(String::Format("{0}", buffer[0]));