记录无人机RBG灯的意思

DEFINE_COLOUR_SEQUENCE 是一个宏,用于生成一个32位整数。这个整数被划分成10个“帧”,每一帧占用3个位(bit),用来编码一个颜色值。

YELLOW 就是一个预定义的颜色常量,它被定义为 GREEN | RED 的组合(因为黄色就是由红和绿混合而成的)。

把这行代码展开来看,它的含义是:

时间片 (Step)0123456789
颜色值YELLOWYELLOWBLACKBLACKYELLOWYELLOWBLACKBLACKBLACKBLACK
LED状态亮 (黄)亮 (黄)亮 (黄)亮 (黄)

💡 实际视觉效果

在 update() 函数中,系统每隔100毫秒(AP_HAL::millis()/100)前进一个时间片。因此,上面的定义会产生如下视觉效果:

  1. 第0-200ms:黄色,亮起 (YELLOW, YELLOW)

  2. 第200-400ms:熄灭 (BLACK, BLACK)

  3. 第400-600ms:黄色,再次亮起 (YELLOW, YELLOW)

  4. 第600-1000ms:长时间熄灭 (BLACK, BLACK, BLACK, BLACK)

这样,人眼看到的模式就是 “闪、灭、闪、长灭”,也就是我们所说的 “双闪黄灯”,用来明确提示飞手“预检失败,请检查地面站”。

所以,这行代码就是闪黄灯模式的“乐谱”,而 update() 函数就是那个“演奏家”,按照这个乐谱指挥LED灯亮灭。如果你把其中的 YELLOW 改成 RED,它就会变成双闪红灯。这种代码设计让你可以通过修改这个序列,轻松定制任何想要的闪烁模式。

////
驱动用的i2c 的toshiba 炫彩灯
libraries/AP_Notify/ToshibaLED_I2C.cpp

#include <GCS_MAVLink/GCS.h>
 

// set_rgb - set color as a combination of red, green and blue values
bool ToshibaLED_I2C::hw_set_rgb(uint8_t red, uint8_t green, uint8_t blue)
{
    gcs().send_text(MAV_SEVERITY_INFO, "ToshibaLED_I2C::hw_set_rgb: %d %d %d", red, green, blue);
    rgb = {red, green, blue};
    _need_update = true;
    return true;
}
void ToshibaLED_I2C::_timer(void)
{
    if (!_need_update) {
        return;
    }
    _need_update = false;

    /* 4-bit for each color */
    uint8_t val[4] = { TOSHIBA_LED_PWM0, (uint8_t)(rgb.b >> 4),
                       (uint8_t)(rgb.g / 16), (uint8_t)(rgb.r / 16) };

   _dev->transfer(val, sizeof(val), nullptr, 0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值