B13 final project part 1

Dependencies:   mbed

Revision:
0:0def0023f900
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Dec 08 21:42:56 2015 +0000
@@ -0,0 +1,249 @@
+#include "mbed.h"
+#include "iteadstudio_colourshield.h"
+uint8_t frame[8][8][3]= {0};
+char mode = '1';
+char read = '0';
+char readon,readi,readj;
+char trig = '0';
+char trigkey;
+uint8_t keyarray[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
+DigitalIn usrin(PC_13);
+inline void midicon_display(uint8_t array[4][4],uint8_t BGR_col_map[4][4][3]);
+inline void midi_rythm_display(uint8_t BGR_col_map88[8][8][3]);
+Serial master(PA_11,PA_12);
+Serial pc(USBTX, USBRX);
+Timer timer;
+Timer timer2;
+int scount;
+
+
+int begin;
+void callback()
+{
+    // Note: you need to actually read from the serial to clear the RX interrupt
+    if(pc.getc()=='#') {
+        mode = pc.getc();
+        pc.putc(mode);
+    }
+}
+void callbackmaster()
+{
+    // Note: you need to actually read from the serial to clear the RX interrupt
+    read =master.getc();
+    if(read=='#') {
+        mode = master.getc();
+        pc.putc(mode);
+    } else if(read == '$') {
+        //pc.putc(read);
+        readon = master.getc();
+        //pc.putc(readon);
+        readi=master.getc();
+        //pc.putc(readi);
+        readj=master.getc();
+        //pc.putc(readj);
+        //pc.putc('\n');
+        if(readon=='1') {
+            keyarray[3-(readj-'0')][(readi-'0')] =1;
+        }
+        if(readon=='0') {
+            //pc.putc('X');
+            keyarray[3-(readj-'0')][readi-'0'] = 0;
+        }
+    } else if(read == '*') {
+        trig ='1';
+        pc.putc('!');
+        trigkey = master.getc();
+        pc.putc(trigkey);
+        pc.putc('\n');
+    } else {
+        pc.putc('-');
+        pc.putc(read);
+        pc.putc('-');
+        pc.putc('\n');
+    }
+}
+int main()
+{
+    timer.start();
+    pc.baud(115200);
+    pc.attach(&callback);
+    master.baud(115200);
+    master.attach(&callbackmaster);
+
+    char wb[3]= {100,100,100};
+    INITRGB(wb);
+    float r,g,b;
+    //float HSV[3];
+
+    while(1) {
+        if(mode=='0') {
+            for(int i =0; i<8; i++) {
+                for(int j= 0; j<8; j++) {
+                    HSVtoRGB(&r,&g,&b,i*j*360/49,1,1);
+                    frame[i][j][0]=(uint8_t)(b*230);
+                    frame[i][j][1]=(uint8_t)(g*255);
+                    frame[i][j][2]=(uint8_t)(r*155);
+
+                }
+            }
+            while(mode == '0') {
+                sendframe(frame);
+                displayRGB();
+
+
+            }
+        }
+        if(mode=='1') {
+            //rainbow keymap
+
+            uint8_t bgr_col_map[4][4][3];
+
+            int key = 0;
+            for(int i=0 ; i<4; i++) {
+                for(int j=0 ; j<4; j++) {
+                    HSVtoRGB(&r,&g,&b,key*360/15,1,1);
+                    bgr_col_map[j][i][0] = (uint8_t)(b*230);
+                    bgr_col_map[j][i][1] = (uint8_t)(g*255);
+                    bgr_col_map[j][i][2] = (uint8_t)(r*155);
+                    key++;
+                }
+            }
+
+            while(mode == '1') {
+                midicon_display(keyarray,bgr_col_map);
+            }
+
+        } else if(mode=='2') {
+            uint8_t rythm_col_map[8][8][3];
+            //first col
+            for(int i = 0; i<2; i++) {
+                for(int j =0; j<6; j++) {
+                    HSVtoRGB(&r,&g,&b,0,0,1);
+                    rythm_col_map[i][j][0]=(uint8_t)(b*230);
+                    rythm_col_map[i][j][1]=(uint8_t)(g*255);
+                    rythm_col_map[i][j][2]=(uint8_t)(r*155);
+                }
+            }
+            //second col
+            for(int i = 2; i<4; i++) {
+                for(int j =0; j<6; j++) {
+                    HSVtoRGB(&r,&g,&b,0,0,1);
+                    rythm_col_map[i][j][0]=(uint8_t)(b*230);
+                    rythm_col_map[i][j][1]=(uint8_t)(g*255);
+                    rythm_col_map[i][j][2]=(uint8_t)(r*155);
+                }
+            }
+            //third col
+            for(int i = 4; i<6; i++) {
+                for(int j =0; j<6; j++) {
+                    HSVtoRGB(&r,&g,&b,0,0,1);
+                    rythm_col_map[i][j][0]=(uint8_t)(b*230);
+                    rythm_col_map[i][j][1]=(uint8_t)(g*255);
+                    rythm_col_map[i][j][2]=(uint8_t)(r*155);
+                }
+            }
+            //last col
+            for(int i = 6; i<8; i++) {
+                for(int j =0; j<6; j++) {
+                    HSVtoRGB(&r,&g,&b,0,0,1);
+                    rythm_col_map[i][j][0]=(uint8_t)(b*230);
+                    rythm_col_map[i][j][1]=(uint8_t)(g*255);
+                    rythm_col_map[i][j][2]=(uint8_t)(r*155);
+                }
+            }
+            //allbutton
+            for(int i = 0; i<8; i++) {
+                for(int j =6; j<8; j++) {
+                    HSVtoRGB(&r,&g,&b,0,0,1);
+                    rythm_col_map[i][j][0]=(uint8_t)(b*230);
+                    rythm_col_map[i][j][1]=(uint8_t)(g*255);
+                    rythm_col_map[i][j][2]=(uint8_t)(r*155);
+                }
+            }
+
+            uint8_t canvas[8][8][3];
+            //int velocity_ms = 100;
+            uint8_t padobject[4][6][2] = {0}; //col,maxnumber of obj,avalibility,pos
+            int i2;
+            memcpy(canvas,rythm_col_map,sizeof(canvas));
+            while(mode == '2') {
+
+
+
+
+                if(trig=='1') {
+                    memcpy(canvas,rythm_col_map,sizeof(canvas));
+                    trig='0';
+                    for(int i = 0 ; i<6; i++) {
+                        if(trigkey-'0'!=0)
+                            if(padobject[trigkey-'0'-1][i][0]==0) {
+                                padobject[trigkey-'0'-1][i][0]=1;
+                                break;
+                            }
+                    }
+                    for(int i =0; i<4; i++) {
+                        for(int j= 0; j<6; j++) {
+                            if(padobject[i][j][0]==1) {
+                                if(padobject[i][j][1]>5) {
+                                    padobject[i][j][0] = 0;
+                                    padobject[i][j][1] = 0;
+                                } else {
+                                    //pc.putc('#');
+                                    i2 = i*2;
+                                    canvas[i2][padobject[i][j][1]][0]=(uint8_t)(230);
+                                    canvas[i2][padobject[i][j][1]][1]=(uint8_t)(204);
+                                    canvas[i2][padobject[i][j][1]][2]=(uint8_t)(0);
+                                    canvas[i2+1][padobject[i][j][1]][0]=(uint8_t)(230);
+                                    canvas[i2+1][padobject[i][j][1]][1]=(uint8_t)(204);
+                                    canvas[i2+1][padobject[i][j][1]][2]=(uint8_t)(0);
+                                    padobject[i][j][1]++;
+                                }
+                            }
+                        }
+                    }
+                }
+                sendframe(canvas);
+                displayRGB();
+            }
+        }
+    }
+}
+inline void midicon_display(uint8_t array[4][4],uint8_t BGR_col_map44[4][4][3])
+{
+    uint8_t frameX[8][8][3]= {0};
+    //memset(frameX,30,sizeof(frameX));
+    //memcpy(frameX,BGR_bac_map88,sizeof(frameX));
+    int n_x,n_y;
+    for( int x=0; x<4; x++) {
+        for( int y=0; y<4; y++) {
+            if(array[x][y]==1) {
+
+
+                n_x = x*2;
+                n_y = y*2;
+                frameX[n_x][n_y][0] = BGR_col_map44[x][y][0];
+                frameX[n_x][n_y][1] = BGR_col_map44[x][y][1];
+                frameX[n_x][n_y][2] = BGR_col_map44[x][y][2];
+
+                frameX[n_x+1][n_y][0] = BGR_col_map44[x][y][0];
+                frameX[n_x+1][n_y][1] = BGR_col_map44[x][y][1];
+                frameX[n_x+1][n_y][2] = BGR_col_map44[x][y][2];
+
+                frameX[n_x][n_y+1][0] = BGR_col_map44[x][y][0];
+                frameX[n_x][n_y+1][1] = BGR_col_map44[x][y][1];
+                frameX[n_x][n_y+1][2] = BGR_col_map44[x][y][2];
+
+                frameX[n_x+1][n_y+1][0] = BGR_col_map44[x][y][0];
+                frameX[n_x+1][n_y+1][1] = BGR_col_map44[x][y][1];
+                frameX[n_x+1][n_y+1][2] = BGR_col_map44[x][y][2];
+
+
+
+            }
+        }
+    }
+    sendframe(frameX);
+    displayRGB();
+}
+
+