为什么这段程序一直输出-1呢请帮我改正。import machineimport time# 定义 ADXL355 寄存器地址ADXL355_DEVID_AD = 0x00ADXL355_DEVID_MST = 0x01ADXL355_PARTID = 0x02ADXL355_REVID = 0x03ADXL355_STATUS = 0x04ADXL355_FIFO_ENTRIES_L = 0x0
这段程序一直输出-1的原因可能是因为在读取加速度数据时,等待数据准备好的while循环条件不正确。应该使用Pin(22, Pin.IN)来读取INT1引脚的状态,当INT1引脚为低电平时,表示有新的数据可以读取。因此,while循环的条件应该改为machine.Pin(22, machine.Pin.IN).value() == 0。同时,还需要在初始化ADXL355的时候,将INT1引脚配置为输出数据准备好的引脚,可以使用ADXL355_ACT_INACT_CTL寄存器来配置。具体来说,可以将该寄存器的最高位(位7)设置为1,表示将INT1引脚配置为输出数据准备好的引脚。修改后的程序如下所示:
import machine import time
定义 ADXL355 寄存器地址
ADXL355_DEVID_AD = 0x00 ADXL355_DEVID_MST = 0x01 ADXL355_PARTID = 0x02 ADXL355_REVID = 0x03 ADXL355_STATUS = 0x04 ADXL355_FIFO_ENTRIES_L = 0x05 ADXL355_FIFO_ENTRIES_H = 0x06 ADXL355_XDATA_L = 0x08 ADXL355_XDATA_H = 0x09 ADXL355_YDATA_L = 0x0A ADXL355_YDATA_H = 0x0B ADXL355_ZDATA_L = 0x0C ADXL355_ZDATA_H = 0x0D ADXL355_TEMP_L = 0x0E ADXL355_TEMP_H = 0x0F ADXL355_SOFT_RESET = 0x1F ADXL355_THRESH_ACT_L = 0x20 ADXL355_THRESH_ACT_H = 0x21 ADXL355_THRESH_INACT_L = 0x22 ADXL355_THRESH_INACT_H = 0x23 ADXL355_TIME_INACT_L = 0x24 ADXL355_TIME_INACT_H = 0x25 ADXL355_ACT_INACT_CTL = 0x27 ADXL355_FIFO_CONTROL_1 = 0x28 ADXL355_FIFO_CONTROL_2 = 0x29 ADXL355_FIFO_CONTROL_3 = 0x2A ADXL355_FIFO_CONTROL_4 = 0x2B ADXL355_INT_MAP1 = 0x2C ADXL355_INT_MAP2 = 0x2D ADXL355_FILTER = 0x2C ADXL355_POWER_CTL = 0x2D
定义 ADXL355 片选引脚
cs = machine.Pin(21, machine.Pin.OUT) cs.value(1)
定义 SPI 引脚
sclk = machine.Pin(14, machine.Pin.OUT) sda = machine.Pin(13, machine.Pin.OUT) miso = machine.Pin(12, machine.Pin.IN)
spi = machine.SPI(1, baudrate=8000000, polarity=0, phase=0)
初始化 ADXL355
cs.value(0) spi.write(bytes([ADXL355_SOFT_RESET, 0x52])) cs.value(1)
配置 ADXL355
cs.value(0) spi.write(bytes([ADXL355_POWER_CTL, 0x02])) cs.value(1)
cs.value(0) spi.write(bytes([ADXL355_ACT_INACT_CTL, 0x8F])) cs.value(1)
cs.value(0) spi.write(bytes([ADXL355_FIFO_CONTROL_1, 0x00])) cs.value(1)
cs.value(0) spi.write(bytes([ADXL355_FIFO_CONTROL_2, 0x00])) cs.value(1)
cs.value(0) spi.write(bytes([ADXL355_FIFO_CONTROL_3, 0x00])) cs.value(1)
cs.value(0) spi.write(bytes([ADXL355_FIFO_CONTROL_4, 0x00])) cs.value(1)
cs.value(0) spi.write(bytes([ADXL355_FILTER, 0x03])) cs.value(1)
cs.value(0) spi.write(bytes([ADXL355_INT_MAP1, 0x00])) cs.value(1)
cs.value(0) spi.write(bytes([ADXL355_INT_MAP2, 0x00])) cs.value(1)
读取加速度数据
while True: # 等待数据准备好 while machine.Pin(22, machine.Pin.IN).value() == 1: time.sleep_us(10)
cs.value(0)
spi.write(bytes([ADXL355_XDATA_L | 0x80, 0x00]))
data = spi.read(6)
cs.value(1)
x = (data[1] << 8 | data[0]) & 0xFFFF
y = (data[3] << 8 | data[2]) & 0xFFFF
z = (data[5] << 8 | data[4]) & 0xFFFF
# 转换为有符号整数
if x > 32767:
x -= 65536
if y > 32767:
y -= 65536
if z > 32767:
z -= 65536
print("X:", x, "Y:", y, "Z:", z)
time.sleep_ms(100)
原文地址: https://www.cveoy.top/t/topic/bHII 著作权归作者所有。请勿转载和采集!