1.8: simple implementation, not acording to assetment
This commit is contained in:
Submodule lab1.7/rustlings updated: f022d5c2bb...0666f77c42
@@ -12,6 +12,14 @@ use stm32f4xx_hal as hal;
|
|||||||
use crate::hal::{pac, prelude::*};
|
use crate::hal::{pac, prelude::*};
|
||||||
use cortex_m_semihosting::hprintln;
|
use cortex_m_semihosting::hprintln;
|
||||||
|
|
||||||
|
enum MainStates {
|
||||||
|
Rood,
|
||||||
|
Groen,
|
||||||
|
Orange,
|
||||||
|
BrugOpen_on,
|
||||||
|
BrugOpen_off
|
||||||
|
}
|
||||||
|
|
||||||
#[entry]
|
#[entry]
|
||||||
fn main() -> ! {
|
fn main() -> ! {
|
||||||
if let (Some(dp), Some(cp)) = (
|
if let (Some(dp), Some(cp)) = (
|
||||||
@@ -20,8 +28,9 @@ fn main() -> ! {
|
|||||||
) {
|
) {
|
||||||
//GPIOD ophalen
|
//GPIOD ophalen
|
||||||
let gpiod = dp.GPIOD.split();
|
let gpiod = dp.GPIOD.split();
|
||||||
//pd12 is pin type
|
let mut led_rood = gpiod.pd14.into_push_pull_output();
|
||||||
let mut led = gpiod.pd12.into_push_pull_output();
|
let mut led_groen = gpiod.pd12.into_push_pull_output();
|
||||||
|
let mut led_orange = gpiod.pd13.into_push_pull_output();
|
||||||
|
|
||||||
//Klok instellen
|
//Klok instellen
|
||||||
let rcc = dp.RCC.constrain();
|
let rcc = dp.RCC.constrain();
|
||||||
@@ -29,15 +38,50 @@ fn main() -> ! {
|
|||||||
|
|
||||||
// Create a delay abstraction based on SysTick
|
// Create a delay abstraction based on SysTick
|
||||||
let mut delay = cp.SYST.delay(&clocks);
|
let mut delay = cp.SYST.delay(&clocks);
|
||||||
let mut status:bool = false;
|
let mut main_state : MainStates = MainStates::Rood;
|
||||||
loop {
|
loop {
|
||||||
//dit verschijnt in een van de open terminals in vscode
|
match main_state {
|
||||||
hprintln!("Led {:?}", status.then(|| "aan!").unwrap_or("uit!"));
|
MainStates::Rood => {
|
||||||
|
hprintln!("Rood");
|
||||||
// On for 1s, off for 1s.
|
led_rood.set_high();
|
||||||
led.toggle();
|
led_groen.set_low();
|
||||||
status ^= true;
|
led_orange.set_low();
|
||||||
delay.delay_ms(500_u32);
|
delay.delay(4.secs());
|
||||||
|
main_state = MainStates::Groen;
|
||||||
|
},
|
||||||
|
MainStates::Groen => {
|
||||||
|
hprintln!("Groen");
|
||||||
|
led_rood.set_low();
|
||||||
|
led_groen.set_high();
|
||||||
|
led_orange.set_low();
|
||||||
|
delay.delay(3.secs());
|
||||||
|
main_state = MainStates::Orange;
|
||||||
|
},
|
||||||
|
MainStates::Orange => {
|
||||||
|
hprintln!("Orange");
|
||||||
|
led_rood.set_low();
|
||||||
|
led_groen.set_low();
|
||||||
|
led_orange.set_high();
|
||||||
|
delay.delay(1.secs());
|
||||||
|
main_state = MainStates::BrugOpen_on;
|
||||||
|
},
|
||||||
|
MainStates::BrugOpen_on => {
|
||||||
|
hprintln!("Brug open - on");
|
||||||
|
led_rood.set_high();
|
||||||
|
led_groen.set_low();
|
||||||
|
led_orange.set_low();
|
||||||
|
delay.delay(2.secs());
|
||||||
|
main_state = MainStates::BrugOpen_off;
|
||||||
|
},
|
||||||
|
MainStates::BrugOpen_off => {
|
||||||
|
hprintln!("Brug open - off");
|
||||||
|
led_rood.set_low();
|
||||||
|
led_groen.set_low();
|
||||||
|
led_orange.set_low();
|
||||||
|
delay.delay(1.secs());
|
||||||
|
main_state = MainStates::BrugOpen_on;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user