result state, prompts, and error display handling
This commit is contained in:
@@ -5,6 +5,8 @@ use arduino_hal::{
|
||||
port::{mode::Output, Pin},
|
||||
};
|
||||
|
||||
use crate::DISPLAY_SEGMENTS;
|
||||
|
||||
pub struct SegmentPins {
|
||||
kd_seg_a: Pin<Output, PD5>,
|
||||
kd_seg_b: Pin<Output, PB0>,
|
||||
@@ -83,7 +85,10 @@ impl SegmentPins {
|
||||
pub enum SegmentState {
|
||||
Num(u8, bool),
|
||||
Minus,
|
||||
Prompt(bool),
|
||||
Dot,
|
||||
O,
|
||||
P,
|
||||
Off,
|
||||
}
|
||||
|
||||
@@ -162,7 +167,7 @@ impl SegmentState {
|
||||
seg.set_f();
|
||||
seg.set_g();
|
||||
}
|
||||
_ => panic!("Can't dispaly {}", no),
|
||||
_ => panic!("SegmentState::Num out of range"),
|
||||
}
|
||||
if *dp {
|
||||
seg.set_dp()
|
||||
@@ -170,12 +175,33 @@ impl SegmentState {
|
||||
}
|
||||
SegmentState::Minus => seg.set_g(),
|
||||
SegmentState::Dot => seg.set_dp(),
|
||||
SegmentState::Prompt(dot) => {
|
||||
seg.set_d();
|
||||
if *dot {
|
||||
seg.set_dp()
|
||||
}
|
||||
}
|
||||
SegmentState::O => {
|
||||
seg.set_a();
|
||||
seg.set_b();
|
||||
seg.set_c();
|
||||
seg.set_d();
|
||||
seg.set_e();
|
||||
seg.set_f();
|
||||
}
|
||||
SegmentState::P => {
|
||||
seg.set_a();
|
||||
seg.set_b();
|
||||
seg.set_g();
|
||||
seg.set_e();
|
||||
seg.set_f();
|
||||
}
|
||||
SegmentState::Off => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct DispalyState([SegmentState; 9]);
|
||||
pub struct DispalyState([SegmentState; DISPLAY_SEGMENTS]);
|
||||
|
||||
impl Default for DispalyState {
|
||||
fn default() -> DispalyState {
|
||||
@@ -214,11 +240,25 @@ impl DispalyState {
|
||||
}
|
||||
|
||||
impl DispalyState {
|
||||
fn set(&mut self, seg: [SegmentState; 9]) {
|
||||
fn set(&mut self, seg: [SegmentState; DISPLAY_SEGMENTS]) {
|
||||
self.0 = seg;
|
||||
}
|
||||
|
||||
fn busy(&mut self) {
|
||||
pub fn prompt(&mut self) {
|
||||
self.set([
|
||||
SegmentState::Prompt(false),
|
||||
SegmentState::Prompt(true),
|
||||
SegmentState::Prompt(false),
|
||||
SegmentState::Prompt(false),
|
||||
SegmentState::Prompt(false),
|
||||
SegmentState::Prompt(false),
|
||||
SegmentState::Prompt(false),
|
||||
SegmentState::Prompt(false),
|
||||
SegmentState::Prompt(false),
|
||||
])
|
||||
}
|
||||
|
||||
pub fn error(&mut self) {
|
||||
self.set([
|
||||
SegmentState::Off,
|
||||
SegmentState::Dot,
|
||||
@@ -231,6 +271,20 @@ impl DispalyState {
|
||||
SegmentState::Off,
|
||||
])
|
||||
}
|
||||
|
||||
pub fn operation(&mut self) {
|
||||
self.set([
|
||||
SegmentState::Off,
|
||||
SegmentState::Off,
|
||||
SegmentState::Off,
|
||||
SegmentState::Off,
|
||||
SegmentState::O,
|
||||
SegmentState::P,
|
||||
SegmentState::Off,
|
||||
SegmentState::Off,
|
||||
SegmentState::Off,
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
// Show data on segment display
|
||||
|
||||
Reference in New Issue
Block a user