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
#![no_std]
use embedded_hal::digital::OutputPin;
pub enum Color {
Red,
Green,
Blue,
Yellow,
Cyan,
Magenta,
White,
Black,
}
pub struct RGB<R, G, B> {
red: R,
green: G,
blue: B,
}
impl<R, G, B> RGB<R, G, B>
where
R: OutputPin,
G: OutputPin,
B: OutputPin,
{
pub fn new(red: R, green: G, blue: B) -> RGB<R, G, B> {
RGB { red, green, blue }
}
pub fn set_color(&mut self, color: Color) {
match color {
Color::Red => {
self.red.set_low();
self.green.set_high();
self.blue.set_high();
}
Color::Green => {
self.red.set_high();
self.green.set_low();
self.blue.set_high();
}
Color::Blue => {
self.red.set_high();
self.green.set_high();
self.blue.set_low();
}
Color::Yellow => {
self.red.set_low();
self.green.set_low();
self.blue.set_high();
}
Color::Cyan => {
self.red.set_high();
self.green.set_low();
self.blue.set_low();
}
Color::Magenta => {
self.red.set_low();
self.green.set_high();
self.blue.set_low();
}
Color::White => {
self.red.set_low();
self.green.set_low();
self.blue.set_low();
}
Color::Black => {
self.red.set_high();
self.green.set_high();
self.blue.set_high();
}
}
}
}