1.8: simple implementation, not acording to assetment

This commit is contained in:
2024-10-29 11:29:34 +01:00
parent 18290a17a3
commit 18e3ab9001
2 changed files with 56 additions and 12 deletions

View File

@@ -12,16 +12,25 @@ 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)) = (
pac::Peripherals::take(), pac::Peripherals::take(),
cortex_m::peripheral::Peripherals::take(), cortex_m::peripheral::Peripherals::take(),
) { ) {
//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;
}
}
} }
} }