使用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)
已经使传感器执行器连接..实施中没有显示错误,但搅拌机立方体没有显示运动。
答案 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次读取周期。
如果这是问题,您可以:
time.sleep(3)
(或适合您的任何值)。HTH!