Ardupilot代码更改启动音乐/其他功能音乐(蜂鸣器输出)

代码修改

Ardupilot蜂鸣器声音文件的位置Ardupilot/libraries/AP_Notify/ToneAlarm.cpp。

const AP_ToneAlarm::Tone AP_ToneAlarm::_tones[] {
#define AP_NOTIFY_TONE_QUIET_NEG_FEEDBACK 0
    { "MFT200L4<<<B#A#2", false },
#define AP_NOTIFY_TONE_LOUD_NEG_FEEDBACK 1
    { "MFT100L4>B#A#2P8B#A#2", false },
#define AP_NOTIFY_TONE_QUIET_NEU_FEEDBACK 2
    { "MFT200L4<B#", false },
#define AP_NOTIFY_TONE_LOUD_NEU_FEEDBACK 3
    { "MFT100L4>B#", false },
#define AP_NOTIFY_TONE_QUIET_POS_FEEDBACK 4
    { "MFT200L4<A#B#", false },
#define AP_NOTIFY_TONE_LOUD_POS_FEEDBACK 5
    { "MFT100L4>A#B#", false },
#define AP_NOTIFY_TONE_LOUD_READY_OR_FINISHED 6
    { "MFT100L4>G#6A#6B#4", false },
#define AP_NOTIFY_TONE_QUIET_READY_OR_FINISHED 7
    { "MFT200L4<G#6A#6B#4", false },
#define AP_NOTIFY_TONE_LOUD_ATTENTION_NEEDED 8
    { "MFT100L4>A#A#A#A#", false },
#define AP_NOTIFY_TONE_QUIET_ARMING_WARNING 9
    { "MNT75L1O2G", false },
#define AP_NOTIFY_TONE_LOUD_WP_COMPLETE 10
    { "MFT200L8G>C3", false },
#define AP_NOTIFY_TONE_LOUD_LAND_WARNING_CTS 11
    { "MBT200L2A-G-A-G-A-G-", true },
#define AP_NOTIFY_TONE_LOUD_VEHICLE_LOST_CTS 12
    { "MBT200>A#1", true },
#define AP_NOTIFY_TONE_LOUD_BATTERY_ALERT_CTS 13
    { "MBNT255>A#8A#8A#8A#8A#8A#8A#8A#8A#8A#8A#8A#8A#8A#8A#8A#8", true },
#define AP_NOTIFY_TONE_QUIET_COMPASS_CALIBRATING_CTS 14
    { "MBNT255<C16P2", true },
#define AP_NOTIFY_TONE_WAITING_FOR_THROW 15
    { "MBNT90L4O2A#O3DFN0N0N0", true},
#define AP_NOTIFY_TONE_LOUD_1 16
    { "MFT100L8>B", false},
#define AP_NOTIFY_TONE_LOUD_2 17
    { "MFT100L8>BB", false},
#define AP_NOTIFY_TONE_LOUD_3 18
    { "MFT100L8>BBB", false},
#define AP_NOTIFY_TONE_LOUD_4 19
    { "MFT100L8>BBBB", false},
#define AP_NOTIFY_TONE_LOUD_5 20
    { "MFT100L8>BBBBB", false},
#define AP_NOTIFY_TONE_LOUD_6 21
    { "MFT100L8>BBBBBB", false},
#define AP_NOTIFY_TONE_LOUD_7 22
    { "MFT100L8>BBBBBBB", false},
#define AP_NOTIFY_TONE_TUNING_START 23
    { "MFT100L20>C#D#", false},
#define AP_NOTIFY_TONE_TUNING_SAVE 24
    { "MFT100L10DBDB>", false},
#define AP_NOTIFY_TONE_TUNING_ERROR 25
    { "MFT100L10>BBBBBBBB", false},
#define AP_NOTIFY_TONE_LEAK_DETECTED 26
    { "MBT255L8>A+AA-", true},
#define AP_NOTIFY_TONE_QUIET_SHUTDOWN 27
    { "MFMST200L32O3ceP32cdP32ceP32c<c>c<cccP8L32>c>c<P32<c<c", false },
#define AP_NOTIFY_TONE_QUIET_NOT_READY_OR_NOT_FINISHED 28
    { "MFT200L4<B#4A#6G#6", false },
#define AP_NOTIFY_TONE_STARTUP 29
    { "MFT240L8O4aO5dcO4aO5dcO4aO5dcL16dcdcdcdc", false },
#define AP_NOTIFY_TONE_NO_SDCARD 30
    { "MNBGG", false },
}

