2026-09-07 18:35:36 -05:00
|
|
|
#![no_std]
|
|
|
|
|
#![no_main]
|
|
|
|
|
|
|
|
|
|
mod backlight;
|
|
|
|
|
mod led;
|
|
|
|
|
|
|
|
|
|
use esp_backtrace as _;
|
|
|
|
|
use esp_bootloader_esp_idf::esp_app_desc;
|
|
|
|
|
use esp_hal::{init, rmt::Rmt, time::Rate, Config};
|
|
|
|
|
use esp_println::println;
|
|
|
|
|
use smart_leds::hsv::{hsv2rgb, Hsv};
|
|
|
|
|
use smart_leds::{brightness, gamma};
|
|
|
|
|
|
|
|
|
|
esp_app_desc!();
|
|
|
|
|
|
|
|
|
|
#[esp_hal::main]
|
|
|
|
|
fn main() -> ! {
|
|
|
|
|
let peripherals = init(Config::default());
|
|
|
|
|
|
|
|
|
|
let mut led = {
|
|
|
|
|
let rmt = Rmt::new(peripherals.RMT, Rate::from_mhz(80)).expect("Failed to init RMT");
|
|
|
|
|
led::RgbLed::new(rmt.channel0, peripherals.GPIO8).expect("Failed to init RGB LED")
|
|
|
|
|
};
|
|
|
|
|
|
2026-09-07 18:46:42 -05:00
|
|
|
let (_ledc, timer) =
|
|
|
|
|
backlight::setup_timer(peripherals.LEDC).expect("Failed to init backlight timer");
|
2026-09-07 18:35:36 -05:00
|
|
|
let mut backlight =
|
|
|
|
|
backlight::LcdBacklight::new(&timer, peripherals.GPIO22).expect("Failed to init backlight");
|
|
|
|
|
|
|
|
|
|
let delay = esp_hal::delay::Delay::new();
|
|
|
|
|
|
|
|
|
|
let levels = [1.0f32, 0.75, 0.5, 0.25, 0.0, 0.5];
|
|
|
|
|
let mut level_idx = 0;
|
|
|
|
|
|
|
|
|
|
loop {
|
|
|
|
|
for hue in 0..=255 {
|
|
|
|
|
let rgb = hsv2rgb(Hsv {
|
|
|
|
|
hue,
|
|
|
|
|
sat: 255,
|
|
|
|
|
val: 255,
|
|
|
|
|
});
|
|
|
|
|
let lit = brightness(gamma(core::iter::once(rgb)), 40)
|
|
|
|
|
.next()
|
|
|
|
|
.unwrap();
|
|
|
|
|
led.set_rgb(lit).unwrap();
|
|
|
|
|
|
|
|
|
|
if hue % 32 == 0 {
|
|
|
|
|
println!("hue {hue}: ({}, {}, {})", lit.r, lit.g, lit.b);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delay.delay_millis(10);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let level = levels[level_idx % levels.len()];
|
|
|
|
|
backlight.set_level(level).unwrap();
|
|
|
|
|
println!("backlight level: {level}");
|
|
|
|
|
level_idx += 1;
|
|
|
|
|
}
|
|
|
|
|
}
|