Skip to content

Commit 4ec661b

Browse files
committed
optimize and fix display bug
1 parent 95cacdd commit 4ec661b

File tree

6 files changed

+99
-93
lines changed

6 files changed

+99
-93
lines changed

arduino/wordclock/abstractlayout.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,46 @@ AbstractLayout::AbstractLayout(){
44

55
}
66

7-
void AbstractLayout::getLayout(uint8_t hour, uint8_t minute, uint8_t sec, uint16_t* dest){
7+
void AbstractLayout::getLayout(uint8_t hour, uint8_t minute, uint8_t sec, uint8_t* dest){
88
this->append(&dest, 0, 1, 2, 3, -1);
99
}
1010

11-
void AbstractLayout::append(uint16_t** dest, uint16_t v){
11+
void AbstractLayout::append(uint8_t** dest, uint8_t v){
1212
**dest = v;
1313
(*dest)++;
1414
}
1515

16-
void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2){
16+
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2){
1717
this->append(dest, v1);
1818
this->append(dest, v2);
1919
}
2020

21-
void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3){
21+
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3){
2222
this->append(dest, v1, v2);
2323
this->append(dest, v3);
2424
}
2525

26-
void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4){
26+
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4){
2727
this->append(dest, v1, v2, v3);
2828
this->append(dest, v4);
2929
}
3030

31-
void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5){
31+
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5){
3232
this->append(dest, v1, v2, v3, v4);
3333
this->append(dest, v5);
3434
}
3535

36-
void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5, uint16_t v6){
36+
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6){
3737
this->append(dest, v1, v2, v3, v4, v5);
3838
this->append(dest, v6);
3939
}
4040

41-
void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5, uint16_t v6, uint16_t v7){
41+
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7){
4242
this->append(dest, v1, v2, v3, v4, v5, v6);
4343
this->append(dest, v7);
4444
}
4545

46-
void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5, uint16_t v6, uint16_t v7, uint16_t v8){
46+
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6, uint8_t v7, uint8_t v8){
4747
this->append(dest, v1, v2, v3, v4, v5, v6, v7);
4848
this->append(dest, v8);
4949
}

arduino/wordclock/abstractlayout.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,26 @@
33

44
#include "arduino.h"
55

6+
#define END_OF_LAYOUT 255
7+
68
class AbstractLayout{
79
public:
810
AbstractLayout();
911

10-
virtual void getLayout(uint8_t hour, uint8_t min, uint8_t sec, uint16_t*);
12+
virtual void getLayout(uint8_t hour, uint8_t min, uint8_t sec, uint8_t*);
1113

1214
virtual char* getDebugLayout();
1315

1416
protected:
1517

16-
void append(uint16_t**, uint16_t);
17-
void append(uint16_t**, uint16_t, uint16_t);
18-
void append(uint16_t**, uint16_t, uint16_t, uint16_t);
19-
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t);
20-
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
21-
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
22-
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
23-
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
18+
void append(uint8_t**, uint8_t);
19+
void append(uint8_t**, uint8_t, uint8_t);
20+
void append(uint8_t**, uint8_t, uint8_t, uint8_t);
21+
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t);
22+
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
23+
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
24+
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
25+
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
2426

2527

2628

