2017-11-02 19 views
0

私はArduinoと通信しなければならないC#プログラムを書いています。基本的にはそれにデータを送信し、私はシリアルモニタで読むことができるはずです。Arduinoシリアル通信が奇妙に動作する

C#コード:

if (errCheck[i].IsChecked.GetValueOrDefault() == true) 
    err = "1"+err; 
else 
    err = "0"+err; 
_serialPort.Write("<16,"+ Convert.ToUInt32(err,2) + ">"); 

Arduinoのコード:最後のチェックボックスがチェックされている

void parseData() {  // split the data into its parts 

    char * strtokIndx; // this is used by strtok() as an index 

    //strtokIndx = strtok(tempChars,",");  // get the first part - the string 
    //strcpy(messageFromPC, strtokIndx); // copy it to messageFromPC 

    strtokIndx = strtok(tempChars, ","); // this continues where the previous call left off 
    integerFromPC = atoi(strtokIndx);  // convert this part to an integer 


    switch (integerFromPC) { 
     //all cases   
     case 16: //managing errors 
      delay(10); 
      strtokIndx = strtok(NULL, ","); 
      uint32_tFromPC = atoi(strtokIndx);  
      errors=uint32_tFromPC; 
      Serial.print("errors Updated"); 

は(ので、私のバイナリ文字列は、1と31 0の場合)シリアルモニタが7F FF FF FF代わりの80 00 00 00読み込みます。
私はulongを使用しようとしましたが、どちらのアイデアでも動作していないようです。

+0

私はUINT 64を使用して試してみたとArduinoのコードで、私はエラーを置けば= 1and31 0のそれは –

答えて

0

なぜStringをint32に変換してからStringに戻したいのですか? 単純に次の操作を行います。

if (errCheck[i].IsChecked.GetValueOrDefault() == true) 
    err = "1"+err; 
else 
    err = "0"+err; 
_serialPort.Write("<16,"+ err + ">"); 

さえUint32のは、32桁の数字を取ることができません!

arduinoコードではatoiも使用しています。それを文字列として扱います。なぜそれは整数として必要なのですか?

ここを見て例のためのビット演算のための列挙型を使用する方法についてところで事: http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/

+0

あなたは正しい、それはdoesnの作品uint32に変換しても何の意味もありませんが、これは私の問題を解決しません。私はまだ同じ結果を得ています –

+0

何が間違っているのですか? arduinoであなたのメッセージをどのように解析しますか?多分あなたはあなたの質問にそれを更新することができます:) – Momo

関連する問題