struct to hold display pins
This commit is contained in:
199
src/main.rs
199
src/main.rs
@@ -1,8 +1,13 @@
|
|||||||
#![no_std]
|
#![no_std]
|
||||||
#![no_main]
|
#![no_main]
|
||||||
|
|
||||||
use arduino_hal::prelude::*;
|
use arduino_hal::{
|
||||||
use embedded_hal::digital::OutputPin;
|
hal::port::{
|
||||||
|
PB0, PB1, PB2, PB3, PB4, PC0, PC1, PC2, PC3, PC4, PC5, PD2, PD3, PD4, PD5, PD6, PD7,
|
||||||
|
},
|
||||||
|
port::{mode::Output, Pin},
|
||||||
|
prelude::*,
|
||||||
|
};
|
||||||
|
|
||||||
// NOTE: 115200 @ 16MHz is 3.5% off, try 9600 or 1M if it causes issues (https://wormfood.net/avrbaudcalc.php)
|
// NOTE: 115200 @ 16MHz is 3.5% off, try 9600 or 1M if it causes issues (https://wormfood.net/avrbaudcalc.php)
|
||||||
const SERIAL_BAUD: u32 = 115200;
|
const SERIAL_BAUD: u32 = 115200;
|
||||||
@@ -43,89 +48,141 @@ enum SegmentState {
|
|||||||
Dot,
|
Dot,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct SegmentPins {
|
||||||
|
kd_seg_a: Pin<Output, PD5>,
|
||||||
|
kd_seg_b: Pin<Output, PB0>,
|
||||||
|
kd_seg_c: Pin<Output, PB2>,
|
||||||
|
kd_seg_d: Pin<Output, PC5>,
|
||||||
|
kd_seg_e: Pin<Output, PB1>,
|
||||||
|
kd_seg_f: Pin<Output, PD6>,
|
||||||
|
kd_seg_g: Pin<Output, PC0>,
|
||||||
|
kd_seg_dp: Pin<Output, PC4>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SegmentPins {
|
||||||
|
fn new(
|
||||||
|
kd_seg_a: Pin<Output, PD5>,
|
||||||
|
kd_seg_b: Pin<Output, PB0>,
|
||||||
|
kd_seg_c: Pin<Output, PB2>,
|
||||||
|
kd_seg_d: Pin<Output, PC5>,
|
||||||
|
kd_seg_e: Pin<Output, PB1>,
|
||||||
|
kd_seg_f: Pin<Output, PD6>,
|
||||||
|
kd_seg_g: Pin<Output, PC0>,
|
||||||
|
kd_seg_dp: Pin<Output, PC4>,
|
||||||
|
) -> SegmentPins {
|
||||||
|
let mut out = SegmentPins {
|
||||||
|
kd_seg_a,
|
||||||
|
kd_seg_b,
|
||||||
|
kd_seg_c,
|
||||||
|
kd_seg_d,
|
||||||
|
kd_seg_e,
|
||||||
|
kd_seg_f,
|
||||||
|
kd_seg_g,
|
||||||
|
kd_seg_dp,
|
||||||
|
};
|
||||||
|
|
||||||
|
out.set_off();
|
||||||
|
out
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_off(&mut self) {
|
||||||
|
self.kd_seg_a.set_high();
|
||||||
|
self.kd_seg_b.set_high();
|
||||||
|
self.kd_seg_c.set_high();
|
||||||
|
self.kd_seg_d.set_high();
|
||||||
|
self.kd_seg_e.set_high();
|
||||||
|
self.kd_seg_f.set_high();
|
||||||
|
self.kd_seg_g.set_high();
|
||||||
|
self.kd_seg_dp.set_high();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_a(&mut self, state: bool) {
|
||||||
|
if state {
|
||||||
|
self.kd_seg_a.set_low();
|
||||||
|
} else {
|
||||||
|
self.kd_seg_a.set_high();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct DispalyPins([Pin<Output>; 9]);
|
||||||
|
|
||||||
|
impl DispalyPins {
|
||||||
|
fn new(
|
||||||
|
kd_d1_1c: Pin<Output, PD2>,
|
||||||
|
kd_d2_5div: Pin<Output, PD3>,
|
||||||
|
kd_d3_6mul: Pin<Output, PD4>,
|
||||||
|
kd_d4_7up: Pin<Output, PC3>,
|
||||||
|
kd_d5_8e: Pin<Output, PC2>,
|
||||||
|
kd_d6_90: Pin<Output, PD7>,
|
||||||
|
kd_d7_2down: Pin<Output, PC1>,
|
||||||
|
kd_d8_3plus: Pin<Output, PB3>,
|
||||||
|
kd_d9_4min: Pin<Output, PB4>,
|
||||||
|
) -> DispalyPins {
|
||||||
|
DispalyPins([
|
||||||
|
kd_d1_1c.downgrade(),
|
||||||
|
kd_d2_5div.downgrade(),
|
||||||
|
kd_d3_6mul.downgrade(),
|
||||||
|
kd_d4_7up.downgrade(),
|
||||||
|
kd_d5_8e.downgrade(),
|
||||||
|
kd_d6_90.downgrade(),
|
||||||
|
kd_d7_2down.downgrade(),
|
||||||
|
kd_d8_3plus.downgrade(),
|
||||||
|
kd_d9_4min.downgrade(),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn scan(&mut self, mut segment: impl FnMut(usize) -> ()) {
|
||||||
|
for (no, d) in self.0.iter_mut().enumerate() {
|
||||||
|
d.set_high();
|
||||||
|
segment(no);
|
||||||
|
arduino_hal::delay_ms(100);
|
||||||
|
d.set_low();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[arduino_hal::entry]
|
#[arduino_hal::entry]
|
||||||
fn main() -> ! {
|
fn main() -> ! {
|
||||||
let dp = arduino_hal::Peripherals::take().unwrap();
|
let dp = arduino_hal::Peripherals::take().unwrap();
|
||||||
let pins = arduino_hal::pins!(dp);
|
let pins = arduino_hal::pins!(dp);
|
||||||
|
|
||||||
let mut led = pins.d13.into_output();
|
// let mut led = pins.d13.into_output();
|
||||||
let mut serial = arduino_hal::default_serial!(dp, pins, SERIAL_BAUD);
|
let mut serial = arduino_hal::default_serial!(dp, pins, SERIAL_BAUD);
|
||||||
|
|
||||||
ufmt::uwriteln!(&mut serial, "Hello from Arduino!").unwrap_infallible();
|
ufmt::uwriteln!(&mut serial, "Hello from Arduino!").unwrap_infallible();
|
||||||
|
|
||||||
// let mut kd_KN = pins..into_input();
|
// let mut kd_KN = pins..into_input();
|
||||||
// let mut kd_KO = *pins.a.into_output();
|
// let mut kd_KO = *pins.a.into_output();
|
||||||
let mut kd_d1_1c = pins.d2.into_output();
|
|
||||||
let mut kd_d2_5div = pins.d3.into_output();
|
|
||||||
let mut kd_d3_6mul = pins.d4.into_output();
|
|
||||||
let mut kd_d4_7up = pins.a3.into_output();
|
|
||||||
let mut kd_d5_8e = pins.a2.into_output();
|
|
||||||
let mut kd_d6_90 = pins.d7.into_output();
|
|
||||||
let mut kd_d7_2down = pins.a1.into_output();
|
|
||||||
let mut kd_d8_3plus = pins.d11.into_output();
|
|
||||||
let mut kd_d9_4min = pins.d12.into_output();
|
|
||||||
|
|
||||||
let mut kd_seg_a = pins.d5.into_output();
|
let mut dp = DispalyPins::new(
|
||||||
kd_seg_a.set_high();
|
pins.d2.into_output(),
|
||||||
let mut kd_seg_b = pins.d8.into_output();
|
pins.d3.into_output(),
|
||||||
kd_seg_b.set_high();
|
pins.d4.into_output(),
|
||||||
let mut kd_seg_c = pins.d10.into_output();
|
pins.a3.into_output(),
|
||||||
kd_seg_c.set_high();
|
pins.a2.into_output(),
|
||||||
let mut kd_seg_d = pins.a5.into_output();
|
pins.d7.into_output(),
|
||||||
kd_seg_d.set_high();
|
pins.a1.into_output(),
|
||||||
let mut kd_seg_e = pins.d9.into_output();
|
pins.d11.into_output(),
|
||||||
kd_seg_e.set_high();
|
pins.d12.into_output(),
|
||||||
let mut kd_seg_f = pins.d6.into_output();
|
);
|
||||||
kd_seg_f.set_high();
|
|
||||||
let mut kd_seg_g = pins.a0.into_output();
|
let mut seg = SegmentPins::new(
|
||||||
kd_seg_g.set_high();
|
pins.d5.into_output(),
|
||||||
let mut kd_seg_dp = pins.a4.into_output();
|
pins.d8.into_output(),
|
||||||
kd_seg_dp.set_high();
|
pins.d10.into_output(),
|
||||||
|
pins.a5.into_output(),
|
||||||
|
pins.d9.into_output(),
|
||||||
|
pins.d6.into_output(),
|
||||||
|
pins.a0.into_output(),
|
||||||
|
pins.a4.into_output(),
|
||||||
|
);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
for d in 1u8..=9 {
|
dp.scan(|no| {
|
||||||
match d {
|
seg.set_a(true);
|
||||||
1 => {
|
});
|
||||||
kd_d9_4min.set_low();
|
arduino_hal::delay_ms(200);
|
||||||
kd_d1_1c.set_high();
|
|
||||||
}
|
|
||||||
2 => {
|
|
||||||
kd_d1_1c.set_low();
|
|
||||||
kd_d2_5div.set_high();
|
|
||||||
}
|
|
||||||
3 => {
|
|
||||||
kd_d2_5div.set_low();
|
|
||||||
kd_d3_6mul.set_high();
|
|
||||||
}
|
|
||||||
4 => {
|
|
||||||
kd_d3_6mul.set_low();
|
|
||||||
kd_d4_7up.set_high();
|
|
||||||
}
|
|
||||||
5 => {
|
|
||||||
kd_d4_7up.set_low();
|
|
||||||
kd_d5_8e.set_high();
|
|
||||||
}
|
|
||||||
6 => {
|
|
||||||
kd_d5_8e.set_low();
|
|
||||||
kd_d6_90.set_high();
|
|
||||||
}
|
|
||||||
7 => {
|
|
||||||
kd_d6_90.set_low();
|
|
||||||
kd_d7_2down.set_high();
|
|
||||||
}
|
|
||||||
8 => {
|
|
||||||
kd_d7_2down.set_low();
|
|
||||||
kd_d8_3plus.set_high();
|
|
||||||
}
|
|
||||||
9 => {
|
|
||||||
kd_d8_3plus.set_low();
|
|
||||||
kd_d9_4min.set_high();
|
|
||||||
}
|
|
||||||
_ => unreachable!(),
|
|
||||||
};
|
|
||||||
kd_seg_g.set_low();
|
|
||||||
arduino_hal::delay_ms(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop {
|
// loop {
|
||||||
|
|||||||
Reference in New Issue
Block a user