0

我目前正在做一个带有树莓派 3b+ 和一些传感器的项目。其中一个传感器是 adafruit LMS303 三轴加速度计+磁力计(指南针),我尝试做一些基本的示例代码,一切正常。我现在要做的是从 mag.magnetic 中获取值并提取 x、y、z 值并将它们用作数字罗盘。

from time import sleep
import board
import busio
import adafruit_lsm303_accel
import adafruit_lsm303dlh_mag
import time
import math

i2c = busio.I2C(board.SCL, board.SDA)
time.sleep(1) #tiempo para que alcance a detectar el sensor
mag = adafruit_lsm303dlh_mag.LSM303DLH_Mag(i2c)
accel = adafruit_lsm303_accel.LSM303_Accel(i2c)
pi = 3.14159
while True:
    print("Acceleration (m/s^2): X=%0.3f Y=%0.3f Z=%0.3f"%accel.acceleration)
    heading=(math.atan2(mag.magnetic.y,mag.magnetic.x)*180)/pi

    if heading <0:
      heading=360+heading
    print("Magnetometer (micro-Teslas)): X=%0.3f Y=%0.3f Z=%0.3f"%mag.magnetic)
    print("Heading: %7.2f"%heading)

    sleep(0.5)

该代码不起作用,因为 mag.magnetic.x 和 mag.magnetic.y 不存在(不是提取这些值的正确方法)。¿ 有人能指出提取 mag.magnetic.x 和 mag.magnetic.y 的正确方法是什么吗?

4

1 回答 1

0

我解决了它,我注意到 mag.magnetic 是一个元组,所以我只是将 [] 添加到它的末尾:

from time import sleep
import board
import busio
import adafruit_lsm303_accel
import adafruit_lsm303dlh_mag
import time
import math

i2c = busio.I2C(board.SCL, board.SDA)
time.sleep(1) #tiempo para que alcance a detectar el sensor
mag = adafruit_lsm303dlh_mag.LSM303DLH_Mag(i2c)
accel = adafruit_lsm303_accel.LSM303_Accel(i2c)
offset=65
pi = 3.14159

while True:
   # print("Acceleration (m/s^2): X=%0.3f Y=%0.3f Z=%0.3f"%accel.acceleration)
    x=mag.magnetic[0]
    y=mag.magnetic[1]
    heading=(math.atan2(x,y)*180)/pi
    heading=heading-offset
    if heading <0:
      heading=360+heading
   # print("Magnetometer (micro-Teslas)): X=%0.3f Y=%0.3f Z=%0.3f"%mag.magnetic)
    print("Heading: %7.2f"%heading)
    print(" ")

    sleep(0.5)
于 2020-09-07T01:22:51.010 回答