BetaFlight代码解析(21)—LED 控制和视觉反馈

本文档介绍了Betaflight中的LED灯条控制系统,该系统通过可编程RGB LED灯条提供有关飞行状态、警告和系统状态的视觉反馈。该系统支持WS2811/WS2812 LED灯条,并可配置其布局、颜色、功能和视觉效果。

LED配置系统

该LED系统采用分层配置方式,通过参数组实现持久性控制,并提供灵活的LED布局定义格式。每个LED的位置、方向、功能、叠加层和颜色均可单独配置。

配置数据结构

结构目的关键字段
ledStripConfig_t全局 LED 设置轮廓、亮度、彩虹参数
ledStripStatusModeConfig_t状态模式布局LED配置、颜色、模式映射
ledConfig_t单个LED定义位置、功能、方向、叠加层
hsvColor_t颜色定义色相、饱和度、明度(HSV颜色空间)

LED功能和叠加层

该系统支持多种决定 LED 行为的基本功能,并结合叠加效果来改变基本功能。

功能类型枚举值描述
颜色LED_FUNCTION_COLOR静态彩色显示
飞行模式LED_FUNCTION_FLIGHT_MODE显示当前飞行模式
武装国家LED_FUNCTION_ARM_STATE武装/解除武装指示
电池LED_FUNCTION_BATTERY电池电量指示器
全球定位系统LED_FUNCTION_GPSGPS状态显示
推力环LED_FUNCTION_THRUST_RING旋转推力指示器
叠加类型枚举值描述
警告LED_OVERLAY_WARNING闪烁警告图案
彩虹LED_OVERLAY_RAINBOW彩虹色循环
垂直传输LED_OVERLAY_VTX视频发射机频率
风门LED_OVERLAY_THROTTLE节气门位置颜色变化
拉尔森扫描仪LED_OVERLAY_LARSON_SCANNER移动扫描仪效应

WS2811 驱动程序实现

WS2811 驱动程序提供底层接口,用于通过精确的时序和 DMA 传输来控制可寻址 LED 灯条。该驱动程序将 HSV 颜色值转换为 RGB,并管理 WS2811 协议复杂的时序要求。

驱动程序功能

  • 渐进式更新:LED 指示灯以增量方式更新,以防止阻塞其他任务。
  • 亮度控制:RGB转换期间应用全局亮度缩放
  • DMA传输:使用硬件DMA进行非阻塞数据传输
  • 格式支持:RGB、GRB 和 GRBW LED 灯条格式

LED层处理

该LED系统依次应用多个处理层,每个处理层负责视觉反馈的不同方面。主更新功能协调这些处理层并管理时序。

主更新循环

ledStripUpdate()功能通过精确的定时控制和基于系统状态的条件更新来协调所有 LED 处理。

预警系统

警告层使用特定的颜色模式和时间,为各种系统状态提供关键的视觉反馈。

警告类型颜色图案触发条件
武装已禁用绿/黑闪光isArmingDisabled()
电量低红/黑闪光电池电压低
故障安全黄/蓝闪光failsafeIsActive()
翻滚品红色/黑色闪光灯翻滚模式已激活
可视蜂鸣器可配置蜂鸣器声音已激活

色彩管理

该系统采用 HSV(色调、饱和度、明度)色彩空间进行所有颜色处理,提供直观的颜色操控和流畅的过渡效果。颜色在配置中定义,并可通过 CLI 命令进行自定义。

默认调色板

颜色处理功能

  • HSV色彩空间处理:颜色在HSV色彩空间中进行处理,以实现平滑过渡。
  • 亮度缩放:在驱动程序级别应用全局亮度控制。
  • 颜色插值:为油门叠加层实现平滑的颜色过渡。
  • 色调偏移:基于传感器输入的动态颜色变化。

配置和设置

LED灯条配置通过CLI命令和参数组进行管理,并具有验证和实时更新功能。

配置参数

范围默认描述
ledstrip_profileLED_PROFILE_RACE主动式 LED 配置文件模式
ledstrip_brightness100全球亮度(0-100%)
ledstrip_rainbow_delta0LED灯之间彩虹色调渐变
ledstrip_rainbow_freq120彩虹动画频率
ledstrip_beacon_period_ms500信标闪光周期
ledstrip_visual_beeper0启用可视蜂鸣器

命令行界面命令

  • LED配置led <index> <x>,<y>:<directions>:<functions>:<color>
  • 颜色定义color <index> <hue>,<saturation>,<value>
  • 模式颜色:配置飞行模式的方向颜色
  • 配置文件选择:在种族、信标和状态配置文件之间切换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值