Skip to content

Commit

Permalink
optimize and fix display bug
Browse files Browse the repository at this point in the history
  • Loading branch information
gaetancollaud committed Apr 2, 2016
1 parent 95cacdd commit 4ec661b
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 93 deletions.
18 changes: 9 additions & 9 deletions arduino/wordclock/abstractlayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,46 +4,46 @@ AbstractLayout::AbstractLayout(){

}

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

void AbstractLayout::append(uint16_t** dest, uint16_t v){
void AbstractLayout::append(uint8_t** dest, uint8_t v){
**dest = v;
(*dest)++;
}

void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2){
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2){
this->append(dest, v1);
this->append(dest, v2);
}

void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3){
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3){
this->append(dest, v1, v2);
this->append(dest, v3);
}

void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4){
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4){
this->append(dest, v1, v2, v3);
this->append(dest, v4);
}

void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5){
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5){
this->append(dest, v1, v2, v3, v4);
this->append(dest, v5);
}

void AbstractLayout::append(uint16_t** dest, uint16_t v1, uint16_t v2, uint16_t v3, uint16_t v4, uint16_t v5, uint16_t v6){
void AbstractLayout::append(uint8_t** dest, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5, uint8_t v6){
this->append(dest, v1, v2, v3, v4, v5);
this->append(dest, v6);
}

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){
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){
this->append(dest, v1, v2, v3, v4, v5, v6);
this->append(dest, v7);
}

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){
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){
this->append(dest, v1, v2, v3, v4, v5, v6, v7);
this->append(dest, v8);
}
Expand Down
20 changes: 11 additions & 9 deletions arduino/wordclock/abstractlayout.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,26 @@

#include "arduino.h"

#define END_OF_LAYOUT 255

class AbstractLayout{
public:
AbstractLayout();

virtual void getLayout(uint8_t hour, uint8_t min, uint8_t sec, uint16_t*);
virtual void getLayout(uint8_t hour, uint8_t min, uint8_t sec, uint8_t*);

virtual char* getDebugLayout();

protected:

void append(uint16_t**, uint16_t);
void append(uint16_t**, uint16_t, uint16_t);
void append(uint16_t**, uint16_t, uint16_t, uint16_t);
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t);
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
void append(uint16_t**, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
void append(uint8_t**, uint8_t);
void append(uint8_t**, uint8_t, uint8_t);
void append(uint8_t**, uint8_t, uint8_t, uint8_t);
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t);
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
void append(uint8_t**, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);



