串行消息上的Arduino

问题描述:

整我希望我的Arduino通过串行通信接收一个整数。你能帮助我吗?串行消息上的Arduino

它应该是类似以下形式:

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

是整型字符固定数量还是会由一个非数字被终止? – walrii 2013-04-21 07:29:00

+0

嗯...'Serial.read()'已经返回'int' ... – angelatlarge 2013-04-21 07:54:35

+0

@angelatlarge'Serial.read()'不会返回'int'但只有这样调用代码可以成功读取区分和一个错误。在检查它没有返回“-1”(表示错误)后,正确的用法将返回值视为一个“byte”。 – 2013-04-22 11:29:46

有几种方法可以从Serial读一个整数,在很大程度上取决于如何发送时的数据进行编码。 Serial.read()只能用于读取单个字节,从而需要被发送的数据能够从这些字节重建。

下面的代码可能会为你工作。它假定串行连接已被配置为9600波特,该数据被发送作为ASCII文本,并且每个整数分隔换行符(\n):

// 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 charBuffer [12];它编译 – fersarr 2014-04-27 19:44:40

您可以使用Serial.parseInt()功能,在这里看到:http://arduino.cc/en/Reference/ParseInt

+0

不知道什么上述方法的好处是,但这完全为我工作。 – 2016-01-26 19:22:20