pixhawk是一项十分优秀的开源飞控项目,其中蜂鸣器在这个项目中起着提示飞控状态的作用,由于pixhawk蜂鸣器声音过于单调,于是博主便想改变一下pixhawk的一些提示声音。
pixhawk蜂鸣器声音文件的位置 Firmware/src/drivers/stm32/tone_alarm/tone_alarm.cpp文件中
{
// enable debug() calls
//_debug_enabled = true;
_default_tunes[TONE_STARTUP_TUNE] = "MFT240L8 O4aO5dc O4aO5dc O4aO5dc L16dcdcdcdc"; // startup tune
_default_tunes[TONE_ERROR_TUNE] = "MBT200a8a8a8PaaaP"; // ERROR tone
_default_tunes[TONE_NOTIFY_POSITIVE_TUNE] = "MFT200e8a8a"; // Notify Positive tone
_default_tunes[TONE_NOTIFY_NEUTRAL_TUNE] = "MFT200e8e"; // Notify Neutral tone
_default_tunes[TONE_NOTIFY_NEGATIVE_TUNE] = "MFT200e8c8e8c8e8c8"; // Notify Negative tone
_default_tunes[TONE_ARMING_WARNING_TUNE] = "MNT75L1O2G"; //arming warning
_default_tunes[TONE_BATTERY_WARNING_SLOW_TUNE] = "MBNT100a8"; //battery warning slow
_default_tunes[TONE_BATTERY_WARNING_FAST_TUNE] = "MBNT255a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8"; //battery warning fast
_default_tunes[TONE_GPS_WARNING_TUNE] = "MFT255L4AAAL1F#"; //gps warning slow
_default_tunes[TONE_ARMING_FAILURE_TUNE] = "MFT255L4<<<BAP";
_default_tunes[TONE_PARACHUTE_RELEASE_TUNE] = "MFT255L16agagagag"; // parachute release
_default_tunes[TONE_EKF_WARNING_TUNE] = "MFT255L8ddd#d#eeff"; // ekf warning
_default_tunes[TONE_BARO_WARNING_TUNE] = "MFT255L4gf#fed#d"; // baro warning
_default_tunes[TONE_SINGLE_BEEP_TUNE] = "MFT100a8"; // single beep
_default_tunes[TONE_HOME_SET] = "MFT100L4>G#6A#6B#4";
_tune_names[TONE_STARTUP_TUNE] = "startup"; // startup tune
_tune_names[TONE_ERROR_TUNE] = "error"; // ERROR tone
_tune_names[TONE_NOTIFY_POSITIVE_TUNE] = "positive"; // Notify Positive tone
_tune_names[TONE_NOTIFY_NEUTRAL_TUNE] = "neutral"; // Notify Neutral tone
_tune_names[TONE_NOTIFY_NEGATIVE_TUNE] = "negative"; // Notify Negative tone
_tune_names[TONE_ARMING_WARNING_TUNE] = "arming"; // arming warning
_tune_names[TONE_BATTERY_WARNING_SLOW_TUNE] = "slow_bat"; // battery warning slow
_tune_names[TONE_BATTERY_WARNING_FAST_TUNE] = "fast_bat"; // battery warning fast
_tune_names[TONE_GPS_WARNING_TUNE] = "gps_warning"; // gps warning
_tune_names[TONE_ARMING_FAILURE_TUNE] = "arming_failure"; //fail to arm
_tune_names[TONE_PARACHUTE_RELEASE_TUNE] = "parachute_release"; // parachute release
_tune_names[TONE_EKF_WARNING_TUNE] = "ekf_warning"; // ekf warning
_tune_names[TONE_BARO_WARNING_TUNE] = "baro_warning"; // baro warning
_tune_names[TONE_SINGLE_BEEP_TUNE] = "beep"; // single beep
_tune_names[TONE_HOME_SET] = "home_set";
}
其中_default_tunes[]数组中包含了pixhawk所有的蜂鸣器声音,而数组的内容即声音文件由字符串决定。_tune_names的内容为不同声音名称。我们主要修改的是_default_tunes[]的文件内容
乐理知识简介:音符:即音调的高度分为 哆瑞咪发唆啦西 这七个音调在pixahwk代码中分别与 abcdefg 七个字母一依对应注意不区分大小写。哆瑞咪发唆啦西 只是代表音符的高低但并不能代表音符长短。音符的长短用 X分音符表示(X=1,2,4,8,16,32)在pixhawk代码中x一般写在音调后 (如 a4便是以4分音符时长来演奏 ’哆‘ 的音调)若一段音乐设置的音符长度相同则可省略。在源码中默认以4分音符的时长为一拍,当然也可以自己设置以其他音符为一拍设置方法为 Ln(其中n为1,2,4,8,16,32) 如源码中_default_tunes[TONE_STARTUP_TUNE] = "MFT240L8 O4aO5dc O4aO5dc O4aO5dc 便是以8分音符为一拍。当设置某一个音符为一标准拍时,比其大1倍的音符为 1/2 拍 比其小的音符 为 2拍。依次减小增大。如设置4分音符为一拍后。
一拍的具体时间在代码中用Tn进行设置 (30<n<255)Tn的含义为1分钟多少拍,根据音乐节奏可以进行设置。MF将曲调播放一次,MB为循环播放曲调。根据这些命令,便可利用蜂鸣器进行音乐编写。
当然,这里pixhawk仅仅是利用蜂鸣器进行模拟,音乐质量并不高。本文为博主首创,而且博主对pixhawk的研究也只是刚刚入门。还有很多地方需要学习,如果有什么不对的地方请及时联系我,我将进行更正,谢谢。