2013-05-09 61 views
1

我有一些Arduino代码,移动电机,我想与一个Python脚本同步使用序列控制它。同步Arduino和Python

这是Arduino的代码:

#define BUFFER_SIZE 100 

#define P1_STEP_PIN   31 
#define P1_DIR_PIN   33 
#define P1_ENABLE_PIN  29 

#define V1_STEP_PIN   25 
#define V1_DIR_PIN   27 
#define V1_ENABLE_PIN  23 

char buffer[BUFFER_SIZE]; 

int pins[1][2][2] = { 
    { {P1_STEP_PIN, P1_DIR_PIN}, {V1_STEP_PIN, V1_DIR_PIN} } 
}; 

void setup() 
{ 
    Serial.begin(115200); 
    Serial.flush(); 

    // pins setup 
} 

void loop() 
{ 
    get_command(); 
} 


void get_command() 
{ 
    if (Serial.available() > 0) { 

    int index = 0; 
    delay(100); // let the buffer fill up 
    int numChar = Serial.available(); 

    if (numChar > (BUFFER_SIZE - 3)) { //avoid overflow 
     numChar = (BUFFER_SIZE - 3); 
    } 

    while (numChar--) { 
     buffer[index++] = Serial.read(); 
    } 

    process_command(buffer); 
    } 
} 

void process_command(char* data) 
{ 
    char* parameter; 
    parameter = strtok (data, " "); // strtok splits char* in " " 

    while (parameter != NULL) { 
    long dir, pump, motor, sp, steps; 

    switch (parameter[0]) { 
     // moves the motor around 
    } 

    parameter = strtok(NULL, " "); 
    } 

    for (int x=0; x < BUFFER_SIZE; x++) { 
    buffer[x] = '\0'; 
    } 
    Serial.flush(); 
    Serial.write("ok"); 
} 

Python的部分就是我有问题。当我从Python发送命令来移动电机时,Arduino代码很好地工作,但是当我连续发送几个命令时,它会失败,因为我怀疑Python会同时发送所有内容,而不是等待Arduino完成每个动作。

所以基本上在Python中,我尝试了一些东西,主要是像ser.readline()或ser.read(2)这样的东西,并检查命令是否“OK”。

奇怪的是,每个命令都应该有一个“ok”,但是并不是所有的命令都到达Python。我试图“冲洗”它,但它是一样的。

我创建了一个线程,不断地从串口监听,并检查命令是否“OK”,但它不是,也许如果我发送4个命令,我收到2“OK”,有时为0,有时为1.

回答

0

而不是简单地一次读取多达97个字节(BUFFER_SIZE - 3),请尝试发送Python代码中的'结束命令'字符(或字符序列)。

在Arduino草图中读取,直到收到此命令结束序列,然后运行该命令。