
Bluetooth Enabled Keyboard/Synthesizer for mbed
Dependencies: mbed 4DGL-uLCD-SE SDFileSystem mbed-rtos
main.cpp@5:afd67e985df0, 2016-04-28 (annotated)
- Committer:
- jmpin
- Date:
- Thu Apr 28 07:29:08 2016 +0000
- Revision:
- 5:afd67e985df0
- Parent:
- 4:406f59c6a1a6
- Child:
- 6:68c6a50e1437
Added some wave tables for the different types of waves, and added some coefficient matrices used to shape the envelope of the waveform.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jmpin | 0:48311ffdfa96 | 1 | #include "mbed.h" |
jmpin | 3:3aba1d783730 | 2 | #include "SDFileSystem.h" |
jmpin | 3:3aba1d783730 | 3 | #include "synthesizer.h" |
jmpin | 0:48311ffdfa96 | 4 | Serial Blue(p28,p27); |
jmpin | 0:48311ffdfa96 | 5 | Serial PC(USBTX,USBRX); |
jmpin | 0:48311ffdfa96 | 6 | DigitalOut myled(LED1); |
jmpin | 0:48311ffdfa96 | 7 | DigitalOut myled4(LED4); |
jmpin | 3:3aba1d783730 | 8 | |
jmpin | 3:3aba1d783730 | 9 | SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card setup |
jmpin | 3:3aba1d783730 | 10 | |
jmpin | 0:48311ffdfa96 | 11 | //global variables for main and interrupt routine |
jmpin | 0:48311ffdfa96 | 12 | volatile bool readyFlag = true; |
jmpin | 0:48311ffdfa96 | 13 | volatile char keyPress; |
jmpin | 3:3aba1d783730 | 14 | WaveType myWave = sine; // default to sine wave |
jmpin | 3:3aba1d783730 | 15 | volatile int currentOctave = 4; // default to 4 because thats where middle C is |
jmpin | 3:3aba1d783730 | 16 | volatile int currentAttackVal = 3; // values will range from 1-5, default to 3 |
jmpin | 3:3aba1d783730 | 17 | volatile int currentDelayVal = 3; // values will range from 1-5, default to 3 |
jmpin | 3:3aba1d783730 | 18 | volatile int currentSustainVal = 3; // values will range from 1-5, default to 3 |
jmpin | 3:3aba1d783730 | 19 | volatile int currentReleaseVal = 3; // values will range from 1-5, default to 3 |
jmpin | 5:afd67e985df0 | 20 | |
jmpin | 5:afd67e985df0 | 21 | /* Coefficient Matrices Corresponding to Different Attack Values |
jmpin | 5:afd67e985df0 | 22 | each matrix is comprised of 32 elements (256/8). The first matrix corresponds |
jmpin | 5:afd67e985df0 | 23 | to an attack value of 1. |
jmpin | 5:afd67e985df0 | 24 | */ |
jmpin | 5:afd67e985df0 | 25 | |
jmpin | 5:afd67e985df0 | 26 | const double attackVals5[32] = { //Approaches the maximum amplitude the quickest - corresponds to an attackValue of 5 |
jmpin | 5:afd67e985df0 | 27 | 0, 0.275 , 0.55 , 0.7 , |
jmpin | 5:afd67e985df0 | 28 | 0.8 , 0.85 , 0.9 , 0.91 , |
jmpin | 5:afd67e985df0 | 29 | 0.92 , 0.93 , 0.939 , 0.948 , |
jmpin | 5:afd67e985df0 | 30 | 0.956 , 0.963 , 0.969 , 0.974 , |
jmpin | 5:afd67e985df0 | 31 | 0.978 , 0.982 , 0.986 , 0.989 , |
jmpin | 5:afd67e985df0 | 32 | 0.991 , 0.992 , 0.993 , 0.994 , |
jmpin | 5:afd67e985df0 | 33 | 0.995 , 0.996 , 0.997 , 0.998 , |
jmpin | 5:afd67e985df0 | 34 | 0.9985 , 0.999 , 0.9995 , 1 |
jmpin | 5:afd67e985df0 | 35 | }; |
jmpin | 5:afd67e985df0 | 36 | const double attackVals4[32] = { //Corresponds to an attackValue of 4 |
jmpin | 5:afd67e985df0 | 37 | 0 , 0.18 , 0.38 , 0.58 , |
jmpin | 5:afd67e985df0 | 38 | 0.66 , 0.69 , 0.72 , 0.74 , |
jmpin | 5:afd67e985df0 | 39 | 0.76 , 0.78 , 0.795 , 0.81 , |
jmpin | 5:afd67e985df0 | 40 | 0.825 , 0.84 , 0.85 , 0.86 , |
jmpin | 5:afd67e985df0 | 41 | 0.87 , 0.88 , 0.89 , 0.9 , |
jmpin | 5:afd67e985df0 | 42 | 0.91 , 0.92 , 0.93 , 0.94 , |
jmpin | 5:afd67e985df0 | 43 | 0.95 , 0.96 , 0.97 , 0.98 , |
jmpin | 5:afd67e985df0 | 44 | 0.985 , 0.99 , 0.995 , 1 |
jmpin | 5:afd67e985df0 | 45 | }; |
jmpin | 5:afd67e985df0 | 46 | const double attackVals3[32] = { //Corresponds to an attackValue of 3 |
jmpin | 5:afd67e985df0 | 47 | 0 , 0.09 , 0.18 , 0.27 , |
jmpin | 5:afd67e985df0 | 48 | 0.35 , 0.43 , 0.5 , 0.57 , |
jmpin | 5:afd67e985df0 | 49 | 0.61 , 0.65 , 0.68 , 0.71 , |
jmpin | 5:afd67e985df0 | 50 | 0.74 , 0.76 , 0.78 , 0.8 , |
jmpin | 5:afd67e985df0 | 51 | 0.82 , 0.84 , 0.86 , 0.88 , |
jmpin | 5:afd67e985df0 | 52 | 0.895 , 0.91 , 0.925 , 0.94 , |
jmpin | 5:afd67e985df0 | 53 | 0.95 , 0.96 , 0.97 , 0.98 , |
jmpin | 5:afd67e985df0 | 54 | 0.985 , 0.99 , 0.995 , 1 |
jmpin | 5:afd67e985df0 | 55 | }; |
jmpin | 5:afd67e985df0 | 56 | const double attackVals2[32] = { //Corresponds to an attackValue of 2 |
jmpin | 5:afd67e985df0 | 57 | 0 , 0.06 , 0.12 , 0.18 , |
jmpin | 5:afd67e985df0 | 58 | 0.23 , 0.28 , 0.32 , 0.36 , |
jmpin | 5:afd67e985df0 | 59 | 0.4 , 0.44 , 0.48 , 0.52 , |
jmpin | 5:afd67e985df0 | 60 | 0.55 , 0.58 , 0.61 , 0.64 , |
jmpin | 5:afd67e985df0 | 61 | 0.67 , 0.695 , 0.72 , 0.745 , |
jmpin | 5:afd67e985df0 | 62 | 0.77 , 0.795 , 0.82 , 0.845 , |
jmpin | 5:afd67e985df0 | 63 | 0.87 , 0.895 , 0.92 , 0.945 , |
jmpin | 5:afd67e985df0 | 64 | 0.965 , 0.985 , 0.995 , 1 |
jmpin | 5:afd67e985df0 | 65 | }; |
jmpin | 5:afd67e985df0 | 66 | const double attackVals1[32] = { //Approaches the mamimum amplitude the slowest, in a linear fashion - corresponds to an attackValue of 1 |
jmpin | 5:afd67e985df0 | 67 | 0 , 0.032258065 , 0.064516129 , 0.096774194 , |
jmpin | 5:afd67e985df0 | 68 | 0.129032258 , 0.161290323 , 0.193548387 , 0.225806452 , |
jmpin | 5:afd67e985df0 | 69 | 0.258064516 , 0.290322581 , 0.322580645 , 0.35483871 , |
jmpin | 5:afd67e985df0 | 70 | 0.387096774 , 0.419354839 , 0.451612903 , 0.483870968 , |
jmpin | 5:afd67e985df0 | 71 | 0.516129032 , 0.548387097 , 0.580645161 , 0.612903226 , |
jmpin | 5:afd67e985df0 | 72 | 0.64516129 , 0.677419355 , 0.709677419 , 0.741935484 , |
jmpin | 5:afd67e985df0 | 73 | 0.774193548 , 0.806451613 , 0.838709677 , 0.870967742 , |
jmpin | 5:afd67e985df0 | 74 | 0.903225806 , 0.935483871 , 0.967741935 , 1 |
jmpin | 5:afd67e985df0 | 75 | }; |
jmpin | 5:afd67e985df0 | 76 | |
jmpin | 5:afd67e985df0 | 77 | const double decayVals5[32] = { |
jmpin | 5:afd67e985df0 | 78 | }; |
jmpin | 5:afd67e985df0 | 79 | const double decayVals4[32] = { |
jmpin | 5:afd67e985df0 | 80 | }; |
jmpin | 5:afd67e985df0 | 81 | const double decayVals3[32] = { |
jmpin | 5:afd67e985df0 | 82 | }; |
jmpin | 5:afd67e985df0 | 83 | const double decayVals2[32] = { |
jmpin | 5:afd67e985df0 | 84 | }; |
jmpin | 5:afd67e985df0 | 85 | const double decayVals1[32] = { |
jmpin | 5:afd67e985df0 | 86 | }; |
jmpin | 5:afd67e985df0 | 87 | const double sustainVals5[160] = { //Highest level of sustain, the note will cap out at an amplitude of 1 - corresponds to sustain value of 5 |
jmpin | 5:afd67e985df0 | 88 | .8 , .8 , .8 , .8 , |
jmpin | 5:afd67e985df0 | 89 | .8 , .8 , .8 , .8 , |
jmpin | 5:afd67e985df0 | 90 | .8 , .8 , .8 , .8 , |
jmpin | 5:afd67e985df0 | 91 | .8 , .8 , .8 , .8 , |
jmpin | 5:afd67e985df0 | 92 | .8 , .8 , .8 , .8 , |
jmpin | 5:afd67e985df0 | 93 | .8 , .8 , .8 , .8 , |
jmpin | 5:afd67e985df0 | 94 | .8 , .8 , .8 , .8 , |
jmpin | 5:afd67e985df0 | 95 | .8 , .8 , .8 , .8 |
jmpin | 5:afd67e985df0 | 96 | }; |
jmpin | 5:afd67e985df0 | 97 | const double sustainVal4[160] = { //Sustain value of 4 |
jmpin | 5:afd67e985df0 | 98 | .65 , .65 , .65 , .65 , |
jmpin | 5:afd67e985df0 | 99 | .65 , .65 , .65 , .65 , |
jmpin | 5:afd67e985df0 | 100 | .65 , .65 , .65 , .65 , |
jmpin | 5:afd67e985df0 | 101 | .65 , .65 , .65 , .65 , |
jmpin | 5:afd67e985df0 | 102 | .65 , .65 , .65 , .65 , |
jmpin | 5:afd67e985df0 | 103 | .65 , .65 , .65 , .65 , |
jmpin | 5:afd67e985df0 | 104 | .65 , .65 , .65 , .65 , |
jmpin | 5:afd67e985df0 | 105 | .65 , .65 , .65 , .65 |
jmpin | 5:afd67e985df0 | 106 | }; |
jmpin | 5:afd67e985df0 | 107 | const double sustainVals3[160] = { //Sustain value of 3 |
jmpin | 5:afd67e985df0 | 108 | .5 , .5 , .5 , .5 , |
jmpin | 5:afd67e985df0 | 109 | .5 , .5 , .5 , .5 , |
jmpin | 5:afd67e985df0 | 110 | .5 , .5 , .5 , .5 , |
jmpin | 5:afd67e985df0 | 111 | .5 , .5 , .5 , .5 , |
jmpin | 5:afd67e985df0 | 112 | .5 , .5 , .5 , .5 , |
jmpin | 5:afd67e985df0 | 113 | .5 , .5 , .5 , .5 , |
jmpin | 5:afd67e985df0 | 114 | .5 , .5 , .5 , .5 , |
jmpin | 5:afd67e985df0 | 115 | .5 , .5 , .5 , .5 |
jmpin | 5:afd67e985df0 | 116 | }; |
jmpin | 5:afd67e985df0 | 117 | const double sustainVals2[160] = { //Sustain value of 2 |
jmpin | 5:afd67e985df0 | 118 | .35 , .35 , .35 , .35 , |
jmpin | 5:afd67e985df0 | 119 | .35 , .35 , .35 , .35 , |
jmpin | 5:afd67e985df0 | 120 | .35 , .35 , .35 , .35 , |
jmpin | 5:afd67e985df0 | 121 | .35 , .35 , .35 , .35 , |
jmpin | 5:afd67e985df0 | 122 | .35 , .35 , .35 , .35 , |
jmpin | 5:afd67e985df0 | 123 | .35 , .35 , .35 , .35 , |
jmpin | 5:afd67e985df0 | 124 | .35 , .35 , .35 , .35 , |
jmpin | 5:afd67e985df0 | 125 | .35 , .35 , .35 , .35 |
jmpin | 5:afd67e985df0 | 126 | }; |
jmpin | 5:afd67e985df0 | 127 | const double sustainVals1[160] = { //Lowest level of sustain, the note will cap at at an amplitude of .2 - corresponds to sustain value of 1 |
jmpin | 5:afd67e985df0 | 128 | .20 , .20 , .20 , .20 , |
jmpin | 5:afd67e985df0 | 129 | .20 , .20 , .20 , .20 , |
jmpin | 5:afd67e985df0 | 130 | .20 , .20 , .20 , .20 , |
jmpin | 5:afd67e985df0 | 131 | .20 , .20 , .20 , .20 , |
jmpin | 5:afd67e985df0 | 132 | .20 , .20 , .20 , .20 , |
jmpin | 5:afd67e985df0 | 133 | .20 , .20 , .20 , .20 , |
jmpin | 5:afd67e985df0 | 134 | .20 , .20 , .20 , .20 , |
jmpin | 5:afd67e985df0 | 135 | .20 , .20 , .20 , .20 |
jmpin | 5:afd67e985df0 | 136 | } |
jmpin | 5:afd67e985df0 | 137 | const double releaseVals5[32] = { |
jmpin | 5:afd67e985df0 | 138 | }; |
jmpin | 5:afd67e985df0 | 139 | const double releaseVals4[32] = { |
jmpin | 5:afd67e985df0 | 140 | }; |
jmpin | 5:afd67e985df0 | 141 | const double releaseVals3[32] = { |
jmpin | 5:afd67e985df0 | 142 | }; |
jmpin | 5:afd67e985df0 | 143 | const double releaseVals2[32] = { |
jmpin | 5:afd67e985df0 | 144 | }; |
jmpin | 5:afd67e985df0 | 145 | const double releaseVals1[32] = { |
jmpin | 5:afd67e985df0 | 146 | }; |
jmpin | 5:afd67e985df0 | 147 | |
jmpin | 5:afd67e985df0 | 148 | /* Values for the sine wave shaped waveform */ |
jmpin | 5:afd67e985df0 | 149 | const int sineTable[256] = { |
jmpin | 5:afd67e985df0 | 150 | 0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95, |
jmpin | 5:afd67e985df0 | 151 | 0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae, |
jmpin | 5:afd67e985df0 | 152 | 0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4, |
jmpin | 5:afd67e985df0 | 153 | 0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8, |
jmpin | 5:afd67e985df0 | 154 | 0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8, |
jmpin | 5:afd67e985df0 | 155 | 0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5, |
jmpin | 5:afd67e985df0 | 156 | 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc, |
jmpin | 5:afd67e985df0 | 157 | 0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 158 | 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe, |
jmpin | 5:afd67e985df0 | 159 | 0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7, |
jmpin | 5:afd67e985df0 | 160 | 0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec, |
jmpin | 5:afd67e985df0 | 161 | 0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc, |
jmpin | 5:afd67e985df0 | 162 | 0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9, |
jmpin | 5:afd67e985df0 | 163 | 0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3, |
jmpin | 5:afd67e985df0 | 164 | 0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c, |
jmpin | 5:afd67e985df0 | 165 | 0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83, |
jmpin | 5:afd67e985df0 | 166 | 0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a, |
jmpin | 5:afd67e985df0 | 167 | 0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51, |
jmpin | 5:afd67e985df0 | 168 | 0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b, |
jmpin | 5:afd67e985df0 | 169 | 0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27, |
jmpin | 5:afd67e985df0 | 170 | 0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17, |
jmpin | 5:afd67e985df0 | 171 | 0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a, |
jmpin | 5:afd67e985df0 | 172 | 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03, |
jmpin | 5:afd67e985df0 | 173 | 0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 174 | 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, |
jmpin | 5:afd67e985df0 | 175 | 0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08, |
jmpin | 5:afd67e985df0 | 176 | 0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13, |
jmpin | 5:afd67e985df0 | 177 | 0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23, |
jmpin | 5:afd67e985df0 | 178 | 0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36, |
jmpin | 5:afd67e985df0 | 179 | 0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c, |
jmpin | 5:afd67e985df0 | 180 | 0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63, |
jmpin | 5:afd67e985df0 | 181 | 0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c |
jmpin | 5:afd67e985df0 | 182 | }; |
jmpin | 5:afd67e985df0 | 183 | |
jmpin | 5:afd67e985df0 | 184 | /* Values for the square shaped waveform */ |
jmpin | 5:afd67e985df0 | 185 | const uint8_t squareTable[256] = { |
jmpin | 5:afd67e985df0 | 186 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 187 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 188 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 189 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 190 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 191 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 192 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 193 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 194 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 195 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 196 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 197 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 198 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 199 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 200 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 201 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
jmpin | 5:afd67e985df0 | 202 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 203 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 204 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 205 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 206 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 207 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 208 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 209 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 210 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 211 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 212 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 213 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 214 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 215 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 216 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
jmpin | 5:afd67e985df0 | 217 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
jmpin | 5:afd67e985df0 | 218 | }; |
jmpin | 5:afd67e985df0 | 219 | |
jmpin | 5:afd67e985df0 | 220 | /* Values for the sawtooth shaped waveform */ |
jmpin | 5:afd67e985df0 | 221 | const uint8_t sawtoothTable[256] = { |
jmpin | 5:afd67e985df0 | 222 | 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, |
jmpin | 5:afd67e985df0 | 223 | 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, |
jmpin | 5:afd67e985df0 | 224 | 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, |
jmpin | 5:afd67e985df0 | 225 | 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, |
jmpin | 5:afd67e985df0 | 226 | 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, |
jmpin | 5:afd67e985df0 | 227 | 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, |
jmpin | 5:afd67e985df0 | 228 | 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, |
jmpin | 5:afd67e985df0 | 229 | 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, |
jmpin | 5:afd67e985df0 | 230 | 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, |
jmpin | 5:afd67e985df0 | 231 | 0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, |
jmpin | 5:afd67e985df0 | 232 | 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57, |
jmpin | 5:afd67e985df0 | 233 | 0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, |
jmpin | 5:afd67e985df0 | 234 | 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, |
jmpin | 5:afd67e985df0 | 235 | 0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, |
jmpin | 5:afd67e985df0 | 236 | 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77, |
jmpin | 5:afd67e985df0 | 237 | 0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, |
jmpin | 5:afd67e985df0 | 238 | 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, |
jmpin | 5:afd67e985df0 | 239 | 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, |
jmpin | 5:afd67e985df0 | 240 | 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, |
jmpin | 5:afd67e985df0 | 241 | 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, |
jmpin | 5:afd67e985df0 | 242 | 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, |
jmpin | 5:afd67e985df0 | 243 | 0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, |
jmpin | 5:afd67e985df0 | 244 | 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7, |
jmpin | 5:afd67e985df0 | 245 | 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, |
jmpin | 5:afd67e985df0 | 246 | 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7, |
jmpin | 5:afd67e985df0 | 247 | 0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, |
jmpin | 5:afd67e985df0 | 248 | 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7, |
jmpin | 5:afd67e985df0 | 249 | 0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, |
jmpin | 5:afd67e985df0 | 250 | 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7, |
jmpin | 5:afd67e985df0 | 251 | 0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, |
jmpin | 5:afd67e985df0 | 252 | 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, |
jmpin | 5:afd67e985df0 | 253 | 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff |
jmpin | 5:afd67e985df0 | 254 | }; |
jmpin | 5:afd67e985df0 | 255 | |
jmpin | 5:afd67e985df0 | 256 | |
jmpin | 5:afd67e985df0 | 257 | |
jmpin | 5:afd67e985df0 | 258 | |
jmpin | 5:afd67e985df0 | 259 | |
jmpin | 5:afd67e985df0 | 260 | |
jmpin | 5:afd67e985df0 | 261 | |
jmpin | 5:afd67e985df0 | 262 | |
jmpin | 5:afd67e985df0 | 263 | |
jmpin | 5:afd67e985df0 | 264 | |
jmpin | 5:afd67e985df0 | 265 | |
jmpin | 5:afd67e985df0 | 266 | |
jmpin | 5:afd67e985df0 | 267 | |
jmpin | 5:afd67e985df0 | 268 | |
jmpin | 0:48311ffdfa96 | 269 | //Interrupt routine to parse message with one new character per serial RX interrupt |
jmpin | 0:48311ffdfa96 | 270 | void parse_message() |
jmpin | 0:48311ffdfa96 | 271 | { |
jmpin | 0:48311ffdfa96 | 272 | keyPress = Blue.getc(); |
jmpin | 0:48311ffdfa96 | 273 | PC.putc(keyPress); |
jmpin | 0:48311ffdfa96 | 274 | readyFlag = true; |
jmpin | 0:48311ffdfa96 | 275 | PC.printf("\n\r Value of readyFlag is: %i",readyFlag); |
jmpin | 0:48311ffdfa96 | 276 | |
jmpin | 0:48311ffdfa96 | 277 | //PC.printf("Value of keyPress is: %c\n\r",keyPress); |
jmpin | 0:48311ffdfa96 | 278 | } |
jmpin | 3:3aba1d783730 | 279 | |
jmpin | 3:3aba1d783730 | 280 | |
jmpin | 3:3aba1d783730 | 281 | /* |
jmpin | 3:3aba1d783730 | 282 | This function writes which note was just played to a text file on the SDCard. |
jmpin | 3:3aba1d783730 | 283 | The note played will be encoded in hexadecimal, as well as the octave, Attack Value, |
jmpin | 3:3aba1d783730 | 284 | Delay Value, Sustain Value, and Release Value. The format of the bits will be as follows: |
jmpin | 3:3aba1d783730 | 285 | | 3 bits | 3 bits | 3 bits | 3 bits | 3 bits | 3 bits | |
jmpin | 3:3aba1d783730 | 286 | | Attack | Delay | Susttain | Release | Octave | Note | |
jmpin | 3:3aba1d783730 | 287 | For the 3 bits representing note, A will correspond to 1, B to 2, and so on. |
jmpin | 3:3aba1d783730 | 288 | For example, if the lower 3 bits corresponding to note are 001, then the note is an A. |
jmpin | 3:3aba1d783730 | 289 | |
jmpin | 3:3aba1d783730 | 290 | @param: The note that is being played/recorded into the text file |
jmpin | 3:3aba1d783730 | 291 | */ |
jmpin | 3:3aba1d783730 | 292 | |
jmpin | 3:3aba1d783730 | 293 | void write_to_SDCard(char note) |
jmpin | 3:3aba1d783730 | 294 | { |
jmpin | 3:3aba1d783730 | 295 | int AttackBits, SustainBits, DelayBits, ReleaseBits, OctaveBits, NoteBits; |
jmpin | 2:f06ba516b1ad | 296 | |
jmpin | 3:3aba1d783730 | 297 | AttackBits = currentAttackVal; |
jmpin | 3:3aba1d783730 | 298 | DelayBits = currentDelayVal; |
jmpin | 3:3aba1d783730 | 299 | SustainBits = currentSustainVal; |
jmpin | 3:3aba1d783730 | 300 | ReleaseBits = currentReleaseVal; |
jmpin | 3:3aba1d783730 | 301 | OctaveBits = currentOctave; |
jmpin | 3:3aba1d783730 | 302 | switch(note){ |
jmpin | 3:3aba1d783730 | 303 | case 'C': |
jmpin | 3:3aba1d783730 | 304 | NoteBits = 3; |
jmpin | 3:3aba1d783730 | 305 | break; |
jmpin | 3:3aba1d783730 | 306 | case 'D': |
jmpin | 3:3aba1d783730 | 307 | NoteBits = 4; |
jmpin | 3:3aba1d783730 | 308 | break; |
jmpin | 3:3aba1d783730 | 309 | case 'E': |
jmpin | 3:3aba1d783730 | 310 | NoteBits = 5; |
jmpin | 3:3aba1d783730 | 311 | break; |
jmpin | 3:3aba1d783730 | 312 | case 'F': |
jmpin | 3:3aba1d783730 | 313 | NoteBits = 6; |
jmpin | 3:3aba1d783730 | 314 | break; |
jmpin | 3:3aba1d783730 | 315 | case 'G': |
jmpin | 3:3aba1d783730 | 316 | NoteBits = 7; |
jmpin | 3:3aba1d783730 | 317 | break; |
jmpin | 3:3aba1d783730 | 318 | case 'A': |
jmpin | 3:3aba1d783730 | 319 | NoteBits = 1; |
jmpin | 3:3aba1d783730 | 320 | break; |
jmpin | 3:3aba1d783730 | 321 | case 'B': |
jmpin | 3:3aba1d783730 | 322 | NoteBits = 2; |
jmpin | 3:3aba1d783730 | 323 | break; |
jmpin | 3:3aba1d783730 | 324 | default: |
jmpin | 3:3aba1d783730 | 325 | NoteBits = 0; |
jmpin | 3:3aba1d783730 | 326 | break; |
jmpin | 3:3aba1d783730 | 327 | } |
jmpin | 3:3aba1d783730 | 328 | int writeVal; |
jmpin | 3:3aba1d783730 | 329 | writeVal = (AttackBits << 15) | (DelayBits << 12) | (SustainBits << 9) | (ReleaseBits << 6) | (OctaveBits << 3) | (NoteBits); |
jmpin | 3:3aba1d783730 | 330 | |
jmpin | 3:3aba1d783730 | 331 | FILE *fp = fopen("/sd/noteRecords/note_record_01.txt", "w"); |
jmpin | 3:3aba1d783730 | 332 | if(fp == NULL) { |
jmpin | 3:3aba1d783730 | 333 | error("Could not open file for write\n"); |
jmpin | 3:3aba1d783730 | 334 | } |
jmpin | 3:3aba1d783730 | 335 | fprintf(fp,"%X\r\n",writeVal); // writes value to the text file in hexadecimal |
jmpin | 3:3aba1d783730 | 336 | fclose(fp); |
jmpin | 3:3aba1d783730 | 337 | } |
jmpin | 3:3aba1d783730 | 338 | |
jmpin | 0:48311ffdfa96 | 339 | int main() |
jmpin | 0:48311ffdfa96 | 340 | { |
jmpin | 3:3aba1d783730 | 341 | // make directory to hold the record of notes played |
jmpin | 3:3aba1d783730 | 342 | mkdir("/sd/noteRecords", 0777); |
jmpin | 3:3aba1d783730 | 343 | |
jmpin | 3:3aba1d783730 | 344 | |
jmpin | 0:48311ffdfa96 | 345 | //attach interrupt function for each new Bluetooth serial character |
jmpin | 0:48311ffdfa96 | 346 | Blue.attach(&parse_message,Serial::RxIrq); |
jmpin | 0:48311ffdfa96 | 347 | while(1) { |
jmpin | 0:48311ffdfa96 | 348 | //check for a new button message ready |
jmpin | 3:3aba1d783730 | 349 | if((keyPress == C_NOTE_KEY) && (readyFlag)){ // button Z pressed |
jmpin | 4:406f59c6a1a6 | 350 | PC.printf("Got a Z"); |
jmpin | 3:3aba1d783730 | 351 | write_to_SDCard('C'); |
jmpin | 0:48311ffdfa96 | 352 | readyFlag = false; |
jmpin | 0:48311ffdfa96 | 353 | // Play note that corresponds to Z |
jmpin | 0:48311ffdfa96 | 354 | } |
jmpin | 3:3aba1d783730 | 355 | else if((keyPress == D_NOTE_KEY) && (readyFlag)){ // button X pressed |
jmpin | 0:48311ffdfa96 | 356 | PC.printf("Got an X"); |
jmpin | 3:3aba1d783730 | 357 | write_to_SDCard('D'); |
jmpin | 4:406f59c6a1a6 | 358 | readyFlag = false; |
jmpin | 0:48311ffdfa96 | 359 | // Play note that corresponds to X |
jmpin | 0:48311ffdfa96 | 360 | } |
jmpin | 3:3aba1d783730 | 361 | else if((keyPress == E_NOTE_KEY) && (readyFlag)){ // button C pressed |
jmpin | 0:48311ffdfa96 | 362 | // Play note that corresponds to C |
jmpin | 3:3aba1d783730 | 363 | // Make note of which note was played in file on SD Card |
jmpin | 3:3aba1d783730 | 364 | write_to_SDCard('E'); |
jmpin | 4:406f59c6a1a6 | 365 | readyFlag = false; |
jmpin | 3:3aba1d783730 | 366 | } |
jmpin | 3:3aba1d783730 | 367 | else if((keyPress == F_NOTE_KEY) && (readyFlag)){ // button V pressed |
jmpin | 0:48311ffdfa96 | 368 | // Play note that corresponds to V |
jmpin | 3:3aba1d783730 | 369 | // Make note of which note was played in file on SD Card |
jmpin | 3:3aba1d783730 | 370 | write_to_SDCard('F'); |
jmpin | 4:406f59c6a1a6 | 371 | readyFlag = false; |
jmpin | 3:3aba1d783730 | 372 | } |
jmpin | 3:3aba1d783730 | 373 | else if((keyPress == G_NOTE_KEY) && (readyFlag)){ // button B pressed |
jmpin | 0:48311ffdfa96 | 374 | // Play note that corresponds to B |
jmpin | 3:3aba1d783730 | 375 | // Make note of which note was played in file on SD Card |
jmpin | 3:3aba1d783730 | 376 | write_to_SDCard('G'); |
jmpin | 4:406f59c6a1a6 | 377 | readyFlag = false; |
jmpin | 3:3aba1d783730 | 378 | } |
jmpin | 3:3aba1d783730 | 379 | else if((keyPress == A_NOTE_KEY) && (readyFlag)){ // button N pressed |
jmpin | 0:48311ffdfa96 | 380 | // Play note that corresponds to N |
jmpin | 3:3aba1d783730 | 381 | // Make note of which note was played in file on SD Card |
jmpin | 3:3aba1d783730 | 382 | write_to_SDCard('A'); |
jmpin | 4:406f59c6a1a6 | 383 | readyFlag = false; |
jmpin | 3:3aba1d783730 | 384 | } |
jmpin | 3:3aba1d783730 | 385 | else if((keyPress == B_NOTE_KEY) && (readyFlag)){ // button M pressed |
jmpin | 0:48311ffdfa96 | 386 | // Play note that corresponds to M |
jmpin | 3:3aba1d783730 | 387 | // Make note of which note was played in file on SD Card |
jmpin | 3:3aba1d783730 | 388 | write_to_SDCard('B'); |
jmpin | 4:406f59c6a1a6 | 389 | readyFlag = false; |
jmpin | 3:3aba1d783730 | 390 | } |
jmpin | 2:f06ba516b1ad | 391 | else if((keyPress == RAISE_OCTAVE_KEY) && (readyFlag)){ // button O pressed |
jmpin | 0:48311ffdfa96 | 392 | // Raise an octave |
jmpin | 4:406f59c6a1a6 | 393 | if(currentOcatve < 7) |
jmpin | 2:f06ba516b1ad | 394 | currentOctave++; |
jmpin | 2:f06ba516b1ad | 395 | } |
jmpin | 4:406f59c6a1a6 | 396 | else |
jmpin | 4:406f59c6a1a6 | 397 | printf("Cannot raise octave above 7.\r\n"); |
jmpin | 2:f06ba516b1ad | 398 | else if((keyPress == LOWER_OCTAVE_KEY) && (readyFlag)){ // button L pressed |
jmpin | 2:f06ba516b1ad | 399 | // Lower an octave |
jmpin | 4:406f59c6a1a6 | 400 | if(currentOctave > 1) |
jmpin | 2:f06ba516b1ad | 401 | currentOctave--; |
jmpin | 4:406f59c6a1a6 | 402 | else |
jmpin | 4:406f59c6a1a6 | 403 | printf("Cannot lower octave below 1.\r\n"); |
jmpin | 2:f06ba516b1ad | 404 | } |
jmpin | 2:f06ba516b1ad | 405 | else if((keyPress == RAISE_ATTACK_KEY) && (readyFlag)){ // button Q pressed |
jmpin | 0:48311ffdfa96 | 406 | // Raise Attack Value |
jmpin | 4:406f59c6a1a6 | 407 | if(currentAttackVal < 5) |
jmpin | 2:f06ba516b1ad | 408 | currentAttackVal++; |
jmpin | 4:406f59c6a1a6 | 409 | else |
jmpin | 4:406f59c6a1a6 | 410 | printf("Cannot raise value above 5.\r\n"); |
jmpin | 2:f06ba516b1ad | 411 | } |
jmpin | 2:f06ba516b1ad | 412 | else if((keyPress == LOWER_ATTACK_KEY) && (readyFlag)){ // button A pressed |
jmpin | 0:48311ffdfa96 | 413 | // Lower Attack Value |
jmpin | 4:406f59c6a1a6 | 414 | if(currentAttackVal > 1) |
jmpin | 2:f06ba516b1ad | 415 | currentAttackVal--; |
jmpin | 4:406f59c6a1a6 | 416 | else |
jmpin | 4:406f59c6a1a6 | 417 | printf("Cannot lower value below 1.\r\n"; |
jmpin | 2:f06ba516b1ad | 418 | } |
jmpin | 2:f06ba516b1ad | 419 | else if((keyPress == RAISE_DELAY_KEY) && (readyFlag)){ // button W pressed |
jmpin | 0:48311ffdfa96 | 420 | // Raise Delay Value |
jmpin | 4:406f59c6a1a6 | 421 | if(currentDelayVal < 5) |
jmpin | 2:f06ba516b1ad | 422 | currentDelayVal++; |
jmpin | 4:406f59c6a1a6 | 423 | else |
jmpin | 4:406f59c6a1a6 | 424 | printf("Cannot raise value above 5.\r\n"); |
jmpin | 2:f06ba516b1ad | 425 | } |
jmpin | 2:f06ba516b1ad | 426 | else if((keyPress == LOWER_DELAY_KEY) && (readyFlag)){ // button S pressed |
jmpin | 0:48311ffdfa96 | 427 | // Lower Delay Value |
jmpin | 4:406f59c6a1a6 | 428 | if(currentDelayVal > 1) |
jmpin | 2:f06ba516b1ad | 429 | currentDelayVal--; |
jmpin | 4:406f59c6a1a6 | 430 | else |
jmpin | 4:406f59c6a1a6 | 431 | printf("Cannot lower value below 1.\r\n"; |
jmpin | 2:f06ba516b1ad | 432 | } |
jmpin | 2:f06ba516b1ad | 433 | else if((keyPress == RAISE_SUSTAIN_KEY) && (readyFlag)){ // button E pressed |
jmpin | 0:48311ffdfa96 | 434 | // Raise Sustain Value |
jmpin | 4:406f59c6a1a6 | 435 | if(currentSustainVal < 5) |
jmpin | 2:f06ba516b1ad | 436 | currentSustainVal++; |
jmpin | 4:406f59c6a1a6 | 437 | else |
jmpin | 4:406f59c6a1a6 | 438 | printf("Cannot raise value above 5.\r\n"); |
jmpin | 2:f06ba516b1ad | 439 | } |
jmpin | 2:f06ba516b1ad | 440 | else if((keyPress == LOWER_SUSTAIN_KEY) && (readyFlag)){ // button D pressed |
jmpin | 0:48311ffdfa96 | 441 | // Lower Sustain Value |
jmpin | 4:406f59c6a1a6 | 442 | if(currentSustainVal > 1) |
jmpin | 2:f06ba516b1ad | 443 | currentSustainVal--; |
jmpin | 4:406f59c6a1a6 | 444 | else |
jmpin | 4:406f59c6a1a6 | 445 | printf("Cannot lower value below 1.\r\n"; |
jmpin | 2:f06ba516b1ad | 446 | } |
jmpin | 2:f06ba516b1ad | 447 | else if((keyPress == RAISE_RELEASE_KEY) && (readyFlag)){ // button R pressed |
jmpin | 0:48311ffdfa96 | 448 | // Raise Release Value |
jmpin | 4:406f59c6a1a6 | 449 | if(currentReleaseVal < 5) |
jmpin | 2:f06ba516b1ad | 450 | currentReleaseVal++; |
jmpin | 4:406f59c6a1a6 | 451 | else |
jmpin | 4:406f59c6a1a6 | 452 | printf("Cannot raise value above 5.\r\n"); |
jmpin | 2:f06ba516b1ad | 453 | } |
jmpin | 2:f06ba516b1ad | 454 | else if((keyPress == LOWER_RELEASE_KEY) && (readyFlag)){ // button F pressed |
jmpin | 0:48311ffdfa96 | 455 | // Lower Release Value |
jmpin | 4:406f59c6a1a6 | 456 | if(currentReleaseVal > 1) |
jmpin | 2:f06ba516b1ad | 457 | currentReleaseVal--; |
jmpin | 4:406f59c6a1a6 | 458 | else |
jmpin | 4:406f59c6a1a6 | 459 | printf("Cannot lower value below 1.\r\n"; |
jmpin | 2:f06ba516b1ad | 460 | } |
jmpin | 2:f06ba516b1ad | 461 | else if((keyPress == CHANGE_WAVESHAPE_UP) && (readyFlag)){ // button T pressed |
jmpin | 2:f06ba516b1ad | 462 | // Change waveform shape to next waveform type |
jmpin | 2:f06ba516b1ad | 463 | switch(myWave){ |
jmpin | 2:f06ba516b1ad | 464 | case sine: |
jmpin | 2:f06ba516b1ad | 465 | myWave = square; |
jmpin | 2:f06ba516b1ad | 466 | break; |
jmpin | 2:f06ba516b1ad | 467 | case square: |
jmpin | 2:f06ba516b1ad | 468 | myWave = sawtooth; |
jmpin | 2:f06ba516b1ad | 469 | break; |
jmpin | 2:f06ba516b1ad | 470 | case sawtooth: |
jmpin | 2:f06ba516b1ad | 471 | myWave = sine; |
jmpin | 2:f06ba516b1ad | 472 | break; |
jmpin | 2:f06ba516b1ad | 473 | default: |
jmpin | 2:f06ba516b1ad | 474 | break; |
jmpin | 2:f06ba516b1ad | 475 | } |
jmpin | 2:f06ba516b1ad | 476 | } |
jmpin | 2:f06ba516b1ad | 477 | else if((keyPress == CHANGE_WAVESHAPE_DOWN) && (readyFlag)){ // button G pressed |
jmpin | 2:f06ba516b1ad | 478 | // Change waveform shape to previous waveform type |
jmpin | 2:f06ba516b1ad | 479 | switch(myWave){ |
jmpin | 2:f06ba516b1ad | 480 | case sine: |
jmpin | 2:f06ba516b1ad | 481 | myWave = sawtooth; |
jmpin | 2:f06ba516b1ad | 482 | break; |
jmpin | 2:f06ba516b1ad | 483 | case square: |
jmpin | 2:f06ba516b1ad | 484 | myWave = sine; |
jmpin | 2:f06ba516b1ad | 485 | break; |
jmpin | 2:f06ba516b1ad | 486 | case sawtooth: |
jmpin | 2:f06ba516b1ad | 487 | myWave = square; |
jmpin | 2:f06ba516b1ad | 488 | break; |
jmpin | 2:f06ba516b1ad | 489 | default: |
jmpin | 2:f06ba516b1ad | 490 | break; |
jmpin | 2:f06ba516b1ad | 491 | } |
jmpin | 2:f06ba516b1ad | 492 | } |
jmpin | 2:f06ba516b1ad | 493 | |
jmpin | 0:48311ffdfa96 | 494 | } |
jmpin | 0:48311ffdfa96 | 495 | //do other tasks in main - interrupts will process button message characters |
jmpin | 0:48311ffdfa96 | 496 | myled = 1; |
jmpin | 0:48311ffdfa96 | 497 | wait(0.1); |
jmpin | 0:48311ffdfa96 | 498 | myled = 0; |
jmpin | 0:48311ffdfa96 | 499 | wait(0.1); |
jmpin | 0:48311ffdfa96 | 500 | |
jmpin | 0:48311ffdfa96 | 501 | } |