sending integers over serial in arduino
我正在尝试在ardunio IDE中使用串行监视器通过串行发送整数(然后在使用串行监视器调试后从树莓派中获取python的python),并且可以使单个数字与下面的代码一起使用,但是使用10或100,它将自动将下一个变量填充为0。我尝试使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | int varX = 0; int varY = 0; int varZ = 0; int varCounter = 0; void setup() { Serial.begin(115200); grabNewVars(); } void grabNewVars() { while (varCounter < 3) { if (Serial.available() > 0) { if (varCounter ==0) { varX = Serial.parseInt(); } if (varCounter ==1) { varY = Serial.parseInt(); } if (varCounter ==2) { varZ = Serial.parseInt(); } varCounter++; } } } void loop() { Serial.println("varX =" + String(varX)); Serial.println("varY =" + String(varY)); Serial.println("varZ =" + String(varZ)); Serial.println("variables received, run main loop"); delay(100000); } |
让我们考虑一下您的函数在做什么。
Serial.available()返回接收缓冲区中可用的字节数。
Serial.parseInt()读取任何数字,直到接收到非数字字符,或者如果在1秒内未接收到数字,则超时(默认)。在这种情况下,它返回0。
因此在while循环中,您通过检查
等到接收缓冲区中有东西
您输入100(无行结尾)。现在接收缓冲区中有东西并且varCounter为0,执行
parseInt将在1秒后超时,并返回在1秒钟内已收到的100。
100存储在varX中,并且varCounter递增1。
现在执行
由于您很可能在一秒钟之内没有输入其他数字,这将超时,并且您将0存储在varY中。
使用非数字字符终止您的电话号码。例如,通过选择以串行监视器结尾的行或通过从Python代码发送换行符或回车符来实现。或任何其他单个非数字字符。这样,Arduino知道已收到完整的Integer,并且不必等到超时就可以。
如果您希望代码永远等待下一次输入,请在下一次调用