搅拌机没有响应我的加速度计运动

时间:2010-10-07 17:57:37

标签: python arduino blender

使用arduino将加速度计MMA7361L与blender2.49进行交互。使用python 2.62。 我的arduino代码是:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.print(analogRead(0)/4, BYTE);    //x-axis
  Serial.print(analogRead(1)/4, BYTE);    //y-axis
  Serial.print(analogRead(2)/4, BYTE);    //z-axis
  delay(40);
}

我的python代码是:

import Blender
import GameLogic
import serial

serialport = serial.Serial('COM4', 9600)
ob = Blender.Object.Get ('Cube')
cont=GameLogic.getCurrentController()
own = cont.owner
rotxx = move.dRot[0]
rotyy = move.dRot[1]
rotzz = move.dRot[2]
move = cont.actuators["move"]
Blender.Window.WaitCursor(1)
x=[0,0,0]
for i in range(1, 100):
    x1[0] = serialport.read(size=1)
    x1[1] = serialport.read(size=1)
    x1[2] = serialport.read(size=1)

    x2=[(((m - n)*1.65)/180) for m,n in zip(x,x1)]
    rotxx = rotxx + x2[0]
    rotyy = rotyy + x2[1]
    rotzz = rotzz + x2[2]
    move.dRot=(rotxx,rotyy,rotzz)
    cont.activate(move)
    x1=x

else:
    serialport.close()
    Blender.Window.WaitCursor(0)

已经使传感器执行器连接..实施中没有显示错误,但搅拌机立方体没有显示运动。

2 个答案:

答案 0 :(得分:1)

在您的python代码中,您只能读取串行端口传输的传感器值100次,即每次更新40 ms时传感器数据为4秒(根据您的处理代码)。您需要不断读取传感器值并更新场景方向,因此请使用这样的while循环:

read_sensors = True
while(read_sensors):
    # call serialport.read() to read current sensor values
    # update scene

确保这至少每40毫秒运行一次,因为这是您将arduino板写入加速度计值到串行端口的频率。如果您不经常从串行端口读取数据,它将缓冲,导致出现在serialport.read()中的值落后于arduino board正在读取的当前加速度计值。这看起来不太互动。

答案 1 :(得分:1)

我不确定你是否遇到了我制作蟒蛇时的同样问题< - > arduino应用,但是......

默认情况下,当USB端口上打开串行连接时, arduino将自动重置。由于重启不是即时的,你的python程序很可能在arduino开始编写之前完成100次读取周期。

如果这是问题,您可以:

  1. 打开串行连接后插入time.sleep(3)(或适合您的任何值)。
  2. 在电路板的RESET和5V引脚之间粘贴一个120欧姆的电阻,如here所述(这将取消激活自动复位功能)。
  3. HTH!