mirror of
				https://github.com/Djeeberjr/fw-anwesenheit.git
				synced 2025-11-03 23:24:10 +00:00 
			
		
		
		
	LED is working and implement in feedback
This commit is contained in:
		
							parent
							
								
									593d98df74
								
							
						
					
					
						commit
						3117c55b1c
					
				@ -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();
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user