Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of Project_B13_RGBmaster by
main.cpp@0:65bf30fbbdeb, 2015-12-08 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
