LED is working and implement in feedback

This commit is contained in:
Philipp_EndevourOS 2025-08-13 02:05:49 +02:00
parent 593d98df74
commit 3117c55b1c
3 changed files with 23 additions and 9 deletions

View File

@ -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<ConstChannelAccess<esp_hal::rmt::Tx, 0>, { 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();

View File

@ -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)
}

View File

@ -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();