2017-11-02 3 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) + ">"); 

아두 이노 코드 : 마지막 확인란이 선택되어

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

내가 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도 사용하고 있습니다. 그것을 String으로 처리하십시오. 왜 정수로 필요합니까?

는 Btw는 예제 비트 연산에 대한 열거 형을 사용하는 방법에 대한 것은 이쪽을 봐 : http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/

+0

작동 = 내가 오류를 넣어 아두 이노 코드 UINT (64)와 경우를 사용하려고했습니다 당신은 그것 아무튼 맞아 어떤 감각이든 그것을 uint32로 변환하지만, 이것은 내 문제를 해결하지 못한다. 여전히 같은 결과를 얻고있다. –

+0

그래, 정확히 무엇이 잘못 되었는가? arduino에서 메시지를 어떻게 파싱합니까? 어쩌면 당신이 질문에 그것을 업데이트 할 수 :) – Momo

관련 문제