是什么导致 C 程序不能在 Arduino 中正确地递增变量?

What causes a C program not to increment variable correctly in Arduino?

我正在尝试在 Raspberry PI 和 Ardunio 之间建立连接,其中 Python 在 PI 上是 运行。目标是验证 Arduino 是否已连接并发送正确的值,连接似乎已建立,因为我在 Python 终端上收到,但 a 值未正确显示,它正在递增2、有时超过两个。 这可能是连接延迟问题吗?串行(USB)问题?

serial_text.ino(运行 在 Arduino 上):

char dataString[50] = {0};
int a =0; 

void setup() {
Serial.begin(9600);              //Starting serial communication
}

void loop() {
 // a++;                          // a value increase every loop
  //sprintf(dataString,"%02X",a); // convert a value to hexa 
  Serial.println(++a);   // send the data
  delay(1000);                  // give the loop some break
}

Serial_test.py(圆周率运行):

import serial

ser = serial.Serial('/dev/ttyACM0',9600)
s = [0,1]
while True:
    read_serial=ser.readline()
    s[0] = str(int (ser.readline(),16))
    print "a value from controller = ", s[0]
    //print read_serial

OUTPUT(在 PI 屏幕上):

更新: 我做了一些更改,但仍然是同样的问题,更改如下:

serial_text.ino(运行 在 Arduino 上):

int a =0; 

void setup() {
Serial.begin(9600);              //Starting serial communication
}

void loop() {

  a++;
  Serial.println(a);   // send the data
  delay(1000);                  // give the loop some break
}

对于Python,我只改了这一行:

s[0] = str(int (ser.readline(),16))

收件人:

s[0] = str(int (ser.readline(),10))

为了以防万一,我也删除了 //print read_serial

输出:

好的,基本上这里发生了什么:当你做这样的事情时:

Serial.println(a);

它以 ASCII 编码的十进制形式发送数字,所以基本上,如果您发送整数值 12,它将发送字符串“12”。递增部分在这里工作得很好。

为什么会跳字?如果您仔细查看您的代码,您会发现,在 while 循环的每次迭代中,都会调用两次 ser.readline() 这使得每隔一个数字就会跳过一次。

较大差距的原因是您收到十进制字符串并将其视为十六进制字符串。看看这里发生了什么:

>>> int("49", 16)
73
>>> int("51", 16)
81

在十进制中它只是相差二,但在十六进制中它相差八 - 这解释了更大的差距。