У меня Raspberry Pi, связанный с акселерометром. В Python я хочу нарисовать анимированный график значения оси X. Это график в реальном времени, который показывает изменение значения оси X при перемещении Pi в моей руке. Однако график показывает только начальное значение.
from mpu6050 import mpu6050
from time import sleep
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
style.use("fivethirtyeight")
sensor = mpu6050(0x68)
print " waiting for the sensor to callibrate..."
sleep(2)
acc = np.empty((0,3), float) # storage for x, y, z axes values of the accelerometer
t = 0
time = np.empty((0,1), int) # time counter(this becomes the x axis of the graph)
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
axis = 0 # accelerometer x axis. y axis = 1, z axis = 2
def animate(i):
ax1.clear()
ax1.plot(time, acc[:,axis])
while True:
accel_data = sensor.get_accel_data()
print("Accelerometer data")
print("x: " + str(accel_data['x']))
print("y: " + str(accel_data['y']))
print("z: " + str(accel_data['z']))
acc = np.append(acc, np.array([[accel_data['x'], accel_data['y'], accel_data['z']]]), axis=0)
# increment time array
time = np.append(time, t)
t = t + 1
print("acc[:,0]:" + str(acc[:,0]))
print("time:" + str(time))
ani = animation.FuncAnimation(fig, animate, interval = 1000)
plt.show()
sleep(2)
Однако, когда я запускаю скрипт, он печатает только значение в первом цикле, как показано ниже. Он также показывает график, но это пустой график, потому что в первом цикле есть только одна точка данных.
waiting for the sensor to callibrate...
Accelerometer data
x: 6.2009822998
y: 3.36864173584
z: 9.27513723145
acc[:,0]: [ 6.2009823]
time: [0]
Когда я закрываю окно графика, цикл возобновляется со второго цикла и печатает значения вперед, но график никогда не отображается снова.
Хотя он не выдает сообщения об ошибке, я предполагаю, что что-то не так с animation.FuncAnimation
или местом, куда я должен поместить plt.show()
в цикл while
.
Я использую Raspberry Pi 3b + с Python 2.7.13. Акселерометр MPU6050.
Было бы замечательно, если бы кто-нибудь мог сказать мне, как решить эту проблему. Спасибо!