概述
飞控代码细节
-
任务调用频率50HZ(20ms),buzzer.update()
-
内部将频率减少到10HZ(100ms)
-
单响(SINGLE_BUZZ) 响1次,100ms
解锁事件错误,电池故障提醒,其中加锁只响一次,其他两种会一直间断响
-
双响(DOUBLE_BUZZ) 100ms间断响两次
vehicle_lost间断响,找飞机时使用
-
解锁(ARMING_BUZZ) 响声 3S
解锁常响3S一次
-
BARO_GLITCH,100ms间断响5次(飞控代码暂时没用到这部分)
-
EKF_BAD,四个音调越来越短 :ekf_bad错误
300ms on >> 100ms off >> 200ms on >> 100ms off >>100ms on >>100ms off >>100ms on >>100ms off
注意: ARM代表解锁,DISARM加锁
代码如下
void Buzzer::update()
{
// return immediately if disabled
if (!AP_Notify::flags.external_leds) {
return;
}
// check for arming failed event
if (AP_Notify::events.arming_failed) {
// arming failed buzz
play_pattern(SINGLE_BUZZ);
}
// reduce 50hz call down to 10hz
_counter++;
if (_counter < 5) {
return;
}
_counter = 0;
// complete currently played pattern
if (_pattern != NONE) {
_pattern_counter++;
switch (_pattern) {
case SINGLE_BUZZ:
// buzz for 10th of a second
if (_pattern_counter == 1) {
on(true);
}else{
on(false);
_pattern = NONE;
}
return;
case DOUBLE_BUZZ:
// buzz for 10th of a second
switch (_pattern_counter) {
case 1:
on(true);
break;
case 2:
on(false);
break;
case 3:
on(true);
break;
case 4:
default:
on(false);
_pattern = NONE;
break;
}
return;
case ARMING_BUZZ:
// record start time
if (_pattern_counter == 1) {
_arming_buzz_start_ms = AP_HAL::millis();
on(true);
} else {
// turn off buzzer after 3 seconds
if (AP_HAL::millis() - _arming_buzz_start_ms >= BUZZER_ARMING_BUZZ_MS) {
_arming_buzz_start_ms = 0;
on(false);
_pattern = NONE;
}
}
return;
case BARO_GLITCH:
// four fast tones
switch (_pattern_counter) {
case 1:
case 3:
case 5:
case 7:
case 9:
on(true);
break;
case 2:
case 4:
case 6:
case 8:
on(false);
break;
case 10:
on(false);
_pattern = NONE;
break;
最后
以上就是动人大雁为你收集整理的Ardupilot(PX4)飞控驱动蜂鸣器和RGB细节的全部内容,希望文章能够帮你解决Ardupilot(PX4)飞控驱动蜂鸣器和RGB细节所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复