Files
Simba-OmniInfantry/云台/modules/BUZZER/buzzer.h
T
LSMushui 72bf925f47 feat(buzzer): 台架调试模式把 CAN 掉线警告音换成循环旋律
台架调试时 CAN 设备(尤其 Pitch)掉线会按 legacy 语义每 2s 响 n 下,连续
滴滴声很吵且影响听其它声音,故加一个开关:

  robot_param.h -> 台架调试开关
  #define DEBUG_BUZZER_MELODY  1   // 1=警告音换旋律;0=legacy 报警(比赛用)

实现分三处:
- robot_param.h: 新增开关,与 DEBUG_SHOOT_WITHOUT_REFEREE 放在同一分区
- modules/BUZZER: 新增 buzzer_play_melody(step) —— 按固定 100ms/步 推进,
  内部对旋律总步数取模自动循环;旋律表 buzzer_melody[] 用"上行分解和弦 +
  回落"共 14 步(1.4s),空拍 BUZZER_P 作断音,选音限定中音3~高音2 避免刺耳。
  驱动层本身不判断开关,保持纯外设职责,只是多了一个音符序列接口。
- monitor_task.c: CAN 掉线分支按开关二选一。旋律模式下步进用本任务自身的
  100ms 节拍(与文件里已有的遥控器连接音效同一写法),不用 HAL_GetTick
  采样,避免周期抖动漏掉或重复音符。

设计取舍: 只替换"声音",不替换"灯语" —— 红灯常亮、遥控器掉线红灯双闪、
BMI088 失败绿灯双闪等 LED 语义完全不变,因此调试时仍能一眼看出是哪台
设备掉线;linkcheck_first_offline() 也保留调用,方便在调试器里直接看结果。
比赛前把 DEBUG_BUZZER_MELODY 改回 0 即恢复 legacy 报警。

两个工程同步修改,内容保持一致。
2026-09-12 11:19:59 +08:00

26 lines
1.1 KiB
C

#ifndef BUZZER_H
#define BUZZER_H
#include <stdint.h>
/* C 板无源蜂鸣器(TIM4_CH3, PD14),音调表与 legacy 完全一致 */
typedef enum
{
BUZZER_P = 0, // 空拍
BUZZER_L1, BUZZER_L1_, BUZZER_L2, BUZZER_L2_, BUZZER_L3, BUZZER_L4, BUZZER_L4_, BUZZER_L5, BUZZER_L5_, BUZZER_L6, BUZZER_L6_, BUZZER_L7, // 低音
BUZZER_M1, BUZZER_M1_, BUZZER_M2, BUZZER_M2_, BUZZER_M3, BUZZER_M4, BUZZER_M4_, BUZZER_M5, BUZZER_M5_, BUZZER_M6, BUZZER_M6_, BUZZER_M7, // 中音
BUZZER_H1, BUZZER_H1_, BUZZER_H2, BUZZER_H2_, BUZZER_H3, BUZZER_H4, BUZZER_H4_, BUZZER_H5, BUZZER_H5_, BUZZER_H6, BUZZER_H6_, BUZZER_H7, // 高音
} buzzer_tone_e;
extern void buzzer_init(void);
extern void buzzer_on(buzzer_tone_e tone);
extern void buzzer_off(void);
/* ---- 调试用旋律 ----
* 按固定 100ms/步 推进的短旋律(音符表见 buzzer.c),用于把掉线警告音换成
* 音乐。step 由调用方每 100ms 递增 1,内部对旋律总步数取模自动循环;
* 旋律中的空拍 BUZZER_P 由 buzzer_on() 解释为静音,用来断音。 */
extern void buzzer_play_melody(uint16_t step);
#endif