ardupilot添加自定义RGBLed闪烁功能
1、在ardupilot中对RGBLed的控制是在l路径libraries\AP_Notify下,复制该文件夹,并粘贴在libraries下,根据自己的喜好更换文件夹名称
我这里将其命名为:AP_My_Notify,并将其目录下对本次试验没有用的文件删除,同时将各文件进行重命名,这里在每个文件名称前面加上“My”

将文件复制并重命名好后,需要修改所使用到的类,
2、对所有的类进行重命名操作后,将所需要替换的地方全部替换掉;


3、在My_RGBLed.cpp中对void My_RGBLed::update_colours(void)进行修改,改为:
// _scheduled_update - updates _red, _green, _blue according to notify flags
uint8_t _i_Step = 0;
void My_RGBLed::update_colours(void)
{
uint8_t brightness = _led_bright;
switch (_i_Step) {
case 0:
_red_des = brightness;
_blue_des = _led_off;
_green_des = _led_off;
_i_Step = 1;
break;
case 1:
_red_des = _led_off;
_blue_des = brightness;
_green_des = _led_off;
_i_Step = 2;
break;
case 2:
_red_des = _led_off;
_blue_des = _led_off;
_green_des = brightness;
_i_Step = 0;
break;
}
}
该部分程序意思为控制RGBLed灯泡红、蓝、绿,三种颜色依次点亮,并循环执行;
4、修改好底层程序后开始修改上层应用
在修改上层应用之前需要先让程序识别到我们自己定义的程序,这里需要打开ArduCopter\wscript和ArduCopter\make.inc,在对应的文件中添加上我们自定义的文件夹,如下所示:


5、开始对顶层应用进行修改:
①、在头文件Copter.h中导入我们自定义的头文件#include <AP_My_Notify/My_AP_Notify.h>:

创建自定义类的对象:

创建一个leds.cpp的文件,用于对底层函数的调用;

将函数添加到任务列表

对init_ardupilot函数进行修改,将自定义的功能在这里初始化(由于这里自定义的是对RGBLed的控制,因此要将原来的AP_Notify的初始化做屏蔽处理)

此时可对程序编译,若编译通过,将固件烧录进Pixhawk上的灯会红绿蓝三色交替闪烁:
