mirror of
https://github.com/hubaldv/bioz-firmware-rs.git
synced 2025-12-06 05:01:18 +00:00
Included LED RPC.
This commit is contained in:
41
src/main.rs
41
src/main.rs
@@ -3,10 +3,12 @@
|
||||
|
||||
use defmt::info;
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_time::{Timer, Duration};
|
||||
use embassy_futures::{select::select, select::Either};
|
||||
use embassy_stm32::gpio::{Level, Output, Speed};
|
||||
use embassy_stm32::{i2c, spi, Config};
|
||||
use embassy_stm32::time::Hertz;
|
||||
use embassy_time::Timer;
|
||||
|
||||
use crate::ad5940_registers::{AFECON, AFEGENINTSTA};
|
||||
|
||||
use {defmt_rtt as _, panic_probe as _};
|
||||
@@ -26,7 +28,7 @@ use embassy_stm32::usb::Driver;
|
||||
use embassy_stm32::{bind_interrupts, peripherals, usb};
|
||||
|
||||
mod communication;
|
||||
use communication::init_communication;
|
||||
use communication::{init_communication, LED_FREQUENCY_SIGNAL};
|
||||
|
||||
bind_interrupts!(struct Irqs {
|
||||
USB_DRD_FS => usb::InterruptHandler<peripherals::USB>;
|
||||
@@ -122,6 +124,9 @@ async fn main(spawner: Spawner) {
|
||||
let driver = Driver::new(p.USB, Irqs, p.PA12, p.PA11);
|
||||
init_communication(driver, spawner);
|
||||
|
||||
// Green led task
|
||||
spawner.must_spawn(green_led(led));
|
||||
|
||||
loop {
|
||||
// Read chip id
|
||||
// let chip_id = ad5940.get_chipid().await.unwrap();
|
||||
@@ -135,16 +140,38 @@ async fn main(spawner: Spawner) {
|
||||
// info!("Electrodes states: {:?}", result);
|
||||
|
||||
// info!("high");
|
||||
led.set_high();
|
||||
|
||||
|
||||
Timer::after_millis(1000).await;
|
||||
|
||||
led.set_low();
|
||||
|
||||
Timer::after_millis(1000).await;
|
||||
|
||||
info!("Toggle!");
|
||||
info!("Mainloop still running!");
|
||||
|
||||
Timer::after_millis(5000).await;
|
||||
|
||||
// ad5940.sequencer_trigger().await;
|
||||
}
|
||||
}
|
||||
|
||||
#[embassy_executor::task]
|
||||
async fn green_led(mut led: Output<'static>) {
|
||||
let mut delay = Duration::from_millis(500);
|
||||
|
||||
loop {
|
||||
// Wait for either a frequency change or a timer timeout
|
||||
match select(LED_FREQUENCY_SIGNAL.wait(), Timer::after(delay)).await {
|
||||
Either::First(frequency) => {
|
||||
if frequency > 0.0 {
|
||||
// Avoid divide-by-zero or negative delay
|
||||
let millis = (1000.0 / frequency) as u64 / 2;
|
||||
delay = Duration::from_millis(millis.max(1)); // enforce minimum delay of 1ms
|
||||
}
|
||||
}
|
||||
Either::Second(_) => {
|
||||
// Timer expired, proceed to toggle
|
||||
}
|
||||
}
|
||||
|
||||
led.toggle();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user