-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtm1650_xyclock.h
59 lines (48 loc) · 1.31 KB
/
tm1650_xyclock.h
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
#pragma once
#include <Wire.h>
#define SCL_PIN 12
#define SDA_PIN 13
class tm1650_component : public Component {
public:
void setup() override {
Wire.begin(SDA_PIN, SCL_PIN);
disp_updatecontrol();
}
void loop() override {}
void update(char *numbers, bool column) {
for (int i = 0; i < 4; i++) {
uint8_t segment = 0;
if (numbers[i] != ' ') {
segment = disp_num[((int)numbers[i]) - 0x30];
}
if (column && (i==2 || i==3)) {
segment |= 0x80;
}
Wire.beginTransmission(0x34 + i);
Wire.write(segment);
Wire.endTransmission();
}
}
void set_intensity(int brightness) {
if (brightness < 1)
brightness = 1;
if (brightness > 8)
brightness = 8;
disp_brightness = brightness;
disp_updatecontrol();
}
private:
uint8_t disp_brightness = 8; // 1 (min) to 8 (max)
uint8_t disp_mode7 = 0; // 0 (8 segments) or 1 (7 segments)
uint8_t disp_power = 1; // 0 (off) or 1 (on)
const uint8_t disp_num[10] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,
};
int disp_updatecontrol() {
int val =
((disp_brightness % 8) << 4) | (disp_mode7 << 3) | (disp_power << 0);
Wire.beginTransmission(0x24); // register 0x48 DIG1CTRL
Wire.write(val);
return Wire.endTransmission();
}
};