Arduino가 직렬 통신을 통해 정수를 수신하도록합니다. 이걸로 나를 도울 수 있니?Arduino에서 정수로의 일련 메시지
int value = strtoint(Serial.read());
Arduino가 직렬 통신을 통해 정수를 수신하도록합니다. 이걸로 나를 도울 수 있니?Arduino에서 정수로의 일련 메시지
int value = strtoint(Serial.read());
크게가 전송 될 때 데이터 인코딩 방식에 따라 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);
}
바이트 intBuffer [12]를 변경해야했습니다. char to intBuffer [12]; 컴파일하기 위해 – fersarr
당신은 Serial.parseInt을 사용할 수 있습니다 : 그것은 직렬 연결은 데이터가 개행 문자 (\n
)에 의해 ASCII 텍스트로 전송되는 각각의 정수가 구분되어, 9600 보드로 구성되어 있다고 가정 함수는 여기를 참조하십시오 : http://arduino.cc/en/Reference/ParseInt
위의 방법의 이점이 무엇인지 잘 모르겠지만 완벽하게 해결되었습니다. –
정수는 고정 된 수입니까? 아니면 숫자가 아닌 숫자로 끝나야합니까? – walrii
음 ...'Serial.read()'는 이미'int'를 리턴합니다 ... – angelatlarge
@angelatlarge'Serial.read()'는'int'를 리턴하지만 호출하는 코드가 성공적인 읽기 및 오류. 올바른 사용법은 '-1'을 반환하지 않는 것을 확인한 후 (오류를 나타내는) 반환 값을 '바이트'로 취급합니다. –