result state, prompts, and error display handling

This commit is contained in:
2025-07-18 20:31:23 +01:00
parent 804964cb8d
commit d3fcb507a0
2 changed files with 149 additions and 43 deletions

View File

@@ -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