forked from M-Labs/thermostat
add nucleo-f429zi board leds
This commit is contained in:
parent
edc440cceb
commit
1f80b456f3
46
src/led.rs
Normal file
46
src/led.rs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
use embedded_hal::digital::OutputPin;
|
||||||
|
use stm32f4xx_hal::gpio::{
|
||||||
|
Output, PushPull,
|
||||||
|
gpiob::{PB0, PB7, PB14},
|
||||||
|
};
|
||||||
|
|
||||||
|
type GreenPin = PB0<Output<PushPull>>;
|
||||||
|
type BluePin = PB7<Output<PushPull>>;
|
||||||
|
type RedPin = PB14<Output<PushPull>>;
|
||||||
|
|
||||||
|
pub struct Led<PIN> {
|
||||||
|
pin: PIN,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<PIN: OutputPin> Led<PIN> {
|
||||||
|
fn new(pin: PIN) -> Self {
|
||||||
|
Led { pin }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn on(&mut self) {
|
||||||
|
self.pin.set_high();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn off(&mut self) {
|
||||||
|
self.pin.set_low();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl Led<GreenPin> {
|
||||||
|
pub fn green(pin: GreenPin) -> Self {
|
||||||
|
Self::new(pin)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Led<BluePin> {
|
||||||
|
pub fn blue(pin: BluePin) -> Self {
|
||||||
|
Self::new(pin)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Led<RedPin> {
|
||||||
|
pub fn red(pin: RedPin) -> Self {
|
||||||
|
Self::new(pin)
|
||||||
|
}
|
||||||
|
}
|
13
src/main.rs
13
src/main.rs
@ -30,6 +30,8 @@ mod net;
|
|||||||
mod server;
|
mod server;
|
||||||
use server::Server;
|
use server::Server;
|
||||||
mod timer;
|
mod timer;
|
||||||
|
mod led;
|
||||||
|
use led::Led;
|
||||||
|
|
||||||
const OUTPUT_INTERVAL: u32 = 1000;
|
const OUTPUT_INTERVAL: u32 = 1000;
|
||||||
|
|
||||||
@ -81,6 +83,10 @@ fn main() -> ! {
|
|||||||
let gpioc = dp.GPIOC.split();
|
let gpioc = dp.GPIOC.split();
|
||||||
let gpiog = dp.GPIOG.split();
|
let gpiog = dp.GPIOG.split();
|
||||||
|
|
||||||
|
let mut led_green = Led::green(gpiob.pb0.into_push_pull_output());
|
||||||
|
let mut led_blue = Led::blue(gpiob.pb7.into_push_pull_output());
|
||||||
|
let mut led_red = Led::red(gpiob.pb14.into_push_pull_output());
|
||||||
|
|
||||||
info!("ADC init");
|
info!("ADC init");
|
||||||
adc_input::setup(&mut cp.NVIC, dp.ADC1, gpioa.pa3);
|
adc_input::setup(&mut cp.NVIC, dp.ADC1, gpioa.pa3);
|
||||||
|
|
||||||
@ -99,23 +105,30 @@ fn main() -> ! {
|
|||||||
|
|
||||||
let mut last_output = 0_u32;
|
let mut last_output = 0_u32;
|
||||||
loop {
|
loop {
|
||||||
|
led_red.on();
|
||||||
let now = timer::now().0;
|
let now = timer::now().0;
|
||||||
let instant = Instant::from_millis(now as i64);
|
let instant = Instant::from_millis(now as i64);
|
||||||
server.poll(instant);
|
server.poll(instant);
|
||||||
|
|
||||||
if now - last_output >= OUTPUT_INTERVAL {
|
if now - last_output >= OUTPUT_INTERVAL {
|
||||||
|
led_blue.on();
|
||||||
let adc_value = adc_input::read();
|
let adc_value = adc_input::read();
|
||||||
adc_value.map(|adc_value| {
|
adc_value.map(|adc_value| {
|
||||||
write!(server, "t={},pa3={}\r\n", now, adc_value).unwrap();
|
write!(server, "t={},pa3={}\r\n", now, adc_value).unwrap();
|
||||||
});
|
});
|
||||||
last_output = now;
|
last_output = now;
|
||||||
|
led_blue.off();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update watchdog
|
// Update watchdog
|
||||||
wd.feed();
|
wd.feed();
|
||||||
|
led_red.off();
|
||||||
|
|
||||||
// Wait for interrupts
|
// Wait for interrupts
|
||||||
// if net.is_pending() {
|
// if net.is_pending() {
|
||||||
|
led_green.on();
|
||||||
wfi();
|
wfi();
|
||||||
|
led_green.off();
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user