2013-05-26 2 views
1

그래서 C# 프로그램을 통해 int를 arduino로 보내려고합니다. 나는 C# 프로그램과 arduino가 서로에게 잘 이야기하고있다. 하나의 ASCII 바이트를 보내면 arduino가 반응합니다. 그러나 더 큰 값, 즉 35를 보내려고 할 때 arduino가 직렬 포트에서 정보를 가져 와서 int로 변환하는 방법을 알아낼 수 있기 때문에 나중에이 값을 일부 수학 함수에 사용할 수 있습니다. 모든 팁/코드? 고마워요! :)C#을 통해 arduino로 int를 보냄

답변

0

원하는 프로토콜에 따라 약간 다릅니다. 압축 된 데이터 형식을 원하십니까? 아니면 사람이 읽고 쓸 수있는 형식을 원하십니까?

간결한 데이터 구조를 찾으려면 의 개념을 살펴 봐야합니다. 읽기 쉬운 형식과 손으로 쓰기 쉬운 형식을 선호한다면 프로토콜 자체를 구현해야 할 것입니다. 처음부터 나중에 제안 할 것입니다.

문자열로 char 스트림을 채우고 그 문자열을 atoi 함수에 공급할 수있는 것으로 시작하십시오.

죄송합니다. 미리 조리 된 해결책은 아닙니다.

1

여기에 의사 코드의 종류가 있습니다. 마이크로에 대한 통신이 좋다는 것을 말하고 있기 때문입니다. 아두 이노에 :

char buffer[5]; // or 6 or 7 or... To store numerical chars 

당신은 아두 이노이 숫자 라인을 내려오고있다 알려 방법이 필요합니다. 전화 번호가이 같은 "패킷"에 포장되어 가정 :

[I123] 

괄호 시작하고 패킷의 끝을 나타냅니다의 I는 정수 데이터 페이로드 나타냅니다. 따라서 Serial.Read() 함수에서 패킷 시작 ([)을 테스트 한 다음 정수 (I)를 나타내는 다음 문자를 테스트해야합니다. 남은 문자는 버퍼에 저장되지만 포함되지는 않습니다 (]). 그런 다음 value = atoi (버퍼)로 값을 가져옵니다.

/* 
Simple code to read in an integer value sent over the Serial port. 
*/ 

char ch;   // incoming serial character 

char chStartPacket = '['; 
char chEndpacket =']'; 
char integerDataType = 'I'; 
char buf[10]; 
int index = 0; 
int intValue = 0; 

void setup() 
{ 
    // start serial port at 9600 bps: 
    Serial.begin(9600); 

} 

void loop() 
{ 
    // assume packet of format [Xddd], where X is packet data type, ddd is data payload 
    // this is code which compiles, but not tested. Neither is any check done on the payload data 
    // to ensure good data 

    if(Serial.available() > 0){ 

    if(Serial.peek() == chStartPacket){ 
     index = 0;        // reset index of next integer in buffer 
     Serial.read();       // get rid of start of packet in serial port buffer 
    } 
    else if (Serial.peek() == integerDataType){ 
     Serial.read();       // get rid of data type character in serial port buffer 
    } 
    else if (Serial.peek() == chEndpacket){ // all data received, get integer value 
     Serial.read();       // get rid of end of packet in serial port buffer 
     intValue = atoi(buf); 
     Serial.println(intValue);    // for visual feedback 
    } 
    else{          //must be payload data, add to buffer 
     buf[index] = Serial.read(); 
     index++; 
     buf[index] = '\0'; 
    } 

    } 
} 
+0

다른 점은 C#, c가 좋은 점입니다. 아니, 롤. 당신의 대답으로 조금 더 많은 코드를주는 마음 :) 나는 내가 정말로 필요한 패킷을 테스트 할 수 없다. 당신은 if 진술처럼 이야기하고 있습니까? . .? –

+1

당신이 들어오는 데이터를 읽을 arduino에 가지고있는 코드를 보여줍니다, 우리는 그걸 확장 할 수 있습니다 ... – user2019047

+0

난 그냥 들어오는 데이터를 읽고 그 문장을 사용하여 바이트를 테스트 Serial.Read()를 사용하여 그것이 일치한다면 - 97 (a) - 나는 주도를 켭니다. 특별한 것은 없지만 단지 그 일을 알게 해줍니다. 실제 코드는 현재 내 친구 노트북에 있습니다./ –

0

나는이 질문에 here 이미 대답했다. "atoi"를 사용할 수 있습니다. C#의 코드는 매우 간단합니다. 내 대답/링크에서 Arduino에 대한 코드를 찾으십시오. 기본적으로 이것은 프로토콜로 작동합니다.