arduino/wordclock/display.cpp

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ void Display::draw() {
4848
void Display::displayWordTime() {
4949
uint8_t hour, minute, second;
5050
this->timeManager->getTime(&hour, &minute, &second);
51-
this->allLedsOff();
5251

5352
this->debug("Heure : ");
5453
this->debug(hour);
@@ -59,6 +58,8 @@ void Display::displayWordTime() {
5958
this->debugln();
6059

6160
this->layout->getLayout(hour, minute, second, this->displayBuffer);
61+
this->allLedsOff();
62+
this->addLedsOn();
6263
this->writeLeds();
6364
}
6465

@@ -78,23 +79,25 @@ void Display::allLedsOff() {
7879
}
7980
}
8081

81-
void Display::writeLeds() {
82-
//this->displayWordTime(1, 0, 0);
83-
if (this->isDebugEnabled()) {
84-
this->displayDebug();
85-
}
86-
82+
void Display::addLedsOn(){
8783
cRGB colorOn = this->convert(config->getColor());
8884
this->allLedsOff();
89-
uint16_t v;
90-
uint16_t* ptr = this->displayBuffer;
85+
int v;
86+
uint8_t* ptr = this->displayBuffer;
9187
do {
92-
v = *ptr;
93-
if (v != -1) {
88+
v = (int)(*ptr);
89+
if (v != END_OF_LAYOUT) {
9490
this->leds->set_crgb_at(v, colorOn);
9591
ptr++;
9692
}
97-
} while (v != -1);
93+
} while (v != END_OF_LAYOUT);
94+
}
95+
96+
void Display::writeLeds() {
97+
//this->displayWordTime(1, 0, 0);
98+
if (this->isDebugEnabled()) {
99+
this->displayDebug();
100+
}
98101

99102
this->leds->sync();
100103
}
@@ -127,16 +130,16 @@ void Display::displayDebugLine(int nb) {
127130

128131
bool Display::isledOn(int x, int y) {
129132
uint16_t index = this->getLedIndex(x, y);
130-
uint16_t v;
131-
uint16_t* ptr = this->displayBuffer;
133+
int v;
134+
uint8_t* ptr = this->displayBuffer;
132135
do {
133-
v = *ptr;
134-
if (v != -1) {
136+
v = (int)(*ptr);
137+
if (v != END_OF_LAYOUT) {
135138
if (v == index) {
136139
return true;
137140
}
138141
}
139-
} while (v != -1);
142+
} while (v != END_OF_LAYOUT);
140143

141144
return false;
142145
}

arduino/wordclock/display.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Display : public Debugable{
3636
Config* config;
3737
TimeManager* timeManager;
3838

39-
uint16_t displayBuffer[DISPLAY_BUFFER_SIZE];
39+
uint8_t displayBuffer[DISPLAY_BUFFER_SIZE];
4040
unsigned long accNextDraw;
4141
bool blinkOn;
4242
state_type currentState;
@@ -48,6 +48,7 @@ class Display : public Debugable{
4848
void displayWordTime();
4949
void displayDigitalTime();
5050
void allLedsOff();
51+
void addLedsOn();
5152
void writeLeds();
5253
void displayDebug();
5354
void displayDebugLine(int);

arduino/wordclock/layout.cpp

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -32,130 +32,130 @@ Use the column in the following string to know a LED position:
3232
3333
IL EST UNEERTAUQ SIORTCINQSIX SEPTXIDFUEN TIUH ONZE DOUZE ERUEH XUED MOINS ET DIXQNIC-TGNIV QUART DEMI **** |||
3434
35-
*/
35+
*/
3636

37-
Layout::Layout(){
37+
Layout::Layout() {
3838
}
3939

40-
void Layout::getLayout(uint8_t hour, uint8_t minute, uint8_t second, uint16_t* dest){
41-
uint16_t** d = &dest;
40+
void Layout::getLayout(uint8_t hour, uint8_t minute, uint8_t second, uint8_t* dest) {
41+
uint8_t** d = &dest;
4242

43-
if(minute>30){
44-
hour+=1;
45-
if(hour>=24){
46-
hour-=24;
47-
}
48-
}
43+
if (minute > 30) {
44+
hour += 1;
45+
if (hour >= 24) {
46+
hour -= 24;
47+
}
48+
}
4949

50-
this->append(d, 0, 1); // il
51-
this->append(d, 4, 5, 6); // est
50+
this->append(d, 0, 1); // il
51+
this->append(d, 4, 5, 6); // est
5252

53-
switch(hour){
53+
switch (hour) {
5454
case 1:
5555
case 13:
56-
this->append(d, 9, 10, 11); // une
56+
this->append(d, 9, 10, 11); // une
5757
break;
5858
case 2:
5959
case 14:
60-
this->append(d, 66, 67, 68, 69); // deux
60+
this->append(d, 66, 67, 68, 69); // deux
6161
break;
6262
case 3:
6363
case 15:
64-
this->append(d, 19, 20, 21, 22, 23); // trois
64+
this->append(d, 19, 20, 21, 22, 23); // trois
6565
break;
6666
case 4:
6767
case 16:
68-
this->append(d, 12, 13, 14, 15, 16, 17); // quatre
68+
this->append(d, 12, 13, 14, 15, 16, 17); // quatre
6969
break;
7070
case 5:
7171
case 17:
72-
this->append(d, 24, 25, 26, 27); // cinq
72+
this->append(d, 24, 25, 26, 27); // cinq
7373
break;
7474
case 6:
7575
case 18:
76-
this->append(d, 28, 29, 30); // six
76+
this->append(d, 28, 29, 30); // six
7777
break;
7878
case 7:
7979
case 19:
80-
this->append(d, 32, 33, 34, 35); // sept
80+
this->append(d, 32, 33, 34, 35); // sept
8181
break;
8282
case 8:
8383
case 20:
84-
this->append(d, 44, 45, 46, 47); // huit
84+
this->append(d, 44, 45, 46, 47); // huit
8585
break;
8686
case 9:
8787
case 21:
88-
this->append(d, 39, 40, 41, 42); // neuf
88+
this->append(d, 39, 40, 41, 42); // neuf
8989
break;
9090
case 10:
9191
case 22:
92-
this->append(d, 36, 37, 38); // dix
92+
this->append(d, 36, 37, 38); // dix
9393
break;
9494
case 11:
9595
case 23:
96-
this->append(d, 49, 50, 51, 52); // onze
96+
this->append(d, 49, 50, 51, 52); // onze
9797
break;
9898
case 12:
99-
case 0:
100-
this->append(d, 54, 55, 56, 57, 58); // douze
99+
case 0:
100+
this->append(d, 54, 55, 56, 57, 58); // douze
101101
break;
102102
}
103103

104104

105-
this->append(d, 60, 61, 62, 63, 64); //heure
105+
this->append(d, 60, 61, 62, 63, 64); //heure
106106

107107
minute /= 5;
108-
switch(minute){
108+
switch (minute) {
109109
case 1:
110-
this->append(d, 84, 85, 86, 87); // cinq
110+
this->append(d, 84, 85, 86, 87); // cinq
111111
break;
112112
case 2:
113-
this->append(d, 81, 82, 83); // dix
113+
this->append(d, 81, 82, 83); // dix
114114
break;
115115
case 3:
116-
this->append(d, 78, 79); // et
117-
this->append(d, 96, 97, 98, 99, 100); // quart
116+
this->append(d, 78, 79); // et
117+
this->append(d, 96, 97, 98, 99, 100); // quart
118118
break;
119119
case 4:
120-
this->append(d, 89, 90, 91, 92, 93); // vingt
120+
this->append(d, 89, 90, 91, 92, 93); // vingt
121121
break;
122122
case 5:
123-
this->append(d, 89, 90, 91, 92, 93); // vingt
124-
this->append(d, 88); // -
125-
this->append(d, 84, 85, 86, 87); // cinq
123+
this->append(d, 89, 90, 91, 92, 93); // vingt
124+
this->append(d, 88); // -
125+
this->append(d, 84, 85, 86, 87); // cinq
126126
break;
127127
case 6:
128-
this->append(d, 78, 79); // et
129-
this->append(d, 102, 103, 104, 105); // demi
128+
this->append(d, 78, 79); // et
129+
this->append(d, 102, 103, 104, 105); // demi
130130
break;
131131
case 7:
132-
this->append(d, 72, 73, 74, 75, 76); // moins
133-
this->append(d, 89, 90, 91, 92, 93); // vingt
134-
this->append(d, 88); // -
135-
this->append(d, 84, 85, 86, 87); // cinq
136-
break;
132+
this->append(d, 72, 73, 74, 75, 76); // moins
133+
this->append(d, 89, 90, 91, 92, 93); // vingt
134+
this->append(d, 88); // -
135+
this->append(d, 84, 85, 86, 87); // cinq
136+
break;
137137
case 8:
138-
this->append(d, 72, 73, 74, 75, 76); // moins
139-
this->append(d, 89, 90, 91, 92, 93); // vingt
140-
break;
138+
this->append(d, 72, 73, 74, 75, 76); // moins
139+
this->append(d, 89, 90, 91, 92, 93); // vingt
140+
break;
141141
case 9:
142-
this->append(d, 72, 73, 74, 75, 76); // moins
143-
this->append(d, 96, 97, 98, 99, 100); // quart
144-
break;
142+
this->append(d, 72, 73, 74, 75, 76); // moins
143+
this->append(d, 96, 97, 98, 99, 100); // quart
144+
break;
145145
case 10:
146-
this->append(d, 72, 73, 74, 75, 76); // moins
147-
this->append(d, 81, 82, 83); // dix
146+
this->append(d, 72, 73, 74, 75, 76); // moins
147+
this->append(d, 81, 82, 83); // dix
148148
break;
149149
case 11:
150-
this->append(d, 72, 73, 74, 75, 76); // moins
151-
this->append(d, 84, 85, 86, 87); // cinq
150+
this->append(d, 72, 73, 74, 75, 76); // moins
151+
this->append(d, 84, 85, 86, 87); // cinq
152152
break;
153153
}
154154

155-
this->append(d, -1);
155+
this->append(d, END_OF_LAYOUT);
156156
}
157157

158-
char* Layout::getDebugLayout(){
158+
char* Layout::getDebugLayout() {
159159
return "";
160-
//return "il est unetrois quatrecinqsix septhuit neufdix onze douze deux heuremoins et dix vingt-cinqquart demi **** ";
160+
//return "il est unetrois quatrecinqsix septhuit neufdix onze douze deux heuremoins et dix vingt-cinqquart demi **** ";
161161
}

arduino/wordclock/layout.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class Layout : public AbstractLayout{
2020
* @param min the seconds [0,59]
2121
* @param destination array containing the list of leds to light
2222
*/
23-
void getLayout(uint8_t hour, uint8_t min, uint8_t sec, uint16_t*);
23+
void getLayout(uint8_t hour, uint8_t min, uint8_t sec, uint8_t*);
2424

2525
/**
2626
* Return a debug string containing all case in a simple string, no separator

0 commit comments

Comments
 (0)