UdonLibrary
1.0.0
機械システム研究部 C++ ライブラリ
Toggle main menu visibility
読み取り中…
検索中…
一致する文字列を見つけられません
SegmentsLed.hpp
[詳解]
1
//
2
// 7セグメントLED
3
//
4
// Copyright (c) 2022 udonrobo
5
//
6
7
#pragma once
8
9
#ifdef ARDUINO
10
11
# include <
Udon/Stl/EnableSTL.hpp
>
12
# include <array>
13
# include <vector>
14
# include <stdint.h>
15
16
namespace
Udon
17
{
18
23
class
SegmentsLed
24
{
25
std::array<uint8_t, 7> cathode;
26
std::vector<uint8_t> anode;
27
std::array<uint8_t, 10> format;
28
29
uint8_t value;
// 表示する値
30
uint8_t digit;
// 表示中の桁
31
32
public
:
43
SegmentsLed(std::array<uint8_t, 7>&& cathode,
44
std::vector<uint8_t>&& anode,
45
std::array<uint8_t, 10>&& format = {
46
0b0111111,
// 0
47
0b0000110,
// 1
48
0b1011011,
// 2
49
0b1001111,
// 3
50
0b1100110,
// 4
51
0b1101101,
// 5
52
0b1111101,
// 6
53
0b0100111,
// 7
54
0b1111111,
// 8
55
0b1101111
// 9
56
})
57
: cathode(cathode)
58
, anode(std::move(anode))
59
, format(format)
60
{
61
}
62
64
void
begin()
65
{
66
for
(
auto
&& pin : cathode)
67
{
68
pinMode(pin, OUTPUT);
69
}
70
for
(
auto
&& pin : anode)
71
{
72
pinMode(pin, OUTPUT);
73
}
74
}
75
78
void
setValue(
int
num)
79
{
80
value = num;
81
}
82
84
void
show()
85
{
86
// ループ毎に1桁ずつ表示
87
const
uint8_t single =
static_cast<
uint8_t
>
(value / pow(10, digit)) % 10;
88
89
// 表示中の桁消灯
90
digitalWrite(anode.at(digit), HIGH);
91
92
digit++;
93
if
(digit >= anode.size())
94
{
95
digit = 0;
96
}
97
98
for
(uint8_t i = 0; i < cathode.size(); i++)
99
{
100
digitalWrite(cathode.at(i), not bitRead(format.at(single), i));
101
}
102
103
// 桁点灯
104
digitalWrite(anode.at(digit), LOW);
105
}
106
107
void
showNan()
108
{
109
for
(
auto
&& pin : anode)
110
{
111
digitalWrite(pin, HIGH);
112
}
113
114
// 中央のLEDのみ点灯させる
115
for
(
int
i = 0; i < 6; ++i)
116
{
117
digitalWrite(cathode.at(i), HIGH);
118
}
119
digitalWrite(cathode.at(6), LOW);
120
}
121
};
122
123
}
// namespace Udon
124
125
#endif
EnableSTL.hpp
Udon
Definition
Bit.hpp:12