From 3117c55b1c4eae352d8f7e225ddf408b1fd8879a Mon Sep 17 00:00:00 2001 From: Philipp_EndevourOS Date: Wed, 13 Aug 2025 02:05:49 +0200 Subject: [PATCH] LED is working and implement in feedback --- src/feedback.rs | 22 ++++++++++++++++++++-- src/init/hardware.rs | 8 ++------ src/main.rs | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/feedback.rs b/src/feedback.rs index c145b92..c206061 100644 --- a/src/feedback.rs +++ b/src/feedback.rs @@ -1,6 +1,11 @@ use embassy_time::{Delay, Duration, Timer}; -use esp_hal::{delay, gpio::Output, peripherals}; +use esp_hal::{delay, gpio::Output, peripherals, rmt::ConstChannelAccess}; +use esp_hal_smartled::SmartLedsAdapterAsync; use log::{debug, error, info}; +use init::hardware; +use smart_leds::colors::{BLACK, GREEN, RED, YELLOW}; +use smart_leds::{brightness, colors::BLUE}; +use smart_leds::SmartLedsWriteAsync; use crate::{FEEDBACK_STATE, init}; @@ -10,23 +15,28 @@ pub enum FeedbackState { Nak, Error, Startup, + WIFI, Idle, } +const LED_LEVEL: u8 = 255; + #[embassy_executor::task] -pub async fn feedback_task(buzzer: peripherals::GPIO21<'static>) { +pub async fn feedback_task(mut led: SmartLedsAdapterAsync, { init::hardware::LED_BUFFER_SIZE }>, buzzer: peripherals::GPIO21<'static>) { debug!("Starting feedback task"); let mut buzzer = init::hardware::setup_buzzer(buzzer); loop { let feedback_state = FEEDBACK_STATE.wait().await; match feedback_state { FeedbackState::Ack => { + led.write(brightness([GREEN; init::hardware::NUM_LEDS].into_iter(), LED_LEVEL)).await.unwrap(); buzzer.set_high(); Timer::after(Duration::from_millis(100)).await; buzzer.set_low(); Timer::after(Duration::from_millis(50)).await; } FeedbackState::Nak => { + led.write(brightness([YELLOW; init::hardware::NUM_LEDS].into_iter(), LED_LEVEL)).await.unwrap(); buzzer.set_high(); Timer::after(Duration::from_millis(100)).await; buzzer.set_low(); @@ -34,8 +44,10 @@ pub async fn feedback_task(buzzer: peripherals::GPIO21<'static>) { buzzer.set_high(); Timer::after(Duration::from_millis(100)).await; buzzer.set_low(); + led.write(brightness([BLACK; init::hardware::NUM_LEDS].into_iter(), LED_LEVEL)).await.unwrap(); } FeedbackState::Error => { + led.write(brightness([RED; init::hardware::NUM_LEDS].into_iter(), LED_LEVEL)).await.unwrap(); buzzer.set_high(); Timer::after(Duration::from_millis(500)).await; buzzer.set_low(); @@ -45,6 +57,7 @@ pub async fn feedback_task(buzzer: peripherals::GPIO21<'static>) { buzzer.set_low(); } FeedbackState::Startup => { + led.write(brightness([GREEN; init::hardware::NUM_LEDS].into_iter(), LED_LEVEL)).await.unwrap(); buzzer.set_high(); Timer::after(Duration::from_millis(10)).await; buzzer.set_low(); @@ -56,6 +69,10 @@ pub async fn feedback_task(buzzer: peripherals::GPIO21<'static>) { buzzer.set_high(); Timer::after(Duration::from_millis(100)).await; buzzer.set_low(); + led.write(brightness([BLACK; init::hardware::NUM_LEDS].into_iter(), LED_LEVEL)).await.unwrap(); + } + FeedbackState::WIFI => { + led.write(brightness([BLUE; init::hardware::NUM_LEDS].into_iter(), LED_LEVEL)).await.unwrap(); } FeedbackState::Idle => { // Do nothing @@ -65,6 +82,7 @@ pub async fn feedback_task(buzzer: peripherals::GPIO21<'static>) { } } + // async fn beep_ack() { // buzzer.set_high(); // buzzer.set_low(); diff --git a/src/init/hardware.rs b/src/init/hardware.rs index b586052..7d41b7c 100644 --- a/src/init/hardware.rs +++ b/src/init/hardware.rs @@ -55,8 +55,8 @@ use crate::init::wifi; * *************************************************/ -const NUM_LEDS: usize = 66; -const LED_BUFFER_SIZE: usize = NUM_LEDS * 25; +pub const NUM_LEDS: usize = 66; +pub const LED_BUFFER_SIZE: usize = NUM_LEDS * 25; #[panic_handler] fn panic(info: &core::panic::PanicInfo) -> ! { @@ -116,10 +116,6 @@ pub async fn hardware_init( debug!("hardware init done"); - let level = 255; - - led.write(brightness([BLUE; NUM_LEDS].into_iter(), level)).await.unwrap(); - (uart_device, stack, i2c_device, led, buzzer_gpio) } diff --git a/src/main.rs b/src/main.rs index 747179c..48c09c3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,7 +53,7 @@ async fn main(mut spawner: Spawner) { )); debug!("spawing feedback task.."); - spawner.must_spawn(feedback::feedback_task(buzzer_gpio)); + spawner.must_spawn(feedback::feedback_task(_led, buzzer_gpio)); /******************************************************************************/ let mut sub = chan.subscriber().unwrap();