Novo

Dependencies:   mbed

Fork of LukaIElmir by tim003 tim003

Committer:
tim003
Date:
Mon Jun 02 15:35:11 2014 +0000
Revision:
6:dd675b967b60
Parent:
5:654e3398c1ef
LIE26

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tim003 3:43648fa57d55 1 #include "mbed.h"
tim003 3:43648fa57d55 2 #include "MatrixSPI.h"
tim003 3:43648fa57d55 3 #include <string>
tim003 6:dd675b967b60 4
tim003 3:43648fa57d55 5 #ifndef DOTMATRIX_H
tim003 3:43648fa57d55 6 #define DOTMATRIX_H
tim003 3:43648fa57d55 7
tim003 3:43648fa57d55 8 enum ModPrikazivanja{scroll, char_by_char, live_input};
tim003 6:dd675b967b60 9 const char znakovi[66][6] =
tim003 6:dd675b967b60 10 {
tim003 6:dd675b967b60 11 {0, 0x7e, 0x11, 0x11, 0x7e, 0},//A
tim003 6:dd675b967b60 12 {0, 0x7e, 0x49, 0x49, 0x36, 0}, //B
tim003 6:dd675b967b60 13 {0, 0x3e, 0x41, 0x41, 0x22, 0}, //C
tim003 6:dd675b967b60 14 {0, 0x7f, 0x41, 0x41, 0x3e, 0}, //D
tim003 6:dd675b967b60 15 {0, 0x7f, 0x49, 0x49, 0x41, 0}, //E
tim003 6:dd675b967b60 16 {0, 0x7f, 0x09, 0x09, 0x01, 0}, //F
tim003 6:dd675b967b60 17 {0x3e, 0x41, 0x51, 0x32, 0x70, 0}, //G
tim003 6:dd675b967b60 18 {0, 0x7f, 0x08, 0x08, 0x7f, 0}, //H
tim003 6:dd675b967b60 19 {0, 0x41, 0x7f, 0x41, 0, 0}, //I
tim003 6:dd675b967b60 20 {0, 0x21, 0x41, 0x41, 0x3f, 0}, //J
tim003 6:dd675b967b60 21 {0, 0x7f, 0x08, 0x14, 0x63, 0}, //K
tim003 6:dd675b967b60 22 {0, 0x7f, 0x40, 0x40, 0x40, 0}, //L
tim003 6:dd675b967b60 23 {0x7f, 0x02, 0x0c, 0x02, 0x7f, 0}, //M
tim003 6:dd675b967b60 24 {0x7f, 0x04, 0x08, 0x10, 0x7f, 0}, //N
tim003 6:dd675b967b60 25 {0, 0x3e, 0x41, 0x41, 0x3e, 0}, //O
tim003 6:dd675b967b60 26 {0, 0x7f, 0x09, 0x09, 0x06, 0}, //P
tim003 6:dd675b967b60 27 {0x3e, 0x41, 0x51, 0x3e, 0x40, 0}, //Q
tim003 6:dd675b967b60 28 {0, 0x7f, 0x09, 0x09, 0x76, 0}, //R
tim003 6:dd675b967b60 29 {0, 0x26, 0x89, 0x89, 0x32, 0}, //S
tim003 6:dd675b967b60 30 {0x03, 0x01, 0x7f, 0x01, 0x03, 0}, //T
tim003 6:dd675b967b60 31 {0x1f, 0x20, 0x40, 0x40, 0x20, 0x1f}, //U
tim003 6:dd675b967b60 32 {0x1f, 0x20, 0x40, 0x20, 0x1f, 0}, //V
tim003 6:dd675b967b60 33 {0x3f, 0x40, 0x38, 0x40, 0x3f, 0}, //W
tim003 6:dd675b967b60 34 {0x63, 0x14, 0x08, 0x14, 0x63, 0}, //X
tim003 6:dd675b967b60 35 {0x07, 0x08, 0x70, 0x08, 0x07, 0}, //Y
tim003 6:dd675b967b60 36 {0x61, 0x51, 0x49, 0x45, 0x43, 0}, //Z
tim003 6:dd675b967b60 37 {0, 0x20, 0x54, 0x54, 0x78, 0}, //a
tim003 6:dd675b967b60 38 {0, 0x7f, 0x44, 0x44, 0x38, 0}, //b
tim003 6:dd675b967b60 39 {0, 0x38, 0x44, 0x44, 0x28, 0}, //c
tim003 6:dd675b967b60 40 {0, 0x38, 0x44, 0x44, 0x7f, 0}, //d
tim003 6:dd675b967b60 41 {0, 0x38, 0x54, 0x54, 0x18, 0}, //e
tim003 6:dd675b967b60 42 {0, 0xf8, 0x24, 0x24, 0x08, 0}, //f
tim003 6:dd675b967b60 43 {0, 0x98, 0xa4, 0xa4, 0x78, 0}, //g
tim003 6:dd675b967b60 44 {0, 0x7f, 0x04, 0x04, 0x78, 0}, //h
tim003 6:dd675b967b60 45 {0, 0x44, 0x7d, 0x40, 0, 0}, //i
tim003 6:dd675b967b60 46 {0, 0x40, 0x80, 0x88, 0x7a, 0}, //j
tim003 6:dd675b967b60 47 {0, 0x7f, 0x10, 0x28, 0x44, 0}, //k
tim003 6:dd675b967b60 48 {0, 0x41, 0x7f, 0x40, 0, 0}, //l
tim003 6:dd675b967b60 49 {0x7c, 0x04, 0x7c, 0x04, 0x78, 0}, //m
tim003 6:dd675b967b60 50 {0, 0x7c, 0x04, 0x04, 0x78, 0}, //n
tim003 6:dd675b967b60 51 {0, 0x38, 0x44, 0x44, 0x38, 0}, //o
tim003 6:dd675b967b60 52 {0, 0xfc, 0x24, 0x24, 0x18, 0}, //p
tim003 6:dd675b967b60 53 {0, 0x18, 0x24, 0x24, 0xfc, 0}, //q
tim003 6:dd675b967b60 54 {0, 0x7c, 0x08, 0x04, 0x04, 0}, //r
tim003 6:dd675b967b60 55 {0, 0x48, 0x54, 0x54, 0x24, 0}, //s
tim003 6:dd675b967b60 56 {0, 0x04, 0x3f, 0x44, 0, 0}, //t
tim003 6:dd675b967b60 57 {0, 0x3c, 0x40, 0x40, 0x7c, 0}, //u
tim003 6:dd675b967b60 58 {0x1c, 0x20, 0x40, 0x20, 0x1c, 0}, //v
tim003 6:dd675b967b60 59 {0x1c, 0x20, 0x10, 0x20, 0x1c, 0}, //w
tim003 6:dd675b967b60 60 {0x44, 0x28, 0x10, 0x28, 0x44, 0}, //x
tim003 6:dd675b967b60 61 {0, 0x9c, 0xa0, 0xa0, 0x7c, 0}, //y
tim003 6:dd675b967b60 62 {0x44, 0x64, 0x54, 0x4c, 0x44, 0}, //z
tim003 6:dd675b967b60 63 {0x3e, 0x51, 0x49, 0x45, 0x3e, 0}, //0
tim003 6:dd675b967b60 64 {0, 0x42, 0x7f, 0x40, 0, 0}, //1
tim003 6:dd675b967b60 65 {0x42, 0x61, 0x51, 0x49, 0x46, 0}, //2
tim003 6:dd675b967b60 66 {0, 0x22, 0x41, 0x49, 0x36, 0}, //3
tim003 6:dd675b967b60 67 {0x08, 0x0c, 0x0a, 0x7c, 0x08, 0}, //4
tim003 6:dd675b967b60 68 {0, 0x27, 0x45, 0x45, 0x39, 0}, //5
tim003 6:dd675b967b60 69 {0, 0x3e, 0x49, 0x49, 0x32, 0}, //6
tim003 6:dd675b967b60 70 {0x63, 0x11, 0x09, 0x05, 0x03, 0}, //7
tim003 6:dd675b967b60 71 {0, 0x36, 0x49, 0x49, 0x36, 0}, //8
tim003 6:dd675b967b60 72 {0, 0x26, 0x49, 0x49, 0x3e, 0}, //9
tim003 6:dd675b967b60 73 {0, 0xb0, 0x70, 0, 0, 0}, //,
tim003 6:dd675b967b60 74 {0, 0x60, 0x60, 0, 0, 0}, //.
tim003 6:dd675b967b60 75 {0x10,0x27,0x40,0x40,0x27,0x10}, // :-)
tim003 6:dd675b967b60 76 {0,0,0,0,0,0} // prazno
tim003 6:dd675b967b60 77 };
tim003 3:43648fa57d55 78
tim003 3:43648fa57d55 79 class DotMatrix{
tim003 3:43648fa57d55 80
tim003 3:43648fa57d55 81 public:
tim003 3:43648fa57d55 82 DotMatrix(PinName data_input = dp2, PinName clock = dp6, PinName loadcs = dp24)
tim003 3:43648fa57d55 83 :spi(data_input, clock, loadcs), turnedON(false), mod(scroll), char_trenutni(0),
tim003 6:dd675b967b60 84 char_offset(0), repeat(true), brzina_ms(1000), isAttached(false)
tim003 6:dd675b967b60 85 {
tim003 6:dd675b967b60 86 recenica = "Kokolo moje jedino.";
tim003 3:43648fa57d55 87 for(int i = 0; i < 8; i++) buffer[i] = 0;
tim003 3:43648fa57d55 88 }
tim003 3:43648fa57d55 89
tim003 3:43648fa57d55 90 void refresh();
tim003 3:43648fa57d55 91 void setIntensity(float jacina);
tim003 3:43648fa57d55 92 void setSpeed_ms(int ms);
tim003 3:43648fa57d55 93 void turnON();
tim003 3:43648fa57d55 94 void turnOFF();
tim003 3:43648fa57d55 95 void PromijeniRecenicu(string recenica){
tim003 6:dd675b967b60 96 this->recenica = " " + recenica;
tim003 6:dd675b967b60 97 char_trenutni = 0;
tim003 6:dd675b967b60 98 char_offset = 0;
tim003 3:43648fa57d55 99 }
tim003 3:43648fa57d55 100 void NadodajNaRecenicu(char c){
tim003 3:43648fa57d55 101 recenica += c;
tim003 3:43648fa57d55 102 }
tim003 3:43648fa57d55 103 void NadodajNaRecenicu(string str){
tim003 3:43648fa57d55 104 recenica += str;
tim003 3:43648fa57d55 105 }
tim003 3:43648fa57d55 106 void PromijeniMod(ModPrikazivanja mod){
tim003 3:43648fa57d55 107 if(this->mod != mod){
tim003 3:43648fa57d55 108 this->mod = mod;
tim003 3:43648fa57d55 109 attach();
tim003 3:43648fa57d55 110 }
tim003 3:43648fa57d55 111 }
tim003 3:43648fa57d55 112 ModPrikazivanja dajMod() const{
tim003 3:43648fa57d55 113 return mod;
tim003 3:43648fa57d55 114 }
tim003 4:ba24ce878e87 115 void SetRepeat(bool r){
tim003 4:ba24ce878e87 116 repeat = r;
tim003 4:ba24ce878e87 117 }
tim003 3:43648fa57d55 118
tim003 4:ba24ce878e87 119 bool GetRepeat() const{
tim003 4:ba24ce878e87 120 return repeat;
tim003 4:ba24ce878e87 121 }
tim003 3:43648fa57d55 122
tim003 5:654e3398c1ef 123 void setChar(char c, int offset)
tim003 5:654e3398c1ef 124 {
tim003 6:dd675b967b60 125 int index;
tim003 6:dd675b967b60 126 if(c >= 'A' && c <= 'Z')
tim003 6:dd675b967b60 127 index = c - 'A';
tim003 6:dd675b967b60 128 else if(c>= 'a' && c <='z')
tim003 6:dd675b967b60 129 index = c - 'a' + 26;
tim003 6:dd675b967b60 130 else if( c>= '0' && c <= '9')
tim003 6:dd675b967b60 131 index = c - '0' + 52;
tim003 6:dd675b967b60 132 else if (c== ',')
tim003 6:dd675b967b60 133 index = 62;
tim003 6:dd675b967b60 134 else if(c=='.')
tim003 6:dd675b967b60 135 index = 63;
tim003 6:dd675b967b60 136 else if(c==' ')
tim003 6:dd675b967b60 137 index = 65;
tim003 6:dd675b967b60 138 else
tim003 6:dd675b967b60 139 index = 64;
tim003 6:dd675b967b60 140
tim003 5:654e3398c1ef 141 if(offset < 0)
tim003 5:654e3398c1ef 142 {
tim003 6:dd675b967b60 143 for(int i = 0; i < 6 + offset; i++)
tim003 5:654e3398c1ef 144 {
tim003 6:dd675b967b60 145 buffer[i] = znakovi[index][i - offset];
tim003 5:654e3398c1ef 146 }
tim003 5:654e3398c1ef 147 }
tim003 5:654e3398c1ef 148 else
tim003 5:654e3398c1ef 149 {
tim003 6:dd675b967b60 150 for(int i = offset; i < 8 && i < 6 + offset; i++)
tim003 5:654e3398c1ef 151 {
tim003 6:dd675b967b60 152 buffer[i] = znakovi[index][i - offset];
tim003 5:654e3398c1ef 153 }
tim003 5:654e3398c1ef 154 }
tim003 5:654e3398c1ef 155 }
tim003 5:654e3398c1ef 156
tim003 5:654e3398c1ef 157 void displaySingleChar(char c){
tim003 6:dd675b967b60 158 setChar(c, 1);
tim003 5:654e3398c1ef 159 refresh();
tim003 5:654e3398c1ef 160 }
tim003 5:654e3398c1ef 161
tim003 6:dd675b967b60 162
tim003 6:dd675b967b60 163 void prikaziScroll(){
tim003 5:654e3398c1ef 164 if(char_trenutni == recenica.size()) refresh();
tim003 5:654e3398c1ef 165 else {
tim003 6:dd675b967b60 166 setChar(recenica[char_trenutni], char_offset);
tim003 6:dd675b967b60 167 if(char_trenutni < recenica.size() - 1)
tim003 6:dd675b967b60 168 setChar(recenica[char_trenutni + 1], char_offset + 7);
tim003 6:dd675b967b60 169
tim003 6:dd675b967b60 170 if(char_offset < -6){
tim003 6:dd675b967b60 171 char_offset = 1; // plus 7
tim003 6:dd675b967b60 172 char_trenutni++;
tim003 6:dd675b967b60 173 }
tim003 6:dd675b967b60 174 }
tim003 6:dd675b967b60 175
tim003 6:dd675b967b60 176 if(char_trenutni >= recenica.size() && repeat)
tim003 6:dd675b967b60 177 char_trenutni = 0;
tim003 6:dd675b967b60 178
tim003 6:dd675b967b60 179 }
tim003 6:dd675b967b60 180 void prikaziCBC(){
tim003 6:dd675b967b60 181 if(char_trenutni == recenica.size()) refresh();
tim003 6:dd675b967b60 182 else {//ako ne bude valjao refresh ne bude prazno prikazivali... skloniti else i dole >= u > promijeniti
tim003 5:654e3398c1ef 183 displaySingleChar(recenica[char_trenutni]);
tim003 6:dd675b967b60 184 char_trenutni++;
tim003 5:654e3398c1ef 185 }
tim003 6:dd675b967b60 186
tim003 6:dd675b967b60 187 if(char_trenutni >= recenica.size() && repeat)
tim003 6:dd675b967b60 188 char_trenutni = 0;
tim003 6:dd675b967b60 189 }
tim003 6:dd675b967b60 190
tim003 6:dd675b967b60 191 int brzina_ms;
tim003 6:dd675b967b60 192 string recenica;
tim003 6:dd675b967b60 193 int buffer[8];
tim003 6:dd675b967b60 194
tim003 6:dd675b967b60 195 private:
tim003 6:dd675b967b60 196 void attach();
tim003 6:dd675b967b60 197 void detach(){
tim003 6:dd675b967b60 198 if(isAttached) ticker.detach();
tim003 6:dd675b967b60 199 isAttached = false;
tim003 6:dd675b967b60 200 }
tim003 6:dd675b967b60 201
tim003 3:43648fa57d55 202
tim003 3:43648fa57d55 203 MatrixSPI spi;
tim003 3:43648fa57d55 204 bool turnedON;
tim003 3:43648fa57d55 205 ModPrikazivanja mod;
tim003 3:43648fa57d55 206 int char_trenutni, char_offset;
tim003 3:43648fa57d55 207 Ticker ticker;
tim003 6:dd675b967b60 208 bool isAttached;
tim003 3:43648fa57d55 209 bool repeat;
tim003 3:43648fa57d55 210 };
tim003 3:43648fa57d55 211
tim003 5:654e3398c1ef 212
tim003 6:dd675b967b60 213
tim003 6:dd675b967b60 214 void DotMatrix::refresh(){
tim003 6:dd675b967b60 215 for(int i = 0; i < 8; i++)
tim003 6:dd675b967b60 216 {
tim003 6:dd675b967b60 217 spi.sendCol(i, buffer[i]);
tim003 6:dd675b967b60 218 buffer[i] = 0;
tim003 6:dd675b967b60 219 }
tim003 6:dd675b967b60 220 }
tim003 6:dd675b967b60 221
tim003 6:dd675b967b60 222 void DotMatrix::setIntensity(float jacina){
tim003 6:dd675b967b60 223 if(jacina <= 0){
tim003 6:dd675b967b60 224 spi.turnOFF();
tim003 6:dd675b967b60 225 turnedON = false;
tim003 6:dd675b967b60 226
tim003 6:dd675b967b60 227
tim003 6:dd675b967b60 228 } else if(jacina >= 0.98){
tim003 6:dd675b967b60 229 if(!turnedON){
tim003 6:dd675b967b60 230 spi.turnON();
tim003 6:dd675b967b60 231 turnedON = true;
tim003 6:dd675b967b60 232 }
tim003 6:dd675b967b60 233
tim003 6:dd675b967b60 234 spi.sendSingle(MatrixSPI::intensity, 0x0f);
tim003 6:dd675b967b60 235 } else {
tim003 6:dd675b967b60 236 if(!turnedON){
tim003 6:dd675b967b60 237 spi.turnON();
tim003 6:dd675b967b60 238 turnedON = true;
tim003 6:dd675b967b60 239 }
tim003 6:dd675b967b60 240
tim003 6:dd675b967b60 241 int temp = jacina*0x0f;
tim003 6:dd675b967b60 242 spi.sendSingle(MatrixSPI::intensity, temp);
tim003 6:dd675b967b60 243 }
tim003 6:dd675b967b60 244 }
tim003 6:dd675b967b60 245
tim003 6:dd675b967b60 246 void DotMatrix::attach()
tim003 6:dd675b967b60 247 {
tim003 6:dd675b967b60 248 detach();
tim003 6:dd675b967b60 249 if(mod == scroll)
tim003 6:dd675b967b60 250 {
tim003 6:dd675b967b60 251 isAttached = true;
tim003 6:dd675b967b60 252 ticker.attach(this, &DotMatrix::prikaziScroll, brzina_ms/8);
tim003 6:dd675b967b60 253 } else if(mod == char_by_char){
tim003 6:dd675b967b60 254 isAttached = true;
tim003 6:dd675b967b60 255 ticker.attach(this, &DotMatrix::prikaziCBC, brzina_ms);
tim003 6:dd675b967b60 256 }
tim003 6:dd675b967b60 257 }
tim003 6:dd675b967b60 258
tim003 6:dd675b967b60 259 void DotMatrix::setSpeed_ms(int ms)
tim003 6:dd675b967b60 260 {
tim003 6:dd675b967b60 261 brzina_ms = ms;
tim003 6:dd675b967b60 262 ticker.detach();
tim003 6:dd675b967b60 263 attach();
tim003 6:dd675b967b60 264 }
tim003 6:dd675b967b60 265
tim003 6:dd675b967b60 266 void DotMatrix::turnON(){
tim003 6:dd675b967b60 267 if(!turnedON){
tim003 6:dd675b967b60 268 spi.turnON();
tim003 6:dd675b967b60 269 turnedON = true;
tim003 6:dd675b967b60 270
tim003 6:dd675b967b60 271 attach();
tim003 6:dd675b967b60 272 }
tim003 6:dd675b967b60 273 }
tim003 6:dd675b967b60 274
tim003 6:dd675b967b60 275 void DotMatrix::turnOFF(){
tim003 6:dd675b967b60 276 if(turnedON){
tim003 6:dd675b967b60 277 spi.turnOFF();
tim003 6:dd675b967b60 278 turnedON = false;
tim003 6:dd675b967b60 279
tim003 6:dd675b967b60 280 ticker.detach();
tim003 6:dd675b967b60 281 }
tim003 6:dd675b967b60 282 }
tim003 6:dd675b967b60 283
tim003 3:43648fa57d55 284 #endif //DotMatrix_h