【Follow me第二季第1期】进阶任务(必做):制作不倒翁
[复制链接]
本帖最后由 disk0 于 2024-8-21 22:22 编辑
任务理解
展示不倒翁运动过程中的不同灯光效果,这个时候需要用到 板载的三轴运动传感器 (LIS3DH),计算板载姿势,对应到灯珠亮起
代码部分
import time
import math
import board
import busio
import neopixel
import adafruit_lis3dh
# 初始化I2C接口
i2c = busio.I2C(board.ACCELEROMETER_SCL, board.ACCELEROMETER_SDA)
# 初始化LIS3DH传感器
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x19)
# 初始化Neopixel灯带
num_pixels = 10
pixels = neopixel.NeoPixel(board.NEOPIXEL, num_pixels, brightness=.05, auto_write=False)
def get_tilt_index(x, y):
"""根据传感器数据计算倾斜方向的灯珠索引"""
# 计算倾斜的角度(以度为单位)
angle = math.atan2(y, x) * 180 / math.pi
if angle < 0:
angle += 360
# 将角度映射到12个灯珠上,每个灯珠覆盖30度范围
index = int((angle + 15) // 30) % num_pixels
return index
while True:
# 读取加速度值
x, y, z = lis3dh.acceleration
# 获取倾斜方向的灯珠索引
index = get_tilt_index(x, y)
# 关闭所有灯
pixels.fill((0, 0, 0))
# 点亮对应的灯珠
pixels[index] = (255, 0, 0)
# 更新Neopixel灯带
pixels.show()
# 延时0.2s
time.sleep(0.2)
主要逻辑
1. 初始化 lis3dh 传感器 和 NeoPixel 灯带.
2. 使用计算函数,把三轴数据转化成 角度,然后匹配到10灯珠
使用了12个方向,映射到10颗灯
3. 大循环中读取运动传感器值 并 更新 对应的灯珠
展示
动态请参考展示视频
|