Python和Arduino串行通信

时间:2013-08-10 17:19:22

标签: python serial-port arduino pyserial

我正在使用Python 3.2尝试通过串口与Arduino进行通信。从文档中,我强调Arduino Serial.Read()读取单个字节。但是,当我尝试实现它时,Serial.Read()读取我发送的所有数字。这是我的Python和Arduino的代码

例如,我有一个值412发送给Arduino。

的Python:

xCoordint = 412
xCoordConverted = "%03d" % (xCoordint)
xCoord = [int(i) for i in str(xCoordConverted)]
xSingleDigit0 = chr(int(xCoord[0] + 48))
xSingleDigit1 = chr(int(xCoord[1] + 48))
xSingleDigit2 = chr(int(xCoord[2] + 48))
ser.write (bytes(xSingleDigit0, 'UTF-8'))
ser.write (bytes(xSingleDigit1, 'UTF-8'))
ser.write (bytes(xSingleDigit2, 'UTF-8'))

Arduino的:

char joinCharX[3] ;
int n_avail = Serial.available();
  if(n_avail>0){ 
    for (int i=0;i<3; i++){
      joinCharX[i] = Serial.read();
    }
int xCoords = atoi(joinCharX);
Serial.print(joinCharX[0]);

返回的joinCharX [0]是412而不是4.我想知道为什么会这样,我怎样才能让它一次读取1个字节?

1 个答案:

答案 0 :(得分:0)

尝试:

char joinCharX[3] ;
int n_avail = Serial.available();
  if(n_avail>0){ 
    for (int i=0;i<3; i++){
      joinCharX[i] = Serial.read(1);  # Note the parameter
    }
int xCoords = atoi(joinCharX);
Serial.print(joinCharX[0]);

这应该让它一次读取一个字符。

校正:

你不能像上面那样限制no chars但你的问题是你的print语句将第一个char作为字符串的开头:如果你想看到你需要使用的第一个char:

char forprint;
:
:
forprint = joinCharX[0];
Serial.print (forprint);