麻烦与Pyserial和Arduino沟通

时间:2018-03-11 16:42:53

标签: python arduino raspberry-pi pyserial

Arduino代码:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  String inComing;
  pinMode(LED_BUILTIN, OUTPUT);
  while(1)
  {
    if (Serial.available())
    {
      inComing = Serial.readString();
      delay(500);
      digitalWrite(LED_BUILTIN, HIGH);
      delay(100);
      if (inComing == "GO")
      {
        Serial.println("GO");
        break;
      }
    }
  }
}

的Python:

import serial
import time

duino = serial.Serial('/dev/ttyACM0', 9600, timeout=None)


def sync():
    mark = "GO"
    duino.write(mark.encode('utf-8'))
    time.sleep(1)
    while (duino.inWaiting() == 0):  # Code Getting Stuck here!!
##        if (duino.inWaiting() > 0): Redundant
##            break
        pass

    inComing = duino.readline().decode().strip('\r\n')
    print(inComing)   ## Debug
    if (inComing == mark):
        return 1
    else:
        print("Not Yet")
        return 0


if __name__ == "__main__" :

    chk = 0
    while (not(chk)):
        print("syncing")  # Debug
        chk = sync()

    print("sync complete")

我希望arduino在进入loop()之前在设置()中等待来自Pi的命令。 Pi也应该收到Arduino的回复,然后开始记录收到的数据。出于某种原因,当我在Pi端调用inWaiting()时,我的程序挂起。当我运行调试器并逐步执行它时,一切都执行得很好。当我运行代码时,它会卡住。 arduino端也可以通过串行监视器完美地工作。 不知何故,pySerial错过了传入的数据。我也试过从arduino每100mS发送一个响应,但它似乎仍然无法通过。 什么可能导致inWaiting()错过缓冲区中的数据?

0 个答案:

没有答案