Read and print key states
This commit is contained in:
parent
04a6c0afd3
commit
347b0c6477
3 changed files with 57 additions and 16 deletions
2
firmware/Cargo.lock
generated
2
firmware/Cargo.lock
generated
|
|
@ -752,6 +752,7 @@ dependencies = [
|
||||||
"defmt",
|
"defmt",
|
||||||
"defmt-rtt",
|
"defmt-rtt",
|
||||||
"embassy-executor",
|
"embassy-executor",
|
||||||
|
"embassy-futures",
|
||||||
"embassy-rp",
|
"embassy-rp",
|
||||||
"embassy-sync",
|
"embassy-sync",
|
||||||
"embassy-time",
|
"embassy-time",
|
||||||
|
|
@ -762,6 +763,7 @@ dependencies = [
|
||||||
"embedded-io",
|
"embedded-io",
|
||||||
"embedded-io-async",
|
"embedded-io-async",
|
||||||
"embedded-storage",
|
"embedded-storage",
|
||||||
|
"heapless",
|
||||||
"mipidsi",
|
"mipidsi",
|
||||||
"panic-probe",
|
"panic-probe",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,19 @@ embassy-time = { version = "0.5", features = [
|
||||||
"defmt-timestamp-uptime",
|
"defmt-timestamp-uptime",
|
||||||
] }
|
] }
|
||||||
cortex-m = { version = "0.7.7" }
|
cortex-m = { version = "0.7.7" }
|
||||||
embassy-rp = { version = "0.8", features = ["defmt", "unstable-pac", "time-driver", "critical-section-impl", "rp2040", "boot2-w25q080"] }
|
embassy-rp = { version = "0.8", features = [
|
||||||
|
"defmt",
|
||||||
|
"unstable-pac",
|
||||||
|
"time-driver",
|
||||||
|
"critical-section-impl",
|
||||||
|
"rp2040",
|
||||||
|
"boot2-w25q080",
|
||||||
|
] }
|
||||||
embedded-graphics = "0.8"
|
embedded-graphics = "0.8"
|
||||||
mipidsi = "0.9.0"
|
mipidsi = "0.9.0"
|
||||||
embedded-hal-bus = "0.3.0"
|
embedded-hal-bus = "0.3.0"
|
||||||
|
embassy-futures = "0.1.2"
|
||||||
|
heapless = "0.8.0"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
debug = 2
|
debug = 2
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,12 @@
|
||||||
#![no_main]
|
#![no_main]
|
||||||
|
|
||||||
use embassy_executor::Spawner;
|
use embassy_executor::Spawner;
|
||||||
|
use embassy_futures::select::{select_array, select4};
|
||||||
use embassy_rp::gpio::{Input, Level, Output, Pull};
|
use embassy_rp::gpio::{Input, Level, Output, Pull};
|
||||||
use embassy_rp::pwm::{self, Pwm};
|
use embassy_rp::pwm::{self, Pwm};
|
||||||
use embassy_time::{Delay, Timer};
|
use embassy_time::{Delay, Timer};
|
||||||
use embedded_hal_bus::spi::ExclusiveDevice;
|
use embedded_hal_bus::spi::ExclusiveDevice;
|
||||||
|
use heapless::String;
|
||||||
use mipidsi::interface::SpiInterface;
|
use mipidsi::interface::SpiInterface;
|
||||||
use mipidsi::models::ST7789;
|
use mipidsi::models::ST7789;
|
||||||
use mipidsi::options::Orientation;
|
use mipidsi::options::Orientation;
|
||||||
|
|
@ -56,20 +58,16 @@ async fn main(_spawner: Spawner) -> ! {
|
||||||
.expect("display init")
|
.expect("display init")
|
||||||
};
|
};
|
||||||
let _display_backlight = Output::new(p.PIN_20, Level::High);
|
let _display_backlight = Output::new(p.PIN_20, Level::High);
|
||||||
display.clear(Rgb565::BLACK).unwrap();
|
|
||||||
|
|
||||||
let raw_image_data = ImageRawLE::new(include_bytes!("assets/ferris.raw"), 86);
|
let raw_image_data = ImageRawLE::new(include_bytes!("assets/ferris.raw"), 86);
|
||||||
let ferris = Image::new(&raw_image_data, Point::new(0, 0));
|
let ferris = Image::new(&raw_image_data, Point::new(0, 0));
|
||||||
ferris.draw(&mut display).unwrap();
|
|
||||||
|
|
||||||
let style = MonoTextStyle::new(&FONT_10X20, Rgb565::GREEN);
|
let style = MonoTextStyle::new(&FONT_10X20, Rgb565::GREEN);
|
||||||
Text::new(
|
let hello_text = Text::new(
|
||||||
"Hello embedded_graphics \n + embassy + RP2040!",
|
"Hello embedded_graphics \n + embassy + RP2040!",
|
||||||
Point::new(0, 68),
|
Point::new(0, 68),
|
||||||
style,
|
style,
|
||||||
)
|
);
|
||||||
.draw(&mut display)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
// setup RGB LED
|
// setup RGB LED
|
||||||
let mut rg_config = pwm::Config::default();
|
let mut rg_config = pwm::Config::default();
|
||||||
|
|
@ -88,20 +86,52 @@ async fn main(_spawner: Spawner) -> ! {
|
||||||
b_pwm.set_config(&b_config);
|
b_pwm.set_config(&b_config);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Setup buzzer
|
|
||||||
let mut buzzer_config = pwm::Config::default();
|
|
||||||
buzzer_config.compare_b = 0x4000;
|
|
||||||
buzzer_config.enable = false;
|
|
||||||
let _buzzer_pwm = Pwm::new_output_b(p.PWM_SLICE5, p.PIN_11, buzzer_config.clone());
|
|
||||||
|
|
||||||
// Setup buttons
|
// Setup buttons
|
||||||
let _btn_a = Input::new(p.PIN_12, Pull::Up);
|
let _btn_a = Input::new(p.PIN_12, Pull::Up);
|
||||||
let _btn_b = Input::new(p.PIN_13, Pull::Up);
|
let _btn_b = Input::new(p.PIN_13, Pull::Up);
|
||||||
let _btn_x = Input::new(p.PIN_14, Pull::Up);
|
// let _btn_x = Input::new(p.PIN_14, Pull::Up);
|
||||||
let _btn_y = Input::new(p.PIN_15, Pull::Up);
|
let _btn_y = Input::new(p.PIN_15, Pull::Up);
|
||||||
|
|
||||||
|
let mut btn_f1 = Input::new(p.PIN_11, Pull::Up);
|
||||||
|
let mut btn_f2 = Input::new(p.PIN_14, Pull::Up);
|
||||||
|
let mut btn_f3 = Input::new(p.PIN_9, Pull::Up);
|
||||||
|
let mut btn_f4 = Input::new(p.PIN_3, Pull::Up);
|
||||||
|
|
||||||
|
let mut render = |f_keys: [bool; 4]| {
|
||||||
|
display.clear(Rgb565::BLACK).ok();
|
||||||
|
ferris.draw(&mut display).ok();
|
||||||
|
hello_text.draw(&mut display).ok();
|
||||||
|
|
||||||
|
let mut f_key_string: String<16> = String::new();
|
||||||
|
for (f, s) in f_keys.into_iter().zip(["1", "2", "3", "4"]) {
|
||||||
|
f_key_string.push_str(f.then_some(s).unwrap_or(" ")).ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
Text::new(&f_key_string, Point::new(0, 108), style)
|
||||||
|
.draw(&mut display)
|
||||||
|
.ok();
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut last_state = None;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
Timer::after_millis(100).await;
|
let state = [
|
||||||
set_led(0, 0, 63);
|
btn_f1.is_low(),
|
||||||
|
btn_f2.is_low(),
|
||||||
|
btn_f3.is_low(),
|
||||||
|
btn_f4.is_low(),
|
||||||
|
];
|
||||||
|
if Some(state) != last_state {
|
||||||
|
render(state);
|
||||||
|
last_state = Some(state);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
select_array([
|
||||||
|
btn_f1.wait_for_any_edge(),
|
||||||
|
btn_f2.wait_for_any_edge(),
|
||||||
|
btn_f3.wait_for_any_edge(),
|
||||||
|
btn_f4.wait_for_any_edge(),
|
||||||
|
])
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue