microbit-discovery/src/bin/turn.rs
2026-05-20 17:23:01 +03:00

55 lines
1.2 KiB
Rust

#![no_main]
#![no_std]
use cortex_m_rt::entry;
use embedded_hal::digital::InputPin;
use microbit::{Board, display::blocking::Display, hal::Timer};
use panic_halt as _;
const NEUTRAL: [[u8; 5]; 5] = [
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
];
const RIGHT: [[u8; 5]; 5] = [
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[1, 1, 1, 1, 1],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
];
const LEFT: [[u8; 5]; 5] = [
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[1, 1, 1, 1, 1],
[0, 0, 0, 1, 0],
[0, 0, 1, 0, 0],
];
#[entry]
fn main() -> ! {
let board = Board::take().unwrap();
let mut timer = Timer::new(board.TIMER0);
let mut display = Display::new(board.display_pins);
let mut button_a = board.buttons.button_a;
let mut button_b = board.buttons.button_b;
loop {
display.clear();
let a_pressed = button_a.is_low().unwrap();
let b_pressed = button_b.is_low().unwrap();
let display_out = match (a_pressed, b_pressed) {
(false, false) | (true, true) => NEUTRAL,
(true, false) => RIGHT,
(false, true) => LEFT,
};
display.show(&mut timer, display_out, 10);
}
}