【问题标题】:Arduino wait for serial data from PythonArduino等待来自Python的串行数据
【发布时间】:2018-11-11 08:48:04
【问题描述】:

我是 Arduino 新手,我正在尝试制作一款游戏。我正在使用 Python 将串行数据发送到 Arduino。我想让 Arduino 等到它从 Python 接收到串行数据。

我的问题是:

  • 为什么 Arduino 程序不能处理来自 Python 的串行数据,而是处理来自串行监视器的数据?
  • 如何使程序处理来自 Python 的数据? (等到 Python 的串行数据,然后保存数据。)

Arduino 代码:

int select;
void setup() {
  Serial.begin(9600);
  Serial.flush();
  while(!Serial.available()){
  }
  if(Serial.available()>0){
    select=Serial.read();
  }
}
void loop() {
  Serial.println(select);
  delay(500);

}

Python 代码:

import serial
ser=serial.Serial('COM4',9600)
ser.write(b'1235')
ser.close()

解决了我没有得到串口数据的问题,但是又出现了一个新问题:

问题是,如果我得到串行数据,我的 Arduino 程序会跳回 while(!Serial.available()){} 循环,而不是转到 void loop(){}。

【问题讨论】:

    标签: python arduino


    【解决方案1】:

    与ser=serial.Serial('COM4',9600) 的新 USB 连接会重置 Arduino。连接后立即发送的数据因 Arduino 启动而丢失。

    【讨论】:

    • 现在我用 Arduino 获取串行数据,但是有一个问题,当我获取数据时,arduino 程序会跳回这个循环:while(!Serial.available()){},并且不要 void loop(){}。
    • 每次调用serial.Serial('COM4',9600) Arduino 都会重置
    【解决方案2】:

    就像 Juraj 说的那样,重置 Arduino 你应该添加代码以等待它恢复

    import serial
    ser=serial.Serial('COM4',9600)
    sleep(.5)
    if arduino.is_open == 1:
            print("open")
    ser.write(b'1235')
    ser.close()
    

    【讨论】:

    • 我还有一个问题,如果我得到串行数据,我的 Arduino 程序会跳回这个循环: while(!Serial.available()){} ,而不是 void loop() {}
    • 但现在我用 Arduino 接收串行数据!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多