无法从True True代码切换到函数

时间:2015-08-26 20:31:26

标签: python function arduino

我有使用串行通信用Python和Arduino编写的代码,我最初没有把它组织成函数或类,所以我现在尝试这样做,以使它更易读和更容易使用。但是,我无法从无限循环切换到可以多次调用的函数。无限循环完全工作,使电机运行并打印出正确的语句,并且该功能实现了打印语句,但它不会使电机运行。

具有无限循环的通用Python代码:

while True: 
    ser.write('a'.encode())       #used as an initial byte

    ...other code... mostly assigning values to the variables below

    motorBytes = bytearray([decToByte(left), decToByte(right), decToByte(leftMid), decToByte(rightMid), distPerc])      #puts the motor values into an array as hex
    print(motorBytes)

    ser.write(motorBytes)

具有函数的通用Python代码:

def motor_loop(distObject, forceGraspL, forceGraspR, maxForceL, maxForceR):
    ser.write('a'.encode())

    ...other code... mostly assigning values to the variables below

    motorBytes = bytearray([decToByte(left), decToByte(right), decToByte(leftMid), decToByte(rightMid), distPerc])      #puts the motor values into an array as hex
    print(motorBytes)

    ser.write(motorBytes)
    return

motor_loop(1.5, 0, 30, 60, 60)        #call the function

这些值是任意的,因为我打印的是通过两端串行通信发送的值,它们是正确的值。

Arduino将军代码:

void loop() 
{
  while (Serial.available()>0)    //checks to see if anything needs to be sent,
  {                            //denoted by recieveing signal from pySerial 
     char inByte = Serial.read();


     if (inByte == 'a') 
     {
       run_loop();
     }   
  }         
}   

 void run_loop()
{
  int num = Serial.readBytes(values, 5);
  if (num < 5)
  {
     return;
  }

  writeMotor(mtrPinLeft, mtrSpeedLeft, mtrPinRight, mtrSpeedRight, mtrPinLeftMid, mtrSpeedLeftMid, mtrPinRightMid, mtrSpeedRightMid); 

(其中writeMotor是一个将所有电机值写入正确引脚的函数。)

我感觉run_loop()中的arduino位中的代码部分:带有返回,以便在不保存所有数据的情况下使函数不运行。任何人都可以确认这种预感并对我如何解决这个问题有任何建议吗?我也不是很熟悉函数,所以我可能会错过一些如何处理函数的东西。提前谢谢!

编辑: ser声明为ser = serial.Serial(port ='COM4'),上面的所有变量(left,right,leftMid等)都在空格中声明它说其他代码

0 个答案:

没有答案