Eric Wieser / LEDMatrix
Committer:
EricWieser
Date:
Mon Feb 13 22:19:58 2012 +0000
Revision:
0:1deae5ffe9ed
Child:
1:44819562ea31

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EricWieser 0:1deae5ffe9ed 1 #include "mbed.h"
EricWieser 0:1deae5ffe9ed 2 #include "Locations.h"
EricWieser 0:1deae5ffe9ed 3 #include "Matrix.h"
EricWieser 0:1deae5ffe9ed 4
EricWieser 0:1deae5ffe9ed 5 template <int WIDTH, int HEIGHT> class LEDMatrix : public Matrix<bool> {
EricWieser 0:1deae5ffe9ed 6 private:
EricWieser 0:1deae5ffe9ed 7 DigitalOut* _rows;
EricWieser 0:1deae5ffe9ed 8 DigitalOut* _colClk;
EricWieser 0:1deae5ffe9ed 9 DigitalOut* _colReset;
EricWieser 0:1deae5ffe9ed 10 int _usPerColumn;
EricWieser 0:1deae5ffe9ed 11
EricWieser 0:1deae5ffe9ed 12 //Column control
EricWieser 0:1deae5ffe9ed 13 void firstColumn() {
EricWieser 0:1deae5ffe9ed 14 *_colReset = 1;
EricWieser 0:1deae5ffe9ed 15 wait_us(10);
EricWieser 0:1deae5ffe9ed 16 *_colReset = 0;
EricWieser 0:1deae5ffe9ed 17 }
EricWieser 0:1deae5ffe9ed 18 void nextColumn() {
EricWieser 0:1deae5ffe9ed 19 *_colClk = 1;
EricWieser 0:1deae5ffe9ed 20 wait_us(10);
EricWieser 0:1deae5ffe9ed 21 *_colClk = 0;
EricWieser 0:1deae5ffe9ed 22 }
EricWieser 0:1deae5ffe9ed 23 void showColumn(int c) {
EricWieser 0:1deae5ffe9ed 24 bool* col = column(WIDTH - 1 - c);
EricWieser 0:1deae5ffe9ed 25 for(int i = 0; i < HEIGHT; i++) {
EricWieser 0:1deae5ffe9ed 26 _rows[i] = col[HEIGHT - 1 - i];
EricWieser 0:1deae5ffe9ed 27 }
EricWieser 0:1deae5ffe9ed 28 delete [] col;
EricWieser 0:1deae5ffe9ed 29 }
EricWieser 0:1deae5ffe9ed 30 void hideColumn(int c) {
EricWieser 0:1deae5ffe9ed 31 for(int i = 0; i < HEIGHT; i++) {
EricWieser 0:1deae5ffe9ed 32 _rows[i] = false;
EricWieser 0:1deae5ffe9ed 33 }
EricWieser 0:1deae5ffe9ed 34 }
EricWieser 0:1deae5ffe9ed 35 public:
EricWieser 0:1deae5ffe9ed 36 LEDMatrix(DigitalOut rows[HEIGHT], DigitalOut* colClk, DigitalOut* colReset, int usPerFrame) :
EricWieser 0:1deae5ffe9ed 37 Matrix<bool>(WIDTH, HEIGHT), _rows(rows), _colClk(colClk), _colReset(colReset) {
EricWieser 0:1deae5ffe9ed 38 clear();
EricWieser 0:1deae5ffe9ed 39 firstColumn();
EricWieser 0:1deae5ffe9ed 40 _usPerColumn = usPerFrame / WIDTH;
EricWieser 0:1deae5ffe9ed 41 }
EricWieser 0:1deae5ffe9ed 42
EricWieser 0:1deae5ffe9ed 43 void redraw() {
EricWieser 0:1deae5ffe9ed 44 firstColumn();
EricWieser 0:1deae5ffe9ed 45 for (int col = 0; col < WIDTH; col++) {
EricWieser 0:1deae5ffe9ed 46 nextColumn();
EricWieser 0:1deae5ffe9ed 47 showColumn(col);
EricWieser 0:1deae5ffe9ed 48 wait_us(_usPerColumn);
EricWieser 0:1deae5ffe9ed 49 hideColumn(col);
EricWieser 0:1deae5ffe9ed 50 }
EricWieser 0:1deae5ffe9ed 51 }
EricWieser 0:1deae5ffe9ed 52 };