Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PySerial与Arduino Uno的定时问题_Arduino_Pyserial - Fatal编程技术网

使用PySerial与Arduino Uno的定时问题

使用PySerial与Arduino Uno的定时问题,arduino,pyserial,Arduino,Pyserial,这是一幅大图: 我试图通过记录一组位置然后回放来控制步进电机。为了控制步进器,我使用AccelStepper 由于移动数据很大,我需要将其存储在Mac上,并使用串行连接将其发送到Arduino 此外,由于AccelStepper的工作方式,我无法承受延迟 问题是: 当我插入大约60毫秒或更长的延迟时,下面的代码可以工作。但是,这会使加速步进器出错 我的理解是,第一个while循环“监听”串行线。如果没有可读取的内容,我会向Mac发送一个“A”请求一些数据。当有数据可读取时,此循环中断 第二个循环

这是一幅大图:

我试图通过记录一组位置然后回放来控制步进电机。为了控制步进器,我使用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”)之后,我仍然需要延迟;让它始终如一地工作。