diff --git a/src/controller.rs b/src/controller.rs index 415e170..6314505 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -12,57 +12,57 @@ use crate::{ pub struct TrafficController { pub phase_index: usize, pub phase_start: u64, - pub main_traffic_light: TrafficLight, - pub north_traffic_light: TrafficLight, - pub south_traffic_light: TrafficLight, - pub pedestrian_light: PedestrianLight, - pub button: Pin, PullUp>, + pub main_traffic_light: TrafficLight, + pub north_traffic_light: TrafficLight, + pub south_traffic_light: TrafficLight, + pub pedestrian_light: PedestrianLight, + pub button: Pin, PullUp>, pub button_state: bool, } impl TrafficController { pub fn new( - gpio0: Pin, - gpio1: Pin, - gpio2: Pin, - gpio3: Pin, - gpio4: Pin, - gpio5: Pin, - gpio6: Pin, - gpio7: Pin, - gpio8: Pin, - gpio9: Pin, - gpio10: Pin, - gpio11: Pin, + main_red: Pin, + main_yellow: Pin, + main_green: Pin, + north_red: Pin, + north_yellow: Pin, + north_green: Pin, + south_red: Pin, + south_yellow: Pin, + south_green: Pin, + pedestrian_red: Pin, + pedestrian_green: Pin, + pedestrian_button: Pin, ) -> Self { Self { phase_index: 0, phase_start: 0, main_traffic_light: TrafficLight::new( - gpio0.into_push_pull_output(), - gpio1.into_push_pull_output(), - gpio2.into_push_pull_output(), + main_red.into_push_pull_output(), + main_yellow.into_push_pull_output(), + main_green.into_push_pull_output(), ), north_traffic_light: TrafficLight::new( - gpio3.into_push_pull_output(), - gpio4.into_push_pull_output(), - gpio5.into_push_pull_output(), + north_red.into_push_pull_output(), + north_yellow.into_push_pull_output(), + north_green.into_push_pull_output(), ), south_traffic_light: TrafficLight::new( - gpio6.into_push_pull_output(), - gpio7.into_push_pull_output(), - gpio8.into_push_pull_output(), + south_red.into_push_pull_output(), + south_yellow.into_push_pull_output(), + south_green.into_push_pull_output(), ), pedestrian_light: PedestrianLight::new( - gpio9.into_push_pull_output(), - gpio10.into_push_pull_output(), + pedestrian_red.into_push_pull_output(), + pedestrian_green.into_push_pull_output(), ), - button: gpio11.into_pull_up_input(), + button: pedestrian_button.into_pull_up_input(), button_state: false, } } diff --git a/src/main.rs b/src/main.rs index 9502925..e217e3f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,8 +34,6 @@ fn main() -> ! { display.print("Hello Pico"); let mut traffic_controller = TrafficController::new( - pins.gpio0, - pins.gpio1, pins.gpio2, pins.gpio3, pins.gpio4, @@ -46,6 +44,8 @@ fn main() -> ! { pins.gpio9, pins.gpio10, pins.gpio11, + pins.gpio12, + pins.gpio13, ); traffic_controller.phase_start = timer.get_counter().ticks(); traffic_controller.apply_phase(&PHASES[0]); diff --git a/src/phases.rs b/src/phases.rs index f05dc8e..e5c5124 100644 --- a/src/phases.rs +++ b/src/phases.rs @@ -1,5 +1,7 @@ use crate::lights::{PedestrianLightColor, TrafficLightColor}; +const PHASE_DURATION: u64 = 1_000_000; + pub struct Phase { pub duration: u64, pub main: TrafficLightColor, @@ -12,7 +14,7 @@ pub struct Phase { pub const PHASES: [Phase; 14] = [ Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::RedYellow, north: TrafficLightColor::Red, south: TrafficLightColor::Red, @@ -21,7 +23,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Green, north: TrafficLightColor::Red, south: TrafficLightColor::Red, @@ -30,7 +32,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Yellow, north: TrafficLightColor::Red, south: TrafficLightColor::Red, @@ -39,7 +41,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Red, south: TrafficLightColor::Red, @@ -48,7 +50,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::RedYellow, south: TrafficLightColor::Red, @@ -57,7 +59,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Green, south: TrafficLightColor::Red, @@ -66,7 +68,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Yellow, south: TrafficLightColor::Red, @@ -75,7 +77,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Red, south: TrafficLightColor::Red, @@ -84,7 +86,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Red, south: TrafficLightColor::RedYellow, @@ -93,7 +95,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Red, south: TrafficLightColor::Green, @@ -102,7 +104,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Red, south: TrafficLightColor::Yellow, @@ -111,7 +113,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Red, south: TrafficLightColor::Red, @@ -120,7 +122,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: true, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Red, south: TrafficLightColor::Red, @@ -129,7 +131,7 @@ pub const PHASES: [Phase; 14] = [ accepts_button_request: false, }, Phase { - duration: 500_000, + duration: PHASE_DURATION, main: TrafficLightColor::Red, north: TrafficLightColor::Red, south: TrafficLightColor::Red,