使用PySerial与Arduino Uno的定时问题
这是一幅大图: 我试图通过记录一组位置然后回放来控制步进电机。为了控制步进器,我使用AccelStepper 由于移动数据很大,我需要将其存储在Mac上,并使用串行连接将其发送到Arduino 此外,由于AccelStepper的工作方式,我无法承受延迟 问题是: 当我插入大约60毫秒或更长的延迟时,下面的代码可以工作。但是,这会使加速步进器出错 我的理解是,第一个while循环“监听”串行线。如果没有可读取的内容,我会向Mac发送一个“A”请求一些数据。当有数据可读取时,此循环中断 第二个循环读取串行行,直到遇到换行符。此代码具有延迟功能,并且不具有延迟功能 这有意义吗? 多谢各位 ================================使用PySerial与Arduino Uno的定时问题,arduino,pyserial,Arduino,Pyserial,这是一幅大图: 我试图通过记录一组位置然后回放来控制步进电机。为了控制步进器,我使用AccelStepper 由于移动数据很大,我需要将其存储在Mac上,并使用串行连接将其发送到Arduino 此外,由于AccelStepper的工作方式,我无法承受延迟 问题是: 当我插入大约60毫秒或更长的延迟时,下面的代码可以工作。但是,这会使加速步进器出错 我的理解是,第一个while循环“监听”串行线。如果没有可读取的内容,我会向Mac发送一个“A”请求一些数据。当有数据可读取时,此循环中断 第二个循环
if (stepper.distanceToGo() == 0)
{
while (Serial.available() <= 0) { // Ask Mac for more data.
Serial.print("A");
delay(60); // Argh line!
stepper.runSpeedToPosition();
}
while(Serial.available() > 0) { // There's info on the serial line
character = Serial.read();
content.concat(character);
if (character == '\n') break; // Keep reading until newline
stepper.runSpeedToPosition();
}
if(stepper.distanceToGo()==0)
{
while(Serial.available()0){//序列行上有信息
character=Serial.read();
内容:concat(字符);
if(character=='\n')break;//继续读取,直到换行
stepper.runSpeedToPosition();
}
没有延迟,while循环将占用“所有”系统(CPU)资源,实际上延迟了串行线路的中断。不过60是非常具体的值
因此,一个选项是重写循环并测试这是否有帮助:
if (stepper.distanceToGo() == 0) {
while (true) {
if(Serial.available() <= 0) { // Ask Mac for more data.
Serial.print("A");
stepper.runSpeedToPosition();
} else {
// the case for (Serial.available() > 0) There's info on the serial line
character = Serial.read();
content.concat(character);
if (character == '\n') break; // Keep reading until newline
stepper.runSpeedToPosition();
}
}
}
if(stepper.distanceToGo()==0){
虽然(正确){
如果(Serial.available()0)在串行线上有信息
character=Serial.read();
内容:concat(字符);
if(character=='\n')break;//继续读取,直到换行
stepper.runSpeedToPosition();
}
}
}
感谢您考虑这一点。不幸的是,在Serial.print(“A”)之后,我仍然需要延迟;让它始终如一地工作。