繁体   English   中英

同步Arduino和Python

[英]Sync Arduino and 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”,但是没有,不是所有人都到达了Python。 我尝试对其进行“冲洗”,但效果相同。

我创建了一个线程,该线程不断从串行中侦听,并检查命令是否为“ ok”,但不是,也许,如果我发送4条命令,我会收到2条“ ok”,有时为0,有时为1。

尝试一次从Python代码发送“命令结束”字符(或字符序列),而不是一次读取多达97个字节( BUFFER_SIZE - 3 )。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM