led and backlight
This commit is contained in:
+69
@@ -0,0 +1,69 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
mod backlight;
|
||||
mod led;
|
||||
|
||||
use esp_backtrace as _;
|
||||
use esp_bootloader_esp_idf::esp_app_desc;
|
||||
use esp_hal::ledc::timer::{self, TimerIFace};
|
||||
use esp_hal::ledc::{LSGlobalClkSource, Ledc, LowSpeed};
|
||||
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")
|
||||
};
|
||||
|
||||
let mut ledc = Ledc::new(peripherals.LEDC);
|
||||
ledc.set_global_slow_clock(LSGlobalClkSource::APBClk);
|
||||
let mut timer = ledc.timer::<LowSpeed>(timer::Number::Timer0);
|
||||
timer
|
||||
.configure(timer::config::Config {
|
||||
duty: timer::config::Duty::Duty8Bit,
|
||||
clock_source: timer::LSClockSource::APBClk,
|
||||
frequency: Rate::from_khz(5),
|
||||
})
|
||||
.expect("Failed to configure backlight timer");
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user