由上述代码可以看到,如要更改开机启动音乐,需要更该AP_NOTIFY_TONE_STARTUP 29,原有启动音乐为MFT240L8O4aO5dcO4aO5dcO4aO5dcL16dcdcdcdc,因此我们更改此部分代码即可。倘若要更改其他功能音乐,改其相应字符串内容即可。

音乐代码更改规则

哆瑞咪发唆啦西,分别由音名:CDEFGAB来表示,在简谱中则由1234567来表示,即1-C,2-D,3-E,4-F,5-G,6-A,7-B。
由此,我们观察原代码`

MFT240L8O4aO5dcO4aO5dcO4aO5dcL16dcdcdcdc

MF为前缀,Tn代表音乐速度,如T240代表一分钟240拍,n的有效值为32到255;
Ln设置音符的持续时间(长度)。变量n不表示实际持续时间,L1-整音符,L2-半音符,L4-四分音符(L8,L16,L32,L64等),如上代码中L8代表默认一拍为一个八分音符;
如果音符后面带数字,如O代表一个空拍,4则代表该音符持续一个四分音符时长;如果音符后面不带数字,如a即说明该音“la”持续默认时长,即一个八分音符时长。即前半部分为la ruaidou la ruaidou la ruaidou,L16代表后面将默认一拍时长改为一个十六分音符时长。

以下为本人改写的一段音乐代码(lemon),可复制直接使用

MFT174L4 >c8d8 e c8<a8ML P4 >d<b g8e8ML P4 ba g8c8 P4 ge
P4P4 d8e8f P4 >c<b12b12>c12 <g P4 f e6f12 f-p4>c<b12b12a12 g-P4P4>c8d8 ec8<a8P4 
>d<bg8e8P4b ag8c8P4g eP4P4d8e8 fP4gf12f12g12 eg>ce d3d8d8cc8 cP4P4P4  P4P4P4P4

该段速度为174,默认以四分音符为一拍,“ +”或“#”(代表升半音)或“-”(代表降半音),“>”代表升一个八度 (在简谱中我们看见数字上方有一个“·”在代表高音部),“<”代表降一个八度 (在简谱中我们看见数字下方有一个“·”在代表低音部);
Pn为所指示音符长度的空拍(与Ln相同),如P4为四分音符空拍;
MN代表音乐正常。音符持续时间是Ln指示的长度的7/8。这是默认模式;
ML代表音乐连奏。音符持续时间是Ln指示的持续时间的全长;
MS代表音乐断奏。音符持续时间是Ln指示的长度的3/4分;
Tn放置在音符之后时,可以用于变速或者用于附点音符(在简谱中我们看见数字后方有一个“·”),当然我们还可以通过设置Ln来改变其音符的持续时间,如代码中音符后面的3、12等都为附点音符,但这样计算可能不太准确,但也可以达到差不多的效果。
PS:MF命令使乐曲播放一次然后停止,MB命令导致
调校结束时重复播放,音调字母不区分大小写。

lemon简谱
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

另外我们Ardupilot原代码上方有一段注释,内容指向一个网站链接:在线测试音乐代码网站,我们可以在该网站编写音乐代码并在线试听,免去了一遍遍插板子编译烧写的麻烦,另外很多编码规则我都是通过该网站理解的,各位可以查漏补缺。

烧写过程

编译成功后,打开mission planner,插上板子打开初始设置页面,点击安装固件,点击右下方load custom firmware,找到ardupilot.apj文件双击(我的在E:\ardupilot\build\fmuv2\bin里),按照提示操作,这样就将固件下载到板子里了。

注意事项

音乐代码在Ardupilot程序中要写成一行且不能太长,否则在编译过程可能会出现报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值