summaryrefslogtreecommitdiff
path: root/src/bin/main.rs
blob: 3567fbbf6148354f40b453d73b0921975730798d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#![no_std]
#![no_main]

use esp_backtrace as _;
use esp_hal::clock::CpuClock;
use esp_hal::main;
use esp_hal::rmt::Rmt;
use esp_hal::time::{Duration, Instant, Rate};
use esp_hal_smartled::{SmartLedsAdapter, smart_led_buffer};
use log::info;
use smart_leds::{
    SmartLedsWrite as _, brightness,
    colors::{BLUE, GREEN, RED},
};

// This creates a default app-descriptor required by the esp-idf bootloader.
// For more information see: <https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/app_image_format.html#application-description>
esp_bootloader_esp_idf::esp_app_desc!();

#[main]
fn main() -> ! {
    // generator version: 1.2.0

    esp_println::logger::init_logger_from_env();

    let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
    let peripherals = esp_hal::init(config);

    let mut buffer = smart_led_buffer!(1);
    let mut led = {
        let frequency = Rate::from_mhz(80);
        let rmt = Rmt::new(peripherals.RMT, frequency).expect("failed to initialize RMT0");
        SmartLedsAdapter::new(rmt.channel0, peripherals.GPIO8, &mut buffer)
    };
    let level = 10;

    loop {
        info!("Hello world!");
        let delay_start = Instant::now();
        led.write(brightness([RED].into_iter(), level)).unwrap();
        while delay_start.elapsed() < Duration::from_millis(500) {}
        led.write(brightness([GREEN].into_iter(), level)).unwrap();
        while delay_start.elapsed() < Duration::from_millis(1000) {}
        led.write(brightness([BLUE].into_iter(), level)).unwrap();
        while delay_start.elapsed() < Duration::from_millis(1500) {}
    }
}