Compare commits

..

No commits in common. "c3fea7441d7d01b679e90e8c4672e100b2fa0adb" and "b6ad376a64ccc071e1b8d8d4574b150ef7f34e5f" have entirely different histories.

1 changed files with 13 additions and 20 deletions

View File

@ -1,13 +1,13 @@
#![no_std] #![no_std]
#![no_main] #![no_main]
use core::cell::{Cell, RefCell}; use core::cell::Cell;
use critical_section::Mutex; use critical_section::Mutex;
use esp_hal::clock::ClockControl; use esp_hal::clock::ClockControl;
use esp_hal::delay::Delay; use esp_hal::delay::Delay;
use esp_hal::gpio::{Event, GpioPin, Input, PullUp, IO}; use esp_hal::gpio::{Event, IO};
use esp_hal::ledc::{channel, timer, LSGlobalClkSource, LEDC}; use esp_hal::ledc::{channel, timer, LSGlobalClkSource, LEDC};
use esp_hal::peripherals::Peripherals; use esp_hal::peripherals::Peripherals;
use esp_hal::prelude::*; use esp_hal::prelude::*;
@ -15,20 +15,17 @@ use esp_hal::systimer::SystemTimer;
use panic_halt as _; use panic_halt as _;
const BUTTON_TIMEOUT: u64 = SystemTimer::TICKS_PER_SECOND / 5; const BUTTON_TIMEOUT: u64 = SystemTimer::TICKS_PER_SECOND / 10;
const COLORS: [[u8; 3]; 6] = [ const COLORS: [[u8; 3]; 6] = [
// G B R
[0, 0, 1],
[1, 0, 1],
[1, 0, 0], [1, 0, 0],
[1, 1, 0], [1, 1, 0],
[0, 1, 0], [0, 1, 0],
[0, 1, 1], [0, 1, 1],
[0, 0, 1],
[1, 0, 1],
]; ];
static BUTTON: Mutex<RefCell<Option<GpioPin<Input<PullUp>, 9>>>> = Mutex::new(RefCell::new(None));
static LAST_TRIGGERED: Mutex<Cell<u64>> = Mutex::new(Cell::new(0)); static LAST_TRIGGERED: Mutex<Cell<u64>> = Mutex::new(Cell::new(0));
static STOP_CHASE: Mutex<Cell<bool>> = Mutex::new(Cell::new(false)); static STOP_CHASE: Mutex<Cell<bool>> = Mutex::new(Cell::new(false));
@ -87,9 +84,7 @@ fn main() -> ! {
}) })
.unwrap(); .unwrap();
let mut btn = io.pins.gpio9.into_pull_up_input(); io.pins.gpio9.into_pull_up_input().listen(Event::RisingEdge);
btn.listen(Event::RisingEdge);
critical_section::with(|cs| BUTTON.borrow(cs).replace(Some(btn)));
let delay = Delay::new(&clocks); let delay = Delay::new(&clocks);
@ -101,7 +96,7 @@ fn main() -> ! {
let _ = b.set_duty(*b_duty); let _ = b.set_duty(*b_duty);
} }
delay.delay_millis(100u32); delay.delay_millis(200u32);
} }
loop {} loop {}
@ -111,15 +106,13 @@ fn main() -> ! {
fn gpio_handler() { fn gpio_handler() {
critical_section::with(|cs| { critical_section::with(|cs| {
let last_triggered = LAST_TRIGGERED.borrow(cs); let last_triggered = LAST_TRIGGERED.borrow(cs);
if last_triggered.get() + BUTTON_TIMEOUT < SystemTimer::now() { if last_triggered.get() + BUTTON_TIMEOUT > SystemTimer::now() {
let stop_chase = STOP_CHASE.borrow(cs); return;
stop_chase.set(!stop_chase.get());
last_triggered.set(SystemTimer::now());
} }
if let Some(button) = BUTTON.borrow(cs).borrow_mut().as_mut() { let stop_chase = STOP_CHASE.borrow(cs);
button.clear_interrupt(); stop_chase.set(!stop_chase.get());
}
last_triggered.set(SystemTimer::now());
}); });
} }