-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAutoPlex7.cpp
More file actions
252 lines (233 loc) · 24.5 KB
/
Copy pathAutoPlex7.cpp
File metadata and controls
252 lines (233 loc) · 24.5 KB
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
#include "AutoPlex7.h"
uint8_t _displayIndex = 0; // The array index of the last display instance
void AutoPlex7::begin(uint8_t displayType, uint8_t digits, uint8_t digitPins[], uint8_t segmentPins[], bool multiplexing) {
// Decide based on the type of display what "on" represents
switch (displayType) {
case COMMON_ANODE: segmentOn = LOW; digitOn = HIGH; break;
case COMMON_CATHODE: segmentOn = HIGH; digitOn = LOW; break;
case CAWDDT: segmentOn = LOW; digitOn = LOW; break;
case CCWDDT: segmentOn = HIGH; digitOn = HIGH; break;
}
// Define "off" as the inverse of "on"
segmentOff = !segmentOn;
digitOff = !digitOn;
digitsClass = digits; // Store the number of digits on the display, inside the class
// Store display pinout within the class
for (uint8_t i = 0; i < digitsClass; i++) { digitPinsClass[i] = digitPins[i]; }
for (uint8_t i = 0; i < 8; i++) { segmentPinsClass[i] = segmentPins[i]; }
// Get segments from the pin array
A = segmentPinsClass[0];
B = segmentPinsClass[1];
C = segmentPinsClass[2];
D = segmentPinsClass[3];
E = segmentPinsClass[4];
F = segmentPinsClass[5];
G = segmentPinsClass[6];
DP = segmentPinsClass[7];
if (multiplexing == AUTOPLEX) {
manualplexing = false;
displays[_displayIndex++] = this; // Register new display instance
noInterrupts();
// Configure Timer0 for multiplexing
OCR0A = 0xAF;
TIMSK0 |= _BV(OCIE0A);
interrupts();
} else {
manualplexing = true;
}
// Configure display pins as outputs
for (uint8_t i = 0; i < digitsClass; i++) { pinMode(digitPinsClass[i], OUTPUT); }
for (uint8_t i = 0; i < 8; i++) { pinMode(segmentPinsClass[i], OUTPUT); }
clear(); // Ensure display is blank
}
size_t AutoPlex7::filterDecimals(const char* string) { // Used internally to count how many non-decimal characters are in a character array
size_t count = 0;
for (uint8_t i = 0; i < strlen(string); i++) {
if (string[i] != '.') count++;
}
return count;
}
void AutoPlex7::wipeDisplay() { // Used internally to turn the display off without clearing the buffer
for (uint8_t i = 0; i < digitsClass; i++) { digitalWrite(digitPinsClass[i], digitOff); }
for (uint8_t i = 0; i < 8; i++) { digitalWrite(segmentPinsClass[i], segmentOff); }
}
void AutoPlex7::showNumber(int32_t num) { // Set the seven segment display's buffer to an integer
noInterrupts();
char temporary[12];
itoa(num, temporary, 10);
if (strlen(temporary) > MAX_DIGITS) { buffer[0] = '\0'; } else { itoa(num, buffer, 10); }
interrupts();
}
void AutoPlex7::showNumberF(double num, uint8_t decimalPlaces) { // Set the seven segment display's buffer to a double/float
noInterrupts();
dtostrf(num, 0, decimalPlaces, buffer);
interrupts();
}
void AutoPlex7::print(const char* text) { // Set the seven segment display's buffer to a string
noInterrupts();
if (strlen(text) > MAX_DIGITS) { buffer[0] = '\0'; } else { strcpy(buffer, text); }
interrupts();
}
void AutoPlex7::print(int32_t num) {
showNumber(num);
}
void AutoPlex7::print(double num, uint8_t decimalPlaces) {
showNumberF(num, decimalPlaces);
}
void AutoPlex7::testDisplay(unsigned long ms = 0) {
uint8_t position = 0;
noInterrupts();
for (uint8_t i = 0; i < digitsClass; i++) {
buffer[position++] = '8'; buffer[position++] = '.';
}
buffer[position] = '\0';
interrupts();
unsigned long testStart = millis();
unsigned long lastPlex = millis();
while (millis() - testStart < ms) {
if (millis() - lastPlex >= 1 && manualplexing) { lastPlex = millis(); multiplex(); }
}
}
void AutoPlex7::clear() { // Empty the display buffer and deactivate all digits and segments
noInterrupts();
buffer[0] = '\0';
interrupts();
wipeDisplay();
}
void AutoPlex7::append(const char* text) { // Add a suffix to the current display contents
noInterrupts();
if (strlen(buffer) + strlen(text) + 1 > (MAX_DIGITS * 2)) { interrupts(); return; } // Don't add suffix if the current contents + suffix contain more characters than the library supports
uint8_t i = 0;
while (buffer[i] != '\0') { i++; } // Find the number of indexes before termination
for (uint8_t u = 0; text[u] != '\0'; u++) { // Add the suffix
buffer[i++] = text[u];
}
buffer[i] = '\0'; // Terminate string
interrupts();
}
void AutoPlex7::append(int32_t num) { // Add a suffix to the current display contents
noInterrupts();
char string[(MAX_DIGITS * 2) + 1];
itoa(num, string, 10);
if (strlen(buffer) + strlen(string) + 1 > (MAX_DIGITS * 2)) { interrupts(); return; } // Don't add suffix if the current contents + suffix contain more characters than the library supports
uint8_t i = 0;
while (buffer[i] != '\0') { i++; } // Find the number of indexes before termination
for (uint8_t u = 0; string[u] != '\0'; u++) { // Add the suffix
buffer[i++] = string[u];
}
buffer[i] = '\0'; // Terminate string
interrupts();
}
void AutoPlex7::append(double num, uint8_t decimalPlaces) { // Add a suffix to the current display contents
noInterrupts();
char string[(MAX_DIGITS * 2) + 1];
dtostrf(num, 0, decimalPlaces, string);
if (strlen(buffer) + strlen(string) + 1 > (MAX_DIGITS * 2)) { interrupts(); return; } // Don't add suffix if the current contents + suffix contain more characters than the library supports
uint8_t i = 0;
while (buffer[i] != '\0') { i++; } // Find the number of indexes before termination
for (uint8_t u = 0; string[u] != '\0'; u++) { // Add the suffix
buffer[i++] = string[u];
}
buffer[i] = '\0'; // Terminate string
interrupts();
}
void AutoPlex7::multiplex() { // Render the buffer onto the screen
if (buffer[0] == '\0') { // If string empty...
wipeDisplay(); // Disable all digits and segments on the display
return; // Do nothing else, return
}
if (currentDigit >= strlen(buffer)) { currentDigit = 0; displayPosition = 0; } // Return to the start of the string when the end is reached
wipeDisplay(); // Ensure display is blank before rendering a character
if (buffer[currentDigit] == '.') { currentDigit++; return; } // If current character is a decimal, move on
digitalWrite(digitPinsClass[(displayPosition + (digitsClass - filterDecimals(buffer)))], digitOn); // Right align the text on the display
for(uint8_t i = 0; i < digitsClass; i++){if(i != (displayPosition + (digitsClass - filterDecimals(buffer)))){digitalWrite(digitPinsClass[i], digitOff);}}
switch(buffer[currentDigit]) { // Render the current character
case '0': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case '1': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case '2': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case '3': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case '4': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case '5': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case '6': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case '7': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case '8': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case '9': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case '-': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case '_': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case '/': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case '|': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case '(': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case ')': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case '[': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case ']': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case '{': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case '}': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case '^': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case '*': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case '?': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case '=': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case ',': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case 'A': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'a': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case 'B': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'b': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'C': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'c': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case 'D': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'd': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case 'E': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'e': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'F': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'f': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'G': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'g': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'H': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'h': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'I': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'i': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case 'J': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case 'j': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case 'K': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'k': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'L': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'l': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'M': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case 'm': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case 'N': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'n': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case 'O': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'o': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case 'P': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'p': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'Q': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'q': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'R': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'r': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case 'S': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 's': digitalWrite(A, segmentOn); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'T': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 't': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'U': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'u': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case 'V': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'v': digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
case 'W': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'w': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOff); break;
case 'X': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'x': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOff); digitalWrite(E, segmentOn); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'Y': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'y': digitalWrite(A, segmentOff); digitalWrite(B, segmentOn); digitalWrite(C, segmentOn); digitalWrite(D, segmentOn); digitalWrite(E, segmentOff); digitalWrite(F, segmentOn); digitalWrite(G, segmentOn); break;
case 'Z': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
case 'z': digitalWrite(A, segmentOn); digitalWrite(B, segmentOn); digitalWrite(C, segmentOff); digitalWrite(D, segmentOn); digitalWrite(E, segmentOn); digitalWrite(F, segmentOff); digitalWrite(G, segmentOn); break;
default: digitalWrite(A, segmentOff); digitalWrite(B, segmentOff); digitalWrite(C, segmentOff); digitalWrite(D, segmentOff); digitalWrite(E, segmentOff); digitalWrite(F, segmentOff); digitalWrite(G, segmentOff); break;
}
if (currentDigit + 1 < strlen(buffer) && buffer[currentDigit + 1] == '.') { digitalWrite(DP, segmentOn); } // If next character is a decimal, activate the DP on this digit
displayPosition++; // Increase the counter that corresponds to physical display position
if (currentDigit <= strlen(buffer)) { currentDigit++; } // Move on to the next digit when the next cycle is reached
}
AutoPlex7* AutoPlex7::displays[MAX_DISPLAYS] = { nullptr };
ISR(TIMER0_COMPA_vect) {
for (uint8_t i = 0; i < _displayIndex; i++) {
AutoPlex7::displays[i]->multiplex();
}
}