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-rtt",
|
||||
"embassy-executor",
|
||||
"embassy-futures",
|
||||
"embassy-rp",
|
||||
"embassy-sync",
|
||||
"embassy-time",
|
||||
|
|
@ -762,6 +763,7 @@ dependencies = [
|
|||
"embedded-io",
|
||||
"embedded-io-async",
|
||||
"embedded-storage",
|
||||
"heapless",
|
||||
"mipidsi",
|
||||
"panic-probe",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -35,10 +35,19 @@ embassy-time = { version = "0.5", features = [
|
|||
"defmt-timestamp-uptime",
|
||||
] }
|
||||
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"
|
||||
mipidsi = "0.9.0"
|
||||
embedded-hal-bus = "0.3.0"
|
||||
embassy-futures = "0.1.2"
|
||||
heapless = "0.8.0"
|
||||
|
||||
[profile.release]
|
||||
debug = 2
|
||||
|
|
|
|||
|
|
@ -2,10 +2,12 @@
|
|||
#![no_main]
|
||||
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_futures::select::{select_array, select4};
|
||||
use embassy_rp::gpio::{Input, Level, Output, Pull};
|
||||
use embassy_rp::pwm::{self, Pwm};
|
||||
use embassy_time::{Delay, Timer};
|
||||
use embedded_hal_bus::spi::ExclusiveDevice;
|
||||
use heapless::String;
|
||||
use mipidsi::interface::SpiInterface;
|
||||
use mipidsi::models::ST7789;
|
||||
use mipidsi::options::Orientation;
|
||||
|
|
@ -56,20 +58,16 @@ async fn main(_spawner: Spawner) -> ! {
|
|||
.expect("display init")
|
||||
};
|
||||
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 ferris = Image::new(&raw_image_data, Point::new(0, 0));
|
||||
ferris.draw(&mut display).unwrap();
|
||||
|
||||
let style = MonoTextStyle::new(&FONT_10X20, Rgb565::GREEN);
|
||||
Text::new(
|
||||
let hello_text = Text::new(
|
||||
"Hello embedded_graphics \n + embassy + RP2040!",
|
||||
Point::new(0, 68),
|
||||
style,
|
||||
)
|
||||
.draw(&mut display)
|
||||
.unwrap();
|
||||
);
|
||||
|
||||
// setup RGB LED
|
||||
let mut rg_config = pwm::Config::default();
|
||||
|
|
@ -88,20 +86,52 @@ async fn main(_spawner: Spawner) -> ! {
|
|||
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
|
||||
let _btn_a = Input::new(p.PIN_12, 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 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 {
|
||||
Timer::after_millis(100).await;
|
||||
set_led(0, 0, 63);
|
||||
let state = [
|
||||
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