Files
jerryboard-two/src/main.rs
T

69 lines
2.0 KiB
Rust
Raw Normal View History

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::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;
}
}