some morse code ability

This commit is contained in:
JP Stringham
2026-04-03 17:06:20 -04:00
parent ef5f2ec8c4
commit 8c59a66627

View File

@@ -72,10 +72,10 @@ fn main() -> ! {
pac.PLL_SYS, pac.PLL_SYS,
xosc.operating_frequency(), xosc.operating_frequency(),
PLLConfig { PLLConfig {
vco_freq: 1500.MHz(), vco_freq: 1212.MHz(),
refdiv: 1, refdiv: 1,
post_div1: 5, post_div1: 6,
post_div2: 4, post_div2: 1,
}, },
&mut clocks, &mut clocks,
&mut pac.RESETS, &mut pac.RESETS,
@@ -112,10 +112,12 @@ fn main() -> ! {
pwm0.set_div_frac(0); pwm0.set_div_frac(0);
pwm0.clear_interrupt(); pwm0.clear_interrupt();
pwm0.enable(); pwm0.enable();
// pwm0.disable();
let mut pwm_pin = pins.gpio16; let mut pwm_pin = pins.gpio16;
pwm_pin.set_drive_strength(rp2040_hal::gpio::OutputDriveStrength::TwelveMilliAmps); pwm_pin.set_drive_strength(rp2040_hal::gpio::OutputDriveStrength::TwelveMilliAmps);
pwm0.channel_a.output_to(pwm_pin); pwm0.channel_a.output_to(pwm_pin);
pwm0.channel_a.set_enabled(false);
let mut on_off_input = pins.gpio15.into_pull_up_input(); let mut on_off_input = pins.gpio15.into_pull_up_input();
@@ -125,9 +127,9 @@ fn main() -> ! {
let mut tick = 0u32; let mut tick = 0u32;
let mut last_input = 0u32; let mut last_input = 0u32;
let mut broadcast_on = true; let mut broadcast_on = false;
let mut current_tune = 65000; let mut current_tune = 4;
const MAX_TUNE: u16 = 65000u16; const MAX_TUNE: u16 = 65000u16;
const MIN_TUNE: u16 = 4u16; const MIN_TUNE: u16 = 4u16;
@@ -157,7 +159,38 @@ fn main() -> ! {
let mut input_mode = InputMode::default(); let mut input_mode = InputMode::default();
let mut input_mode_chg_input = pins.gpio12.into_pull_up_input(); let mut input_mode_chg_input = pins.gpio12.into_pull_up_input();
println!("Booted at {}MHz", pll_freq.to_MHz()); println!("Booted at {}kHz", pll_freq.to_kHz());
#[rustfmt::skip]
// CQ CQ CQ VA3FWE VA3FWE
let sequence = [
0u8,
2, 0, 1, 0, 2, 0, 1, 4, // C
2, 0, 2, 0, 1, 0, 2, 4, 4, // Q
2, 0, 1, 0, 2, 0, 1, 4,
2, 0, 2, 0, 1, 0, 2, 4, 4,
2, 0, 1, 0, 2, 0, 1, 4,
2, 0, 2, 0, 1, 0, 2, 4, 4,
4, // wait
1, 0, 1, 0, 1, 0, 2, 4, // V
1, 0, 2, 4, // A
1, 0, 1, 0, 1, 0, 2, 0, 2, 4, // 3
1, 0, 1, 0, 2, 0, 1, 4, // F
1, 0, 2, 0, 2, 4, // W
1, 4, // E
4, // wait
1, 0, 1, 0, 1, 0, 2, 4, // V
1, 0, 2, 4, // A
1, 0, 1, 0, 1, 0, 2, 0, 2, 4, // 3
1, 0, 1, 0, 2, 0, 1, 4, // F
1, 0, 2, 0, 2, 4, // W
1, 4, // E
0xFF, // wait before calling again
];
let mut morse_sequence_index = 0usize;
let mut last_morse_time = 0u32;
loop { loop {
tick = tick.wrapping_add(1); tick = tick.wrapping_add(1);
@@ -201,6 +234,37 @@ fn main() -> ! {
sh1106_dev.blit_framebuffer(&mut i2c, &mut gfx_buf); sh1106_dev.blit_framebuffer(&mut i2c, &mut gfx_buf);
} }
let morse_delay = match sequence[morse_sequence_index] {
0 => 100_000,
1 => 200_000,
2 => 400_000,
0xFF => 200_000_000,
_ => 400_000,
};
if tick.wrapping_sub(last_morse_time) > morse_delay {
morse_sequence_index = (morse_sequence_index + 1) % sequence.len();
last_morse_time = tick;
broadcast_on = match sequence[morse_sequence_index] {
0 | 4 | 0xFF => false,
_ => true,
};
match broadcast_on {
true => {
led_pin.set_high().unwrap();
pwm0.channel_a.set_enabled(true);
}
false => {
led_pin.set_low().unwrap();
pwm0.channel_a.set_enabled(false);
}
}
}
// broadcast_on = on_off_input.is_low().unwrap();
if tick.wrapping_sub(last_input) < 500_000 { if tick.wrapping_sub(last_input) < 500_000 {
continue; continue;
} }
@@ -221,18 +285,6 @@ fn main() -> ! {
info!("Input Mode is now {}", input_mode); info!("Input Mode is now {}", input_mode);
} }
if on_off_input.is_low().unwrap() {
info!("Broadcast toggle");
last_input = tick;
broadcast_on = !broadcast_on;
match broadcast_on {
true => pwm0.enable(),
false => pwm0.disable(),
}
continue;
}
if input_mode == InputMode::DisplayOnly { if input_mode == InputMode::DisplayOnly {
continue; continue;
} }