#![no_std]
#![no_main]
use edgebadge::{self as hal, entry, pac, pins::Keys, Pins};
use panic_halt as _;
use hal::prelude::*;
use hal::timer::SpinTimer;
use hal::{clock::GenericClockController, delay::Delay};
use pac::{CorePeripherals, Peripherals};
use smart_leds::hsv::SmartLedsWrite;
use smart_leds::hsv::{hsv2rgb, Hsv, RGB8};
#[entry]
fn main() -> ! {
let mut peripherals = Peripherals::take().unwrap();
let core_peripherals = CorePeripherals::take().unwrap();
let mut clocks = GenericClockController::with_internal_32kosc(
peripherals.GCLK,
&mut peripherals.MCLK,
&mut peripherals.OSC32KCTRL,
&mut peripherals.OSCCTRL,
&mut peripherals.NVMCTRL,
);
let mut delay = Delay::new(core_peripherals.SYST, &mut clocks);
let mut pins = Pins::new(peripherals.PORT).split();
let mut buttons = pins.buttons.init(&mut pins.port);
let timer = SpinTimer::new(4);
let mut neopixel = pins.neopixel.init(timer, &mut pins.port);
const NUM_LEDS: usize = 5;
let mut pos_joy: usize = 1;
let mut pos_button: usize = 3;
let mut color_button: u8 = 0;
loop {
for event in buttons.events() {
match event {
Keys::LeftDown => {
pos_joy = pos_joy.saturating_sub(1);
}
Keys::RightDown => {
if pos_joy < 4 {
pos_joy += 1;
}
}
Keys::BDown => {
pos_button = pos_button.saturating_sub(1);
}
Keys::ADown => {
if pos_button < 4 {
pos_button += 1;
}
}
_ => {}
}
}
let _ = neopixel.write((0..NUM_LEDS).map(|i| {
if i == pos_joy || i == pos_button {
hsv2rgb(Hsv {
hue: color_button,
sat: 255,
val: 32,
})
} else {
RGB8::default()
}
}));
color_button = color_button.wrapping_add(1);
delay.delay_ms(5u8);
}
}