1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
pub const DISPLAY_COUNT: usize = 4;
use crate::{TM1637Adapter, DisplayState, Brightness};
use crate::mappings::SegmentBits;
use alloc::string::String;
pub fn display_text_banner_in_loop(adapter: &mut TM1637Adapter, text: &str, sleep_fn: &dyn Fn()) {
adapter.set_display_state(DisplayState::ON);
adapter.set_brightness(Brightness::L7);
let data = text.replace(".", " ");
let data = TM1637Adapter::encode_string(&data);
let to = (data.len() - DISPLAY_COUNT) + 1;
loop {
for x in 0..to {
let data_slice = &data[x..(x + DISPLAY_COUNT)];
adapter.write_segments_raw(data_slice, 0);
sleep_fn();
}
}
}
pub fn display_current_time_in_loop(adapter: &mut TM1637Adapter,
tick_fn: &dyn Fn(),
time_fn: &dyn Fn() -> (String, String)) {
adapter.set_display_state(DisplayState::ON);
adapter.set_brightness(Brightness::L7);
let mut show_dots = false;
loop {
let (l, r): (String, String) = (time_fn)();
let mut data: [u8; DISPLAY_COUNT] = [
TM1637Adapter::encode_char(l.chars().nth(0).unwrap()),
TM1637Adapter::encode_char(l.chars().nth(1).unwrap()),
TM1637Adapter::encode_char(r.chars().nth(0).unwrap()),
TM1637Adapter::encode_char(r.chars().nth(1).unwrap()),
];
if show_dots {
data[1] = data[1] | SegmentBits::SegPoint as u8;
}
adapter.write_segments_raw(&data, 0);
(tick_fn)();
show_dots = !show_dots;
}
}
pub const STOPWATCH_MAX: u16 = 10_000;
pub fn display_stopwatch(adapter: &mut TM1637Adapter, sleep_fn: &dyn Fn(), to: u16, blink: bool) {
adapter.set_display_state(DisplayState::ON);
adapter.set_brightness(Brightness::L7);
let mut show_dot = false;
for i in 0..to {
let mut data = TM1637Adapter::encode_number(i);
if blink && show_dot {
data[1] |= SegmentBits::SegPoint as u8;
}
adapter.write_segments_raw(&data, 0);
show_dot = !show_dot;
sleep_fn();
}
}
pub fn display_timer(adapter: &mut TM1637Adapter, sleep_fn: &dyn Fn(), from_val: u16) {
adapter.set_display_state(DisplayState::ON);
adapter.set_brightness(Brightness::L7);
let mut show_dot = false;
for i in 0..(from_val + 1) {
let i = from_val - i;
let data = TM1637Adapter::encode_number(i);
adapter.write_segments_raw(&data, 0);
show_dot = !show_dot;
sleep_fn();
}
for i in 0..4 {
let data;
if i % 2 == 0 {
data = [0; 4];
} else {
data = [TM1637Adapter::encode_digit(0); 4];
}
adapter.write_segments_raw(&data, 0);
sleep_fn();
}
adapter.clear();
}