python – 是什么导致C程序不能在Arduino中正确增加变量?

我正在尝试在Raspberry PI和Ardunio之间建立连接,其中
Python在PI上运行.目标是验证Arduino是否已连接并发送正确的值,连接似乎已建立,因为我在Python终端上接收,但是a值未正确,它增加2,有时超过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(在PI上运行):

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

输出(在PI屏幕上):

《python – 是什么导致C程序不能在Arduino中正确增加变量?》

更新:
我做了一些改变,但它仍然是同样的问题,这里是变化:

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))

我还删除了//打印read_serial以防万一.

OUTPUT:

《python – 是什么导致C程序不能在Arduino中正确增加变量?》

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

Serial.println(a);

它将数字作为ASCII编码的十进制发送,因此基本上如果发送整数值12,它将发送字符串“12”.递增部分在这里工作得很好.

为什么跳绳发生?如果仔细观察你的代码,你可以看到,在while循环的每次迭代中都有两次调用ser.readline(),这使得跳过每一个数字都会发生.

间隙较大的原因是您收到一个十进制字符串并将其视为十六进制字符串.看看这里发生了什么:

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

在十进制中它只是两个的差异,但在十六进制中它是八的差异 – 这解释了更大的差距.

点赞