Gcode 中有一个命令 M300,用于播放提示音,但是 Klipper 默认没有实装,所以我们可以自己写一个宏,以下宏来源记不清了,如有知道的欢迎补充。
Copy
######################################################################
# Beeper | 蜂鸣器设置
######################################################################
# M300 : 播放提示音,支持常见的无源蜂鸣器。使用方法:
# M300 [P<ms>] [S<Hz>]
# P 为持续时间, S 为频率.
# 需要注意的是频率和音高并不是完美对应.
## 定义蜂鸣器控制引脚,一般使用 LCD 上的 EXP1_1 板载蜂鸣器,也可以使用外置蜂鸣器接到 GPIO 引脚。
[output_pin BEEPER_pin]
pin: EXP1_1
# 无源蜂鸣器(piezo beeper)需要 PWM 信号控制,有源(DC buzzer)不需要
pwm: True
value: 0
# Silent at power on, set to 1 if active low.
shutdown_value: 0
# Disable at emergency shutdown (no PWM would be available anyway).
cycle_time: 0.001
# Default PWM frequency : 0.001 = 1ms will give a tone of 1kHz
# Although not pitch perfect.
## 定义 M300 宏,实现 Gcode 功能
[gcode_macro M300]
description: 播放提示音
gcode:
# Use a default 1kHz tone if S is omitted.
{% set S = params.S|default(1000)|int %}
# Use a 10ms duration is P is omitted.
{% set P = params.P|default(100)|int %}
SET_PIN PIN=BEEPER_pin VALUE=0.5 CYCLE_TIME={ 1.0/S if S > 0 else 1 }
G4 P{P}
SET_PIN PIN=BEEPER_pin VALUE=0
######################################################################
# 开始、结束打印时调用 M300 播放提示音,示例来自 CHEP
######################################################################
[gcode_macro START_PRINT]
gcode:
# chirp to indicate starting to print
M300 S1000 P500
# Use absolute coordinates
G90
# Reset the G-Code Z offset (adjust Z offset if needed)
SET_GCODE_OFFSET Z=0.0
# Home the printer
G28
# G1 X10 Y50 Z0.2 F3000
# 避开夹子
G1 Y60 F3000
G1 X10 Z0.2 F3000
G92 E0
G1 Y130 E10 F225
G92 E0
[gcode_macro END_PRINT]
gcode:
# Turn off bed, extruder, and fan
M140 S0
M104 S0
M106 S0
# Move nozzle away from print while retracting
G91
G1 X-2 Y-2 E-3 F300
# Raise nozzle by 10mm
G1 Z10 F3000
G90
G28 X Y
# Disable steppers
M84
# 播放结束提示音
M300 S440 P200
M300 S660 P250
M300 S880 P300
以上除了最后的调用示例,其他的不需要修改(必要时修改蜂鸣器控制引脚)。一般我习惯放在 display.cfg 里面进行调用。
当然,你也可以生成并播放复杂的旋律,或者打印翻车的时候播放 120 的提示音