Blender未响应我的加速度传感器运动
我正在用Arduino和加速度传感器MMA7361L一起工作,想把它和Blender 2.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)
我已经把传感器和执行器连接好了,实施过程中没有出现错误,但Blender里的立方体没有任何移动。
2 个回答
1
我不确定你是否遇到了我在做Python和Arduino应用时遇到的同样问题,不过...
默认情况下,当你在USB端口打开串口连接时,Arduino会自动重启。因为重启不是瞬间完成的,所以你的Python程序很可能在Arduino开始写数据之前就已经完成了100次读取。
如果这是你遇到的问题,你可以选择:
- 在打开串口连接后插入
time.sleep(3)
(或者其他适合你的时间)来等待。 - 在你的板子上将一个120欧姆的电阻连接在RESET和5V引脚之间,具体方法可以参考这里(这样可以关闭自动重启功能)。
希望这些对你有帮助!
1
在你的Python代码中,你只读取了通过串口传来的传感器值100次,这大约是4秒钟的数据(每次更新需要40毫秒,按照你的处理代码来说)。但你需要不断读取传感器的值,并更新场景的方向,所以可以使用一个像这样的循环:
read_sensors = True
while(read_sensors):
# call serialport.read() to read current sensor values
# update scene
确保这个循环至少每40毫秒能运行一次,因为你的Arduino板子就是这么频繁地把加速度计的值写入串口。如果你读取串口数据的频率不够高,数据会被缓存,这样在serialport.read()中看到的值就会滞后于Arduino板子当前读取的加速度计值。这样看起来就不够流畅了。