FRA221_2015 / Mbed 2 deprecated RGBmaster

Dependencies:   mbed

Fork of Project_B13_RGBmaster by suchat tangjarukig

Committer:
mbedobsza
Date:
Tue Dec 08 21:42:07 2015 +0000
Revision:
0:65bf30fbbdeb
Child:
1:0ab4789816cb
13B_master-fra221-6476

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedobsza 0:65bf30fbbdeb 1 #include "mbed.h"
mbedobsza 0:65bf30fbbdeb 2
mbedobsza 0:65bf30fbbdeb 3 BusOut switchOut(D2, D3, D4, D5);
mbedobsza 0:65bf30fbbdeb 4 BusIn switchIn(D8, D9, D10, D11);
mbedobsza 0:65bf30fbbdeb 5 DigitalIn mode1(D13);
mbedobsza 0:65bf30fbbdeb 6 DigitalIn mode2(D12);
mbedobsza 0:65bf30fbbdeb 7 AnalogIn a0(A0);
mbedobsza 0:65bf30fbbdeb 8 AnalogIn a1(A1);
mbedobsza 0:65bf30fbbdeb 9 AnalogIn a2(A2);
mbedobsza 0:65bf30fbbdeb 10 Serial pc(USBTX, USBRX);
mbedobsza 0:65bf30fbbdeb 11 Serial slave(PA_11,PA_12);
mbedobsza 0:65bf30fbbdeb 12 void controlChange(uint8_t channel, uint8_t control, uint8_t value);
mbedobsza 0:65bf30fbbdeb 13 void noteOn(uint8_t channel, uint8_t pitch, uint8_t velocity);
mbedobsza 0:65bf30fbbdeb 14 void noteOff(uint8_t channel, uint8_t pitch);
mbedobsza 0:65bf30fbbdeb 15 char mode = '2';
mbedobsza 0:65bf30fbbdeb 16 uint8_t keymap1[4][4]= {{0x2D,0x2E,0x2F,0x30},{0x31,0x32,0x33,0x34},{0x35,0x36,0x37,0x38},{0x39,0x3A,0x3B,0x3C}};
mbedobsza 0:65bf30fbbdeb 17 uint8_t keymap2[4][4]= {{0x2D,0x2E,0x2F,0x30},{0x31,0x32,0x33,0x34},{0x35,0x36,0x37,0x38},{0x39,0x3A,0x3B,0x3C}};
mbedobsza 0:65bf30fbbdeb 18 uint8_t channalmap[4][4]= {{1,1,1,1},{1,1,1,1},{2,2,2,2},{2,2,2,2}};
mbedobsza 0:65bf30fbbdeb 19 Timer t;
mbedobsza 0:65bf30fbbdeb 20 uint32_t beat_ms = 150;
mbedobsza 0:65bf30fbbdeb 21 uint32_t previous=0,current;
mbedobsza 0:65bf30fbbdeb 22 /*uint8_t sequence[2][22]= {{0x32,0x2F,0x2F,0x32,0x2F,0x2F,0x32,0x2F,0x2F,0x39,0x00,0x38,0x37,0x35,0x35,0x33,0x31,0x31,0x30,0x2E,0x2E,0x00},
mbedobsza 0:65bf30fbbdeb 23 {127,127,127,127,127,127,127,127,127,127,0,127,127,127,127,127,127,127,127,127,127,0}
mbedobsza 0:65bf30fbbdeb 24 };*/
mbedobsza 0:65bf30fbbdeb 25 uint8_t sequence[3][35]= {{
mbedobsza 0:65bf30fbbdeb 26 0x00,0x00,0x00,0x00,0x00, 0x32,0x2F,0x2F,0x00,0x32 ,0x2F,0x2F,0x00,0x32,0x2F, 0x2F,
mbedobsza 0:65bf30fbbdeb 27 0x00,0x39,0x00,0x00 ,0x38,0x37,0x35,0x00,0x35, 0x33,0x31,0x00,0x31,0x30, 0x2E,0x00,0x2E,0x00,0x00
mbedobsza 0:65bf30fbbdeb 28 },
mbedobsza 0:65bf30fbbdeb 29 {0,0,0,0,0, 127,127,127,0,127, 127,127,0,127,127 ,127,0,127,0,0 ,127,127,127,0,127 ,127,127,0,127,127 ,127,0,127,0,0},
mbedobsza 0:65bf30fbbdeb 30 {1,1,2,3,4, 4,3,2,3,3, 1,2,4,4,2, 2,1,1,3,4, 3,3,4,1,1, 1,2,1,3,3, 1,1,0,0,0}
mbedobsza 0:65bf30fbbdeb 31 };
mbedobsza 0:65bf30fbbdeb 32
mbedobsza 0:65bf30fbbdeb 33 int i = 1;
mbedobsza 0:65bf30fbbdeb 34 //uint8_t song[];
mbedobsza 0:65bf30fbbdeb 35
mbedobsza 0:65bf30fbbdeb 36 int main()
mbedobsza 0:65bf30fbbdeb 37 {
mbedobsza 0:65bf30fbbdeb 38 //uint8_t sw;
mbedobsza 0:65bf30fbbdeb 39 int bacsw[4][4] = {0};
mbedobsza 0:65bf30fbbdeb 40 int addsw[4][4] = {0};
mbedobsza 0:65bf30fbbdeb 41 int sw[4];
mbedobsza 0:65bf30fbbdeb 42 pc.baud(115200);
mbedobsza 0:65bf30fbbdeb 43 slave.baud(115200);
mbedobsza 0:65bf30fbbdeb 44 t.start();
mbedobsza 0:65bf30fbbdeb 45 //current = t.read_ms();
mbedobsza 0:65bf30fbbdeb 46
mbedobsza 0:65bf30fbbdeb 47
mbedobsza 0:65bf30fbbdeb 48 while(1) {
mbedobsza 0:65bf30fbbdeb 49
mbedobsza 0:65bf30fbbdeb 50 if(mode == '2') {
mbedobsza 0:65bf30fbbdeb 51 while(mode == '2') {
mbedobsza 0:65bf30fbbdeb 52 if(mode1 == 0){
mbedobsza 0:65bf30fbbdeb 53 mode = '1';
mbedobsza 0:65bf30fbbdeb 54 noteOff(1,sequence[0][i-1+3]+15);
mbedobsza 0:65bf30fbbdeb 55 slave.printf("#1");
mbedobsza 0:65bf30fbbdeb 56 }
mbedobsza 0:65bf30fbbdeb 57 current = t.read_ms();
mbedobsza 0:65bf30fbbdeb 58 if(current-previous >= beat_ms) {
mbedobsza 0:65bf30fbbdeb 59 if(i>32) {
mbedobsza 0:65bf30fbbdeb 60
mbedobsza 0:65bf30fbbdeb 61 i = 1;
mbedobsza 0:65bf30fbbdeb 62 noteOff(1,sequence[i+3][0]);
mbedobsza 0:65bf30fbbdeb 63 }
mbedobsza 0:65bf30fbbdeb 64
mbedobsza 0:65bf30fbbdeb 65 noteOn(1,sequence[0][i+3]+15,sequence[1][i]);
mbedobsza 0:65bf30fbbdeb 66 noteOff(1,sequence[0][i-1+3]+15);
mbedobsza 0:65bf30fbbdeb 67 //wait_us(20);
mbedobsza 0:65bf30fbbdeb 68 slave.printf("*%c",sequence[2][i]+'0');
mbedobsza 0:65bf30fbbdeb 69 i++;
mbedobsza 0:65bf30fbbdeb 70 previous = t.read_ms();
mbedobsza 0:65bf30fbbdeb 71 }
mbedobsza 0:65bf30fbbdeb 72 for(int i = 0 ; i<4 ; i++) {
mbedobsza 0:65bf30fbbdeb 73 switch( i) {
mbedobsza 0:65bf30fbbdeb 74 case 0:
mbedobsza 0:65bf30fbbdeb 75 switchOut = 0b1110;
mbedobsza 0:65bf30fbbdeb 76 sw[i] = 15-switchIn;
mbedobsza 0:65bf30fbbdeb 77 break;
mbedobsza 0:65bf30fbbdeb 78 case 1:
mbedobsza 0:65bf30fbbdeb 79 switchOut = 0b1101;
mbedobsza 0:65bf30fbbdeb 80 sw[i] = 15-switchIn;
mbedobsza 0:65bf30fbbdeb 81 break;
mbedobsza 0:65bf30fbbdeb 82 case 2:
mbedobsza 0:65bf30fbbdeb 83 switchOut = 0b1011;
mbedobsza 0:65bf30fbbdeb 84 sw[i] = 15-switchIn;
mbedobsza 0:65bf30fbbdeb 85 break;
mbedobsza 0:65bf30fbbdeb 86 case 3:
mbedobsza 0:65bf30fbbdeb 87 switchOut = 0b0111;
mbedobsza 0:65bf30fbbdeb 88 sw[i] = 15-switchIn;
mbedobsza 0:65bf30fbbdeb 89 break;
mbedobsza 0:65bf30fbbdeb 90 }
mbedobsza 0:65bf30fbbdeb 91 }
mbedobsza 0:65bf30fbbdeb 92 for(int i=0; i<4 ; i++) {
mbedobsza 0:65bf30fbbdeb 93 if(sw[i]>7) {
mbedobsza 0:65bf30fbbdeb 94 addsw[i][0] = 1;
mbedobsza 0:65bf30fbbdeb 95 sw[i]= sw[i]-8;
mbedobsza 0:65bf30fbbdeb 96 } else
mbedobsza 0:65bf30fbbdeb 97 addsw[i][0] = 0;
mbedobsza 0:65bf30fbbdeb 98 if(sw[i]>3) {
mbedobsza 0:65bf30fbbdeb 99 addsw[i][1] = 1;
mbedobsza 0:65bf30fbbdeb 100 sw[i] = sw[i] - 4;
mbedobsza 0:65bf30fbbdeb 101 } else
mbedobsza 0:65bf30fbbdeb 102 addsw[i][1] = 0;
mbedobsza 0:65bf30fbbdeb 103 if(sw[i]>1) {
mbedobsza 0:65bf30fbbdeb 104 addsw[i][2] = 1;
mbedobsza 0:65bf30fbbdeb 105 sw[i] = sw[i] - 2;
mbedobsza 0:65bf30fbbdeb 106 } else
mbedobsza 0:65bf30fbbdeb 107 addsw[i][2] = 0;
mbedobsza 0:65bf30fbbdeb 108 if(sw[i]>0) {
mbedobsza 0:65bf30fbbdeb 109 addsw[i][3] = 1;
mbedobsza 0:65bf30fbbdeb 110 sw[i] = sw[i] - 1;
mbedobsza 0:65bf30fbbdeb 111 } else
mbedobsza 0:65bf30fbbdeb 112 addsw[i][3] = 0;
mbedobsza 0:65bf30fbbdeb 113 }
mbedobsza 0:65bf30fbbdeb 114
mbedobsza 0:65bf30fbbdeb 115
mbedobsza 0:65bf30fbbdeb 116 for(int i =0; i<4; i++) {
mbedobsza 0:65bf30fbbdeb 117 for(int j =0 ; j <4; j++) {
mbedobsza 0:65bf30fbbdeb 118 if(addsw[i][j] != bacsw[i][j]) {
mbedobsza 0:65bf30fbbdeb 119 //pc.printf("(%d,%d)",i,j);
mbedobsza 0:65bf30fbbdeb 120
mbedobsza 0:65bf30fbbdeb 121 if(addsw[i][j] ==1) {
mbedobsza 0:65bf30fbbdeb 122 //noteOn(channalmap[i][j],keymap1[i][j],127);
mbedobsza 0:65bf30fbbdeb 123 slave.printf("$1%c%c",'0'+i,'0'+j);
mbedobsza 0:65bf30fbbdeb 124 } else {
mbedobsza 0:65bf30fbbdeb 125 //noteOff(channalmap[i][j],keymap1[i][j]);
mbedobsza 0:65bf30fbbdeb 126 slave.printf("$0%c%c",'0'+i,'0'+j);
mbedobsza 0:65bf30fbbdeb 127 }
mbedobsza 0:65bf30fbbdeb 128 }
mbedobsza 0:65bf30fbbdeb 129 }
mbedobsza 0:65bf30fbbdeb 130 }
mbedobsza 0:65bf30fbbdeb 131 memcpy(bacsw,addsw,sizeof(bacsw));
mbedobsza 0:65bf30fbbdeb 132 }
mbedobsza 0:65bf30fbbdeb 133 }
mbedobsza 0:65bf30fbbdeb 134 if(mode == '1') {
mbedobsza 0:65bf30fbbdeb 135 int volume;
mbedobsza 0:65bf30fbbdeb 136 int shift;
mbedobsza 0:65bf30fbbdeb 137 while(mode == '1') {
mbedobsza 0:65bf30fbbdeb 138 volume = 127-a0.read()*127;
mbedobsza 0:65bf30fbbdeb 139 shift = a1.read()*4;
mbedobsza 0:65bf30fbbdeb 140 if(mode2 == 0){
mbedobsza 0:65bf30fbbdeb 141 mode = '2';
mbedobsza 0:65bf30fbbdeb 142 slave.printf("#2");
mbedobsza 0:65bf30fbbdeb 143 }
mbedobsza 0:65bf30fbbdeb 144 for(int i = 0 ; i<4 ; i++) {
mbedobsza 0:65bf30fbbdeb 145 switch( i) {
mbedobsza 0:65bf30fbbdeb 146 case 0:
mbedobsza 0:65bf30fbbdeb 147 switchOut = 0b1110;
mbedobsza 0:65bf30fbbdeb 148 sw[i] = 15-switchIn;
mbedobsza 0:65bf30fbbdeb 149 break;
mbedobsza 0:65bf30fbbdeb 150 case 1:
mbedobsza 0:65bf30fbbdeb 151 switchOut = 0b1101;
mbedobsza 0:65bf30fbbdeb 152 sw[i] = 15-switchIn;
mbedobsza 0:65bf30fbbdeb 153 break;
mbedobsza 0:65bf30fbbdeb 154 case 2:
mbedobsza 0:65bf30fbbdeb 155 switchOut = 0b1011;
mbedobsza 0:65bf30fbbdeb 156 sw[i] = 15-switchIn;
mbedobsza 0:65bf30fbbdeb 157 break;
mbedobsza 0:65bf30fbbdeb 158 case 3:
mbedobsza 0:65bf30fbbdeb 159 switchOut = 0b0111;
mbedobsza 0:65bf30fbbdeb 160 sw[i] = 15-switchIn;
mbedobsza 0:65bf30fbbdeb 161 break;
mbedobsza 0:65bf30fbbdeb 162 }
mbedobsza 0:65bf30fbbdeb 163 }
mbedobsza 0:65bf30fbbdeb 164 for(int i=0; i<4 ; i++) {
mbedobsza 0:65bf30fbbdeb 165 if(sw[i]>7) {
mbedobsza 0:65bf30fbbdeb 166 addsw[i][0] = 1;
mbedobsza 0:65bf30fbbdeb 167 sw[i]= sw[i]-8;
mbedobsza 0:65bf30fbbdeb 168 } else
mbedobsza 0:65bf30fbbdeb 169 addsw[i][0] = 0;
mbedobsza 0:65bf30fbbdeb 170 if(sw[i]>3) {
mbedobsza 0:65bf30fbbdeb 171 addsw[i][1] = 1;
mbedobsza 0:65bf30fbbdeb 172 sw[i] = sw[i] - 4;
mbedobsza 0:65bf30fbbdeb 173 } else
mbedobsza 0:65bf30fbbdeb 174 addsw[i][1] = 0;
mbedobsza 0:65bf30fbbdeb 175 if(sw[i]>1) {
mbedobsza 0:65bf30fbbdeb 176 addsw[i][2] = 1;
mbedobsza 0:65bf30fbbdeb 177 sw[i] = sw[i] - 2;
mbedobsza 0:65bf30fbbdeb 178 } else
mbedobsza 0:65bf30fbbdeb 179 addsw[i][2] = 0;
mbedobsza 0:65bf30fbbdeb 180 if(sw[i]>0) {
mbedobsza 0:65bf30fbbdeb 181 addsw[i][3] = 1;
mbedobsza 0:65bf30fbbdeb 182 sw[i] = sw[i] - 1;
mbedobsza 0:65bf30fbbdeb 183 } else
mbedobsza 0:65bf30fbbdeb 184 addsw[i][3] = 0;
mbedobsza 0:65bf30fbbdeb 185 }
mbedobsza 0:65bf30fbbdeb 186
mbedobsza 0:65bf30fbbdeb 187
mbedobsza 0:65bf30fbbdeb 188 for(int i =0; i<4; i++) {
mbedobsza 0:65bf30fbbdeb 189 for(int j =0 ; j <4; j++) {
mbedobsza 0:65bf30fbbdeb 190 if(addsw[i][j] != bacsw[i][j]) {
mbedobsza 0:65bf30fbbdeb 191 //pc.printf("(%d,%d)",i,j);
mbedobsza 0:65bf30fbbdeb 192
mbedobsza 0:65bf30fbbdeb 193 if(addsw[i][j] ==1) {
mbedobsza 0:65bf30fbbdeb 194 noteOn(channalmap[i][j],keymap1[i][j]-9+8*shift,volume);
mbedobsza 0:65bf30fbbdeb 195 slave.printf("$1%c%c",'0'+i,'0'+j);
mbedobsza 0:65bf30fbbdeb 196 } else {
mbedobsza 0:65bf30fbbdeb 197 noteOff(channalmap[i][j],keymap1[i][j]-9+8*shift);
mbedobsza 0:65bf30fbbdeb 198 slave.printf("$0%c%c",'0'+i,'0'+j);
mbedobsza 0:65bf30fbbdeb 199 }
mbedobsza 0:65bf30fbbdeb 200 }
mbedobsza 0:65bf30fbbdeb 201 }
mbedobsza 0:65bf30fbbdeb 202 }
mbedobsza 0:65bf30fbbdeb 203 memcpy(bacsw,addsw,sizeof(bacsw));
mbedobsza 0:65bf30fbbdeb 204 }
mbedobsza 0:65bf30fbbdeb 205 }
mbedobsza 0:65bf30fbbdeb 206 }
mbedobsza 0:65bf30fbbdeb 207 }
mbedobsza 0:65bf30fbbdeb 208 void noteOn(uint8_t channel, uint8_t pitch, uint8_t velocity)
mbedobsza 0:65bf30fbbdeb 209 {
mbedobsza 0:65bf30fbbdeb 210 channel += 0x90 - 1;
mbedobsza 0:65bf30fbbdeb 211 if (channel >= 0x90 && channel <= 0x9F) {
mbedobsza 0:65bf30fbbdeb 212 pc.putc(channel);
mbedobsza 0:65bf30fbbdeb 213 pc.putc(pitch);
mbedobsza 0:65bf30fbbdeb 214 pc.putc(velocity);
mbedobsza 0:65bf30fbbdeb 215 }
mbedobsza 0:65bf30fbbdeb 216 }
mbedobsza 0:65bf30fbbdeb 217
mbedobsza 0:65bf30fbbdeb 218 // Send a MIDI note off message
mbedobsza 0:65bf30fbbdeb 219 void noteOff(uint8_t channel, uint8_t pitch)
mbedobsza 0:65bf30fbbdeb 220 {
mbedobsza 0:65bf30fbbdeb 221 channel += 0x80 - 1;
mbedobsza 0:65bf30fbbdeb 222 if (channel >= 0x80 && channel <= 0x8F) {
mbedobsza 0:65bf30fbbdeb 223 pc.putc(channel);
mbedobsza 0:65bf30fbbdeb 224 pc.putc(pitch);
mbedobsza 0:65bf30fbbdeb 225 pc.putc((uint8_t)0x00);
mbedobsza 0:65bf30fbbdeb 226 }
mbedobsza 0:65bf30fbbdeb 227 }
mbedobsza 0:65bf30fbbdeb 228
mbedobsza 0:65bf30fbbdeb 229 // Send a MIDI control change message
mbedobsza 0:65bf30fbbdeb 230 void controlChange(uint8_t channel, uint8_t control, uint8_t value)
mbedobsza 0:65bf30fbbdeb 231 {
mbedobsza 0:65bf30fbbdeb 232 channel += 0xB0 - 1;
mbedobsza 0:65bf30fbbdeb 233 if (channel >= 0xB0 && channel <= 0xBF) {
mbedobsza 0:65bf30fbbdeb 234 pc.putc(channel);
mbedobsza 0:65bf30fbbdeb 235 pc.putc(control);
mbedobsza 0:65bf30fbbdeb 236 pc.putc(value);
mbedobsza 0:65bf30fbbdeb 237 }
mbedobsza 0:65bf30fbbdeb 238 }