FRA221_2015 / Mbed 2 deprecated Project_B13_RGBmatrix_slave

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "iteadstudio_colourshield.h"
00003 uint8_t frame[8][8][3]= {0};
00004 char mode = '1';
00005 char read = '0';
00006 char readon,readi,readj;
00007 char trig = '0';
00008 char trigkey;
00009 uint8_t keyarray[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
00010 DigitalIn usrin(PC_13);
00011 inline void midicon_display(uint8_t array[4][4],uint8_t BGR_col_map[4][4][3]);
00012 inline void midi_rythm_display(uint8_t BGR_col_map88[8][8][3]);
00013 Serial master(PA_11,PA_12);
00014 Serial pc(USBTX, USBRX);
00015 Timer timer;
00016 Timer timer2;
00017 int scount;
00018 
00019 
00020 int begin;
00021 void callback()
00022 {
00023     // Note: you need to actually read from the serial to clear the RX interrupt
00024     if(pc.getc()=='#') {
00025         mode = pc.getc();
00026         pc.putc(mode);
00027     }
00028 }
00029 void callbackmaster()
00030 {
00031     // Note: you need to actually read from the serial to clear the RX interrupt
00032     read =master.getc();
00033     if(read=='#') {
00034         mode = master.getc();
00035         pc.putc(mode);
00036     } else if(read == '$') {
00037         //pc.putc(read);
00038         readon = master.getc();
00039         //pc.putc(readon);
00040         readi=master.getc();
00041         //pc.putc(readi);
00042         readj=master.getc();
00043         //pc.putc(readj);
00044         //pc.putc('\n');
00045         if(readon=='1') {
00046             keyarray[3-(readj-'0')][(readi-'0')] =1;
00047         }
00048         if(readon=='0') {
00049             //pc.putc('X');
00050             keyarray[3-(readj-'0')][readi-'0'] = 0;
00051         }
00052     } else if(read == '*') {
00053         trig ='1';
00054         pc.putc('!');
00055         trigkey = master.getc();
00056         pc.putc(trigkey);
00057         pc.putc('\n');
00058     } else {
00059         pc.putc('-');
00060         pc.putc(read);
00061         pc.putc('-');
00062         pc.putc('\n');
00063     }
00064 }
00065 int main()
00066 {
00067     timer.start();
00068     pc.baud(115200);
00069     pc.attach(&callback);
00070     master.baud(115200);
00071     master.attach(&callbackmaster);
00072 
00073     char wb[3]= {100,100,100};
00074     INITRGB(wb);
00075     float r,g,b;
00076     //float HSV[3];
00077 
00078     while(1) {
00079         if(mode=='0') {
00080             for(int i =0; i<8; i++) {
00081                 for(int j= 0; j<8; j++) {
00082                     HSVtoRGB(&r,&g,&b,i*j*360/49,1,1);
00083                     frame[i][j][0]=(uint8_t)(b*230);
00084                     frame[i][j][1]=(uint8_t)(g*255);
00085                     frame[i][j][2]=(uint8_t)(r*155);
00086 
00087                 }
00088             }
00089             while(mode == '0') {
00090                 sendframe(frame);
00091                 displayRGB();
00092 
00093 
00094             }
00095         }
00096         if(mode=='1') {
00097             //rainbow keymap
00098 
00099             uint8_t bgr_col_map[4][4][3];
00100 
00101             int key = 0;
00102             for(int i=0 ; i<4; i++) {
00103                 for(int j=0 ; j<4; j++) {
00104                     HSVtoRGB(&r,&g,&b,key*360/15,1,1);
00105                     bgr_col_map[j][i][0] = (uint8_t)(b*230);
00106                     bgr_col_map[j][i][1] = (uint8_t)(g*255);
00107                     bgr_col_map[j][i][2] = (uint8_t)(r*155);
00108                     key++;
00109                 }
00110             }
00111 
00112             while(mode == '1') {
00113                 midicon_display(keyarray,bgr_col_map);
00114             }
00115 
00116         } else if(mode=='2') {
00117             uint8_t rythm_col_map[8][8][3];
00118             //first col
00119             for(int i = 0; i<2; i++) {
00120                 for(int j =0; j<6; j++) {
00121                     HSVtoRGB(&r,&g,&b,0,0,1);
00122                     rythm_col_map[i][j][0]=(uint8_t)(b*230);
00123                     rythm_col_map[i][j][1]=(uint8_t)(g*255);
00124                     rythm_col_map[i][j][2]=(uint8_t)(r*155);
00125                 }
00126             }
00127             //second col
00128             for(int i = 2; i<4; i++) {
00129                 for(int j =0; j<6; j++) {
00130                     HSVtoRGB(&r,&g,&b,0,0,1);
00131                     rythm_col_map[i][j][0]=(uint8_t)(b*230);
00132                     rythm_col_map[i][j][1]=(uint8_t)(g*255);
00133                     rythm_col_map[i][j][2]=(uint8_t)(r*155);
00134                 }
00135             }
00136             //third col
00137             for(int i = 4; i<6; i++) {
00138                 for(int j =0; j<6; j++) {
00139                     HSVtoRGB(&r,&g,&b,0,0,1);
00140                     rythm_col_map[i][j][0]=(uint8_t)(b*230);
00141                     rythm_col_map[i][j][1]=(uint8_t)(g*255);
00142                     rythm_col_map[i][j][2]=(uint8_t)(r*155);
00143                 }
00144             }
00145             //last col
00146             for(int i = 6; i<8; i++) {
00147                 for(int j =0; j<6; j++) {
00148                     HSVtoRGB(&r,&g,&b,0,0,1);
00149                     rythm_col_map[i][j][0]=(uint8_t)(b*230);
00150                     rythm_col_map[i][j][1]=(uint8_t)(g*255);
00151                     rythm_col_map[i][j][2]=(uint8_t)(r*155);
00152                 }
00153             }
00154             //allbutton
00155             for(int i = 0; i<8; i++) {
00156                 for(int j =6; j<8; j++) {
00157                     HSVtoRGB(&r,&g,&b,0,0,1);
00158                     rythm_col_map[i][j][0]=(uint8_t)(b*230);
00159                     rythm_col_map[i][j][1]=(uint8_t)(g*255);
00160                     rythm_col_map[i][j][2]=(uint8_t)(r*155);
00161                 }
00162             }
00163 
00164             uint8_t canvas[8][8][3];
00165             //int velocity_ms = 100;
00166             uint8_t padobject[4][6][2] = {0}; //col,maxnumber of obj,avalibility,pos
00167             int i2;
00168             memcpy(canvas,rythm_col_map,sizeof(canvas));
00169             while(mode == '2') {
00170 
00171 
00172 
00173 
00174                 if(trig=='1') {
00175                     memcpy(canvas,rythm_col_map,sizeof(canvas));
00176                     trig='0';
00177                     for(int i = 0 ; i<6; i++) {
00178                         if(trigkey-'0'!=0)
00179                             if(padobject[trigkey-'0'-1][i][0]==0) {
00180                                 padobject[trigkey-'0'-1][i][0]=1;
00181                                 break;
00182                             }
00183                     }
00184                     for(int i =0; i<4; i++) {
00185                         for(int j= 0; j<6; j++) {
00186                             if(padobject[i][j][0]==1) {
00187                                 if(padobject[i][j][1]>5) {
00188                                     padobject[i][j][0] = 0;
00189                                     padobject[i][j][1] = 0;
00190                                 } else {
00191                                     //pc.putc('#');
00192                                     i2 = i*2;
00193                                     canvas[i2][padobject[i][j][1]][0]=(uint8_t)(230);
00194                                     canvas[i2][padobject[i][j][1]][1]=(uint8_t)(204);
00195                                     canvas[i2][padobject[i][j][1]][2]=(uint8_t)(0);
00196                                     canvas[i2+1][padobject[i][j][1]][0]=(uint8_t)(230);
00197                                     canvas[i2+1][padobject[i][j][1]][1]=(uint8_t)(204);
00198                                     canvas[i2+1][padobject[i][j][1]][2]=(uint8_t)(0);
00199                                     padobject[i][j][1]++;
00200                                 }
00201                             }
00202                         }
00203                     }
00204                 }
00205                 sendframe(canvas);
00206                 displayRGB();
00207             }
00208         }
00209     }
00210 }
00211 inline void midicon_display(uint8_t array[4][4],uint8_t BGR_col_map44[4][4][3])
00212 {
00213     uint8_t frameX[8][8][3]= {0};
00214     //memset(frameX,30,sizeof(frameX));
00215     //memcpy(frameX,BGR_bac_map88,sizeof(frameX));
00216     int n_x,n_y;
00217     for( int x=0; x<4; x++) {
00218         for( int y=0; y<4; y++) {
00219             if(array[x][y]==1) {
00220 
00221 
00222                 n_x = x*2;
00223                 n_y = y*2;
00224                 frameX[n_x][n_y][0] = BGR_col_map44[x][y][0];
00225                 frameX[n_x][n_y][1] = BGR_col_map44[x][y][1];
00226                 frameX[n_x][n_y][2] = BGR_col_map44[x][y][2];
00227 
00228                 frameX[n_x+1][n_y][0] = BGR_col_map44[x][y][0];
00229                 frameX[n_x+1][n_y][1] = BGR_col_map44[x][y][1];
00230                 frameX[n_x+1][n_y][2] = BGR_col_map44[x][y][2];
00231 
00232                 frameX[n_x][n_y+1][0] = BGR_col_map44[x][y][0];
00233                 frameX[n_x][n_y+1][1] = BGR_col_map44[x][y][1];
00234                 frameX[n_x][n_y+1][2] = BGR_col_map44[x][y][2];
00235 
00236                 frameX[n_x+1][n_y+1][0] = BGR_col_map44[x][y][0];
00237                 frameX[n_x+1][n_y+1][1] = BGR_col_map44[x][y][1];
00238                 frameX[n_x+1][n_y+1][2] = BGR_col_map44[x][y][2];
00239 
00240 
00241 
00242             }
00243         }
00244     }
00245     sendframe(frameX);
00246     displayRGB();
00247 }
00248 
00249