Expand Down
37 changes: 20 additions & 17 deletions arduino/wordclock/display.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ void Display::draw() {
void Display::displayWordTime() {
uint8_t hour, minute, second;
this->timeManager->getTime(&hour, &minute, &second);
this->allLedsOff();

this->debug("Heure : ");
this->debug(hour);
Expand All @@ -59,6 +58,8 @@ void Display::displayWordTime() {
this->debugln();

this->layout->getLayout(hour, minute, second, this->displayBuffer);
this->allLedsOff();
this->addLedsOn();
this->writeLeds();
}

Expand All @@ -78,23 +79,25 @@ void Display::allLedsOff() {
}
}

void Display::writeLeds() {
//this->displayWordTime(1, 0, 0);
if (this->isDebugEnabled()) {
this->displayDebug();
}

void Display::addLedsOn(){
cRGB colorOn = this->convert(config->getColor());
this->allLedsOff();
uint16_t v;
uint16_t* ptr = this->displayBuffer;
int v;
uint8_t* ptr = this->displayBuffer;
do {
v = *ptr;
if (v != -1) {
v = (int)(*ptr);
if (v != END_OF_LAYOUT) {
this->leds->set_crgb_at(v, colorOn);
ptr++;
}
} while (v != -1);
} while (v != END_OF_LAYOUT);
}

void Display::writeLeds() {
//this->displayWordTime(1, 0, 0);
if (this->isDebugEnabled()) {
this->displayDebug();
}

this->leds->sync();
}
Expand Down Expand Up @@ -127,16 +130,16 @@ void Display::displayDebugLine(int nb) {

bool Display::isledOn(int x, int y) {
uint16_t index = this->getLedIndex(x, y);
uint16_t v;
uint16_t* ptr = this->displayBuffer;
int v;
uint8_t* ptr = this->displayBuffer;
do {
v = *ptr;
if (v != -1) {
v = (int)(*ptr);
if (v != END_OF_LAYOUT) {
if (v == index) {
return true;
}
}
} while (v != -1);
} while (v != END_OF_LAYOUT);

return false;
}
Expand Down
3 changes: 2 additions & 1 deletion arduino/wordclock/display.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class Display : public Debugable{
Config* config;
TimeManager* timeManager;

uint16_t displayBuffer[DISPLAY_BUFFER_SIZE];
uint8_t displayBuffer[DISPLAY_BUFFER_SIZE];
unsigned long accNextDraw;
bool blinkOn;
state_type currentState;
Expand All @@ -48,6 +48,7 @@ class Display : public Debugable{
void displayWordTime();
void displayDigitalTime();
void allLedsOff();
void addLedsOn();
void writeLeds();
void displayDebug();
void displayDebugLine(int);
Expand Down
112 changes: 56 additions & 56 deletions arduino/wordclock/layout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,130 +32,130 @@ Use the column in the following string to know a LED position:
IL EST UNEERTAUQ SIORTCINQSIX SEPTXIDFUEN TIUH ONZE DOUZE ERUEH XUED MOINS ET DIXQNIC-TGNIV QUART DEMI **** |||
*/
*/

Layout::Layout(){
Layout::Layout() {
}

void Layout::getLayout(uint8_t hour, uint8_t minute, uint8_t second, uint16_t* dest){
uint16_t** d = &dest;
void Layout::getLayout(uint8_t hour, uint8_t minute, uint8_t second, uint8_t* dest) {
uint8_t** d = &dest;

if(minute>30){
hour+=1;
if(hour>=24){
hour-=24;
}
}
if (minute > 30) {
hour += 1;
if (hour >= 24) {
hour -= 24;
}
}

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

switch(hour){
switch (hour) {
case 1:
case 13:
this->append(d, 9, 10, 11); // une
this->append(d, 9, 10, 11); // une
break;
case 2:
case 14:
this->append(d, 66, 67, 68, 69); // deux
this->append(d, 66, 67, 68, 69); // deux
break;
case 3:
case 15:
this->append(d, 19, 20, 21, 22, 23); // trois
this->append(d, 19, 20, 21, 22, 23); // trois
break;
case 4:
case 16:
this->append(d, 12, 13, 14, 15, 16, 17); // quatre
this->append(d, 12, 13, 14, 15, 16, 17); // quatre
break;
case 5:
case 17:
this->append(d, 24, 25, 26, 27); // cinq
this->append(d, 24, 25, 26, 27); // cinq
break;
case 6:
case 18:
this->append(d, 28, 29, 30); // six
this->append(d, 28, 29, 30); // six
break;
case 7:
case 19:
this->append(d, 32, 33, 34, 35); // sept
this->append(d, 32, 33, 34, 35); // sept
break;
case 8:
case 20:
this->append(d, 44, 45, 46, 47); // huit
this->append(d, 44, 45, 46, 47); // huit
break;
case 9:
case 21:
this->append(d, 39, 40, 41, 42); // neuf
this->append(d, 39, 40, 41, 42); // neuf
break;
case 10:
case 22:
this->append(d, 36, 37, 38); // dix
this->append(d, 36, 37, 38); // dix
break;
case 11:
case 23:
this->append(d, 49, 50, 51, 52); // onze
this->append(d, 49, 50, 51, 52); // onze
break;
case 12:
case 0:
this->append(d, 54, 55, 56, 57, 58); // douze
case 0:
this->append(d, 54, 55, 56, 57, 58); // douze
break;
}


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

minute /= 5;
switch(minute){
switch (minute) {
case 1:
this->append(d, 84, 85, 86, 87); // cinq
this->append(d, 84, 85, 86, 87); // cinq
break;
case 2:
this->append(d, 81, 82, 83); // dix
this->append(d, 81, 82, 83); // dix
break;
case 3:
this->append(d, 78, 79); // et
this->append(d, 96, 97, 98, 99, 100); // quart
this->append(d, 78, 79); // et
this->append(d, 96, 97, 98, 99, 100); // quart
break;
case 4:
this->append(d, 89, 90, 91, 92, 93); // vingt
this->append(d, 89, 90, 91, 92, 93); // vingt
break;
case 5:
this->append(d, 89, 90, 91, 92, 93); // vingt
this->append(d, 88); // -
this->append(d, 84, 85, 86, 87); // cinq
this->append(d, 89, 90, 91, 92, 93); // vingt
this->append(d, 88); // -
this->append(d, 84, 85, 86, 87); // cinq
break;
case 6:
this->append(d, 78, 79); // et
this->append(d, 102, 103, 104, 105); // demi
this->append(d, 78, 79); // et
this->append(d, 102, 103, 104, 105); // demi
break;
case 7:
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 89, 90, 91, 92, 93); // vingt
this->append(d, 88); // -
this->append(d, 84, 85, 86, 87); // cinq
break;
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 89, 90, 91, 92, 93); // vingt
this->append(d, 88); // -
this->append(d, 84, 85, 86, 87); // cinq
break;
case 8:
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 89, 90, 91, 92, 93); // vingt
break;
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 89, 90, 91, 92, 93); // vingt
break;
case 9:
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 96, 97, 98, 99, 100); // quart
break;
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 96, 97, 98, 99, 100); // quart
break;
case 10:
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 81, 82, 83); // dix
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 81, 82, 83); // dix
break;
case 11:
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 84, 85, 86, 87); // cinq
this->append(d, 72, 73, 74, 75, 76); // moins
this->append(d, 84, 85, 86, 87); // cinq
break;
}

this->append(d, -1);
this->append(d, END_OF_LAYOUT);
}

char* Layout::getDebugLayout(){
char* Layout::getDebugLayout() {
return "";
//return "il est unetrois quatrecinqsix septhuit neufdix onze douze deux heuremoins et dix vingt-cinqquart demi **** ";
//return "il est unetrois quatrecinqsix septhuit neufdix onze douze deux heuremoins et dix vingt-cinqquart demi **** ";
}
2 changes: 1 addition & 1 deletion arduino/wordclock/layout.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class Layout : public AbstractLayout{
* @param min the seconds [0,59]
* @param destination array containing the list of leds to light
*/
void getLayout(uint8_t hour, uint8_t min, uint8_t sec, uint16_t*);
void getLayout(uint8_t hour, uint8_t min, uint8_t sec, uint8_t*);

/**
* Return a debug string containing all case in a simple string, no separator
Expand Down

0 comments on commit 4ec661b

Please sign in to comment.