2013-04-20 1 views
3

Arduino가 직렬 통신을 통해 정수를 수신하도록합니다. 이걸로 나를 도울 수 있니?Arduino에서 정수로의 일련 메시지

int value = strtoint(Serial.read()); 
+0

정수는 고정 된 수입니까? 아니면 숫자가 아닌 숫자로 끝나야합니까? – walrii

+0

음 ...'Serial.read()'는 이미'int'를 리턴합니다 ... – angelatlarge

+0

@angelatlarge'Serial.read()'는'int'를 리턴하지만 호출하는 코드가 성공적인 읽기 및 오류. 올바른 사용법은 '-1'을 반환하지 않는 것을 확인한 후 (오류를 나타내는) 반환 값을 '바이트'로 취급합니다. –

답변

5

크게가 전송 될 때 데이터 인코딩 방식에 따라 Serial의 정수를 읽을 수있는 몇 가지 방법이 있습니다 :

그것은 같은 형식이어야합니다. Serial.read()은 개별 바이트를 읽는 데만 사용할 수 있으므로 전송되는 데이터는이 바이트에서 재구성되어야합니다.

다음 코드는 유용 할 수 있습니다.) (

// 12 is the maximum length of a decimal representation of a 32-bit integer, 
// including space for a leading minus sign and terminating null byte 
byte intBuffer[12]; 
String intData = ""; 
int delimiter = (int) '\n'; 

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
    while (Serial.available()) { 
     int ch = Serial.read(); 
     if (ch == -1) { 
      // Handle error 
     } 
     else if (ch == delimiter) { 
      break; 
     } 
     else { 
      intData += (char) ch; 
     } 
    } 

    // Copy read data into a char array for use by atoi 
    // Include room for the null terminator 
    int intLength = intData.length() + 1; 
    intData.toCharArray(intBuffer, intLength); 

    // Reinitialize intData for use next time around the loop 
    intData = ""; 

    // Convert ASCII-encoded integer to an int 
    int i = atoi(intBuffer); 
} 
+1

바이트 intBuffer [12]를 변경해야했습니다. char to intBuffer [12]; 컴파일하기 위해 – fersarr

5

당신은 Serial.parseInt을 사용할 수 있습니다 : 그것은 직렬 연결은 데이터가 개행 문자 (\n)에 의해 ASCII 텍스트로 전송되는 각각의 정수가 구분되어, 9600 보드로 구성되어 있다고 가정 함수는 여기를 참조하십시오 : http://arduino.cc/en/Reference/ParseInt

+0

위의 방법의 이점이 무엇인지 잘 모르겠지만 완벽하게 해결되었습니다. –

관련 문제