Last active
November 28, 2021 16:57
-
-
Save simonprickett/718e4a74fa278acf8fd510618c6be716 to your computer and use it in GitHub Desktop.
Raspberry Pi Traffic Lights Example in Rust
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::{thread, time}; | |
use std::sync::Arc; | |
use std::sync::atomic::{AtomicBool, Ordering}; | |
use ctrlc; | |
use rust_gpiozero::LED; | |
fn main() { | |
let keep_going = Arc::new(AtomicBool::new(true)); | |
let kg = keep_going.clone(); | |
let red = LED::new(9); | |
let amber = LED::new(10); | |
let green = LED::new(11); | |
ctrlc::set_handler(move || { | |
kg.store(false, Ordering::SeqCst); | |
}).unwrap(); | |
red.off(); | |
amber.off(); | |
green.off(); | |
while keep_going.load(Ordering::SeqCst) { | |
// Red | |
red.on(); | |
thread::sleep(time::Duration::from_secs(3)); | |
// Red and Yellow | |
amber.on(); | |
thread::sleep(time::Duration::from_secs(1)); | |
// Green | |
red.off(); | |
amber.off(); | |
green.on(); | |
thread::sleep(time::Duration::from_secs(5)); | |
// Yellow | |
green.off(); | |
amber.on(); | |
thread::sleep(time::Duration::from_secs(2)); | |
// Yellow off | |
amber.off(); | |
} | |
red.off(); | |
amber.off(); | |
green.off(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment