#![no_std]
#![no_main]
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
peripherals::Peripherals,
prelude::*,
systimer::SystemTimer,
timer::TimerGroup,
Delay,
gpio::{Gpio1, Gpio2, Gpio10, Output, PushPull, Input, PullDown},
};
use esp_hal::entry;
#[entry]
fn main() -> ! {
// Setup peripherals
let peripherals = Peripherals::take().unwrap();
let system = peripherals.SYSTEM.split();
let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
let io = peripherals.GPIO.split();
let mut delay = Delay::new(&clocks);
// PIR sensor input on GPIO10
let pir: Gpio10<Input<PullDown>> = io.pins.gpio10.into_pull_down_input();
// LED on GPIO2
let mut led: Gpio2<Output<PushPull>> = io.pins.gpio2.into_push_pull_output();
// Buzzer on GPIO1
let mut buzzer: Gpio1<Output<PushPull>> = io.pins.gpio1.into_push_pull_output();
loop {
if pir.is_high().unwrap() {
// Motion detected
led.set_high().unwrap();
buzzer.set_high().unwrap();
delay.delay_ms(500u32); // Alarm duration
buzzer.set_low().unwrap();
} else {
// No motion
led.set_low().unwrap();
buzzer.set_low().unwrap();
}
delay.delay_ms(100u32);
}
}