scroller for 4 digit display, rides on top of DigitDisplay and scrolls messages of arbitrary length

Dependencies:   DigitDisplay mbed

DisplayManager/DisplayManager.cpp

Committer:
mfiore
Date:
2014-09-07
Revision:
0:f8d65945b096

File content as of revision 0:f8d65945b096:

#include "mbed.h"
#include "DisplayManager.h"

DisplayManager::DisplayManager(PinName clk, PinName dio) : display(NULL) {
    display = new DigitDisplay(clk, dio);
}

DisplayManager::~DisplayManager() {
    if (display) delete display;
}

uint8_t DisplayManager::convert(uint8_t value) {
    switch (value) {
        case '0':
            return 0x3f;
        case '1':
            return 0x06;
        case '2':
            return 0x5b;
        case '3':
            return 0x4f;
        case '4':
            return 0x66;
        case '5':
            return 0x6d;
        case '6':
            return 0x7d;
        case '7':
            return 0x07;
        case '8':
            return 0x7f;
        case '9':
            return 0x6f;
        case 'a':
        case 'A':
            return 0x77;
        case 'b':
        case 'B':
            return 0x7c;
        case 'c':
        case 'C':
            return 0x39;
        case 'd':
        case 'D':
            return 0x5e;
        case 'e':
        case 'E':
            return 0x79;
        case 'f':
        case 'F':
            return 0x71;
        case 'g':
        case 'G':
            return 0x3d;
        case 'h':
        case 'H':
            return 0x76;
        case 'i':
        case 'I':
            return 0x30;
        case 'j':
        case 'J':
            return 0x1e;
        case 'k':
        case 'K':
            return 0x76;
        case 'l':
        case 'L':
            return 0x38;
        case 'm':
        case 'M':
            return 0x15;
        case 'n':
        case 'N':
            return 0x54;
        case 'o':
        case 'O':
            return 0x3f;
        case 'p':
        case 'P':
            return 0x73;
        case 'q':
        case 'Q':
            return 0x67;
        case 'r':
        case 'R':
            return 0x50;
        case 's':
        case 'S':
            return 0x6d;
        case 't':
        case 'T':
            return 0x78;
        case 'u':
        case 'U':
            return 0x3e;
        case 'v':
        case 'V':
            return 0x1c;
        case 'w':
        case 'W':
            return 0x2a;
        case 'x':
        case 'X':
            return 0x76;
        case 'y':
        case 'Y':
            return 0x6E;
        case 'z':
        case 'Z':
            return 0x5b;
        case '-':
            return 0x40;
        case '_':
            return 0x08;
            
        default:
            return 0x00;
    }
}

void DisplayManager::showMessage(char* message, int len) {
    int shifts = 0;
    char* cur = &message[0];
    char* back = &message[len - 1];
    uint8_t buf[4] = { 0x00, 0x00, 0x00, 0x00 };
    
    while (shifts <= len + 4) {
        buf[0] = buf[1];
        buf[1] = buf[2];
        buf[2] = buf[3];
        if (cur == back) {
            buf[3] = 0x00;
        } else {
            buf[3] = convert(*cur);
            cur++;
        }
        
        shifts++;
        display->writeRaw(buf);
        wait(0.5);
    }
    
    wait(1);
}

void DisplayManager::clear() {
    display->clear();
}