-
Notifications
You must be signed in to change notification settings - Fork 0
/
FutabaVFD.h
141 lines (120 loc) · 3.96 KB
/
FutabaVFD.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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/**
* Library to drive Futaba VFD displays
*
* @author Aleksandr.ru
* @link http://aleksandr.ru
*/
#include <Arduino.h>
#ifndef FutabaVFD_h
#define FutabaVFD_h
#ifndef VFD_SPI_DIN
#define VFD_SPI_DIN 11 // DA SDI SPI data input
#endif
#ifndef VFD_SPI_CLK
#define VFD_SPI_CLK 13 // CK CLK SPI clock
#endif
#ifndef VFD_SPI_CS
#define VFD_SPI_CS 10 // CS SPI chip select
#endif
#define VFD_DELAY_TCSCP 1
#define VFD_DELAY_TCPCS 1
#define VFD_DELAY_TDOFF 2
#define VFD_DELAY_TCSW 1
#define VFD_6 0x05
#define VFD_8 0x07
#define VFD_16 0x0f
#define VFD_MIN_BRIGHTNESS 0x01 // 0x01 min
#define VFD_MAX_BRIGHTNESS 0xf0 // 0xF0 max
class FutabaVFD {
public:
static const unsigned char font_bars[][5];
static const unsigned char font_digits[][5];
/**
* Construct a new Futaba VFD object
*
* @param digits VFD_x constant
* @param cs CS SPI chip select
*/
FutabaVFD(uint8_t digits, uint8_t cs);
/**
* Construct a new Futaba VFD object
*
* @param digits VFD_x constant
* @param cs CS SPI chip select
* @param reset The reset of the RS VFD screen is active at low level. It is pulled high/no reset during normal use because the module has a built-in RC hardware reset circuit.
* @param en EN VFD module power supply is partially enabled. EN is enabled at high level. It is recommended to send the VFD initialization command more than 100ms after setting it high to avoid issuing commands before the module power supply is stable. If this function is not used, , direct VCC short circuit/no EN is because the module EN and VCC are already internally linked.
*/
FutabaVFD(uint8_t digits, uint8_t cs, uint8_t reset, uint8_t en);
/**
* @brief Show test screen
*
*/
void test();
/**
* Set brightness
*
* @param level between VFD_MIN_BRIGHTNESS and VFD_MAX_BRIGHTNESS
*/
void brightness(uint8_t level);
/**
* Clear screen (write spaces)
*
*/
void clear();
/**
* Print a character at the specified position (user-defined, all in CG-ROM)
*
* @param x position
* @param chr character encoding to be displayed
*/
void writeOneChar(uint8_t x, unsigned char chr);
/**
* Print a string at the specified position
* (Only applicable to English, punctuation, numbers)
*
* @param x position
* @param str string to be displayed
*/
void writeStr(uint8_t x, const char *str);
/**
* Print a string at the specified position
* (F macro friendly)
*
* @param x position
* @param str string to be displayed
*/
void writeStr(uint8_t x, const __FlashStringHelper *s);
/**
* Load custom characters into RAM
*
* @param x position in ram (0-7)
* @param n number of chars to load from *s
* @param s character font to be displayed
*/
void loadUserFont(uint8_t y, uint8_t n, const unsigned char *s);
/**
* Print custom characters at the specified position
*
* @param x position
* @param y there is ROOM position (0-7)
* @param s character font to be displayed
*/
void writeUserFont(uint8_t x, uint8_t y, const unsigned char *s);
/**
* Translate cyrilic unicode string to VFD-compatible string
*
* @param str
* @return char*
*/
char* translate(const char *str);
private:
uint8_t _digits;
uint8_t _pin_cs;
void vfd_spi_start();
void vfd_spi_stop();
void vfd_spi_write(unsigned char w_data);
void vfd_command(unsigned char c0);
void vfd_command(unsigned char c0, unsigned char c1);
void vfd_show();
};
#endif