
Bluetooth Enabled Keyboard/Synthesizer for mbed
Dependencies: mbed 4DGL-uLCD-SE SDFileSystem mbed-rtos
main.cpp@2:f06ba516b1ad, 2016-04-27 (annotated)
- Committer:
- jmpin
- Date:
- Wed Apr 27 21:13:45 2016 +0000
- Revision:
- 2:f06ba516b1ad
- Parent:
- 1:830a669cacbe
- Child:
- 3:3aba1d783730
Made header file with definitions/macros. Replaced characters in the else if statements with their corresponding macros for readability.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jmpin | 0:48311ffdfa96 | 1 | #include "mbed.h" |
jmpin | 0:48311ffdfa96 | 2 | Serial Blue(p28,p27); |
jmpin | 0:48311ffdfa96 | 3 | Serial PC(USBTX,USBRX); |
jmpin | 0:48311ffdfa96 | 4 | DigitalOut myled(LED1); |
jmpin | 0:48311ffdfa96 | 5 | DigitalOut myled4(LED4); |
jmpin | 0:48311ffdfa96 | 6 | //global variables for main and interrupt routine |
jmpin | 0:48311ffdfa96 | 7 | volatile bool readyFlag = true; |
jmpin | 0:48311ffdfa96 | 8 | volatile char keyPress; |
jmpin | 0:48311ffdfa96 | 9 | //Interrupt routine to parse message with one new character per serial RX interrupt |
jmpin | 0:48311ffdfa96 | 10 | void parse_message() |
jmpin | 0:48311ffdfa96 | 11 | { |
jmpin | 0:48311ffdfa96 | 12 | keyPress = Blue.getc(); |
jmpin | 0:48311ffdfa96 | 13 | PC.putc(keyPress); |
jmpin | 0:48311ffdfa96 | 14 | readyFlag = true; |
jmpin | 0:48311ffdfa96 | 15 | PC.printf("\n\r Value of readyFlag is: %i",readyFlag); |
jmpin | 0:48311ffdfa96 | 16 | |
jmpin | 0:48311ffdfa96 | 17 | //PC.printf("Value of keyPress is: %c\n\r",keyPress); |
jmpin | 0:48311ffdfa96 | 18 | } |
jmpin | 0:48311ffdfa96 | 19 | |
jmpin | 2:f06ba516b1ad | 20 | |
jmpin | 2:f06ba516b1ad | 21 | |
jmpin | 2:f06ba516b1ad | 22 | WaveType myWave = sine; // default to sine wave |
jmpin | 2:f06ba516b1ad | 23 | int currentOctave = 4; // default to 4 because thats where middle C is |
jmpin | 2:f06ba516b1ad | 24 | |
jmpin | 2:f06ba516b1ad | 25 | |
jmpin | 0:48311ffdfa96 | 26 | int main() |
jmpin | 0:48311ffdfa96 | 27 | { |
jmpin | 0:48311ffdfa96 | 28 | //attach interrupt function for each new Bluetooth serial character |
jmpin | 0:48311ffdfa96 | 29 | Blue.attach(&parse_message,Serial::RxIrq); |
jmpin | 0:48311ffdfa96 | 30 | while(1) { |
jmpin | 0:48311ffdfa96 | 31 | //check for a new button message ready |
jmpin | 2:f06ba516b1ad | 32 | if((keyPress == C_KEY) && (readyFlag))// button Z pressed |
jmpin | 0:48311ffdfa96 | 33 | { |
jmpin | 2:f06ba516b1ad | 34 | PC.printf("Got n Z"); |
jmpin | 0:48311ffdfa96 | 35 | readyFlag = false; |
jmpin | 0:48311ffdfa96 | 36 | // Play note that corresponds to Z |
jmpin | 0:48311ffdfa96 | 37 | } |
jmpin | 2:f06ba516b1ad | 38 | else if((keyPress == D_KEY) && (readyFlag)) // button X pressed |
jmpin | 0:48311ffdfa96 | 39 | { |
jmpin | 0:48311ffdfa96 | 40 | PC.printf("Got an X"); |
jmpin | 0:48311ffdfa96 | 41 | // Play note that corresponds to X |
jmpin | 0:48311ffdfa96 | 42 | } |
jmpin | 2:f06ba516b1ad | 43 | else if((keyPress == E_KEY && (readyFlag)){} // button C pressed |
jmpin | 0:48311ffdfa96 | 44 | // Play note that corresponds to C |
jmpin | 2:f06ba516b1ad | 45 | else if((keyPress == F_KEY) && (readyFlag)){} // button V pressed |
jmpin | 0:48311ffdfa96 | 46 | // Play note that corresponds to V |
jmpin | 2:f06ba516b1ad | 47 | else if((keyPress == G_KEY) && (readyFlag)){} // button B pressed |
jmpin | 0:48311ffdfa96 | 48 | // Play note that corresponds to B |
jmpin | 2:f06ba516b1ad | 49 | else if((keyPress == A_KEY) && (readyFlag)){} // button N pressed |
jmpin | 0:48311ffdfa96 | 50 | // Play note that corresponds to N |
jmpin | 2:f06ba516b1ad | 51 | else if((keyPress == B_KEY) && (readyFlag)){} // button M pressed |
jmpin | 0:48311ffdfa96 | 52 | // Play note that corresponds to M |
jmpin | 2:f06ba516b1ad | 53 | else if((keyPress == RAISE_OCTAVE_KEY) && (readyFlag)){ // button O pressed |
jmpin | 0:48311ffdfa96 | 54 | // Raise an octave |
jmpin | 2:f06ba516b1ad | 55 | currentOctave++; |
jmpin | 2:f06ba516b1ad | 56 | } |
jmpin | 2:f06ba516b1ad | 57 | else if((keyPress == LOWER_OCTAVE_KEY) && (readyFlag)){ // button L pressed |
jmpin | 2:f06ba516b1ad | 58 | // Lower an octave |
jmpin | 2:f06ba516b1ad | 59 | currentOctave--; |
jmpin | 2:f06ba516b1ad | 60 | } |
jmpin | 2:f06ba516b1ad | 61 | else if((keyPress == RAISE_ATTACK_KEY) && (readyFlag)){ // button Q pressed |
jmpin | 0:48311ffdfa96 | 62 | // Raise Attack Value |
jmpin | 2:f06ba516b1ad | 63 | currentAttackVal++; |
jmpin | 2:f06ba516b1ad | 64 | } |
jmpin | 2:f06ba516b1ad | 65 | else if((keyPress == LOWER_ATTACK_KEY) && (readyFlag)){ // button A pressed |
jmpin | 0:48311ffdfa96 | 66 | // Lower Attack Value |
jmpin | 2:f06ba516b1ad | 67 | currentAttackVal--; |
jmpin | 2:f06ba516b1ad | 68 | } |
jmpin | 2:f06ba516b1ad | 69 | else if((keyPress == RAISE_DELAY_KEY) && (readyFlag)){ // button W pressed |
jmpin | 0:48311ffdfa96 | 70 | // Raise Delay Value |
jmpin | 2:f06ba516b1ad | 71 | currentDelayVal++; |
jmpin | 2:f06ba516b1ad | 72 | } |
jmpin | 2:f06ba516b1ad | 73 | else if((keyPress == LOWER_DELAY_KEY) && (readyFlag)){ // button S pressed |
jmpin | 0:48311ffdfa96 | 74 | // Lower Delay Value |
jmpin | 2:f06ba516b1ad | 75 | currentDelayVal--; |
jmpin | 2:f06ba516b1ad | 76 | } |
jmpin | 2:f06ba516b1ad | 77 | else if((keyPress == RAISE_SUSTAIN_KEY) && (readyFlag)){ // button E pressed |
jmpin | 0:48311ffdfa96 | 78 | // Raise Sustain Value |
jmpin | 2:f06ba516b1ad | 79 | currentSustainVal++; |
jmpin | 2:f06ba516b1ad | 80 | } |
jmpin | 2:f06ba516b1ad | 81 | else if((keyPress == LOWER_SUSTAIN_KEY) && (readyFlag)){ // button D pressed |
jmpin | 0:48311ffdfa96 | 82 | // Lower Sustain Value |
jmpin | 2:f06ba516b1ad | 83 | currentSustainVal--; |
jmpin | 2:f06ba516b1ad | 84 | } |
jmpin | 2:f06ba516b1ad | 85 | else if((keyPress == RAISE_RELEASE_KEY) && (readyFlag)){ // button R pressed |
jmpin | 0:48311ffdfa96 | 86 | // Raise Release Value |
jmpin | 2:f06ba516b1ad | 87 | currentReleaseVal++; |
jmpin | 2:f06ba516b1ad | 88 | } |
jmpin | 2:f06ba516b1ad | 89 | else if((keyPress == LOWER_RELEASE_KEY) && (readyFlag)){ // button F pressed |
jmpin | 0:48311ffdfa96 | 90 | // Lower Release Value |
jmpin | 2:f06ba516b1ad | 91 | currentReleaseVal--; |
jmpin | 2:f06ba516b1ad | 92 | } |
jmpin | 2:f06ba516b1ad | 93 | else if((keyPress == CHANGE_WAVESHAPE_UP) && (readyFlag)){ // button T pressed |
jmpin | 2:f06ba516b1ad | 94 | // Change waveform shape to next waveform type |
jmpin | 2:f06ba516b1ad | 95 | switch(myWave){ |
jmpin | 2:f06ba516b1ad | 96 | case sine: |
jmpin | 2:f06ba516b1ad | 97 | myWave = square; |
jmpin | 2:f06ba516b1ad | 98 | break; |
jmpin | 2:f06ba516b1ad | 99 | case square: |
jmpin | 2:f06ba516b1ad | 100 | myWave = sawtooth; |
jmpin | 2:f06ba516b1ad | 101 | break; |
jmpin | 2:f06ba516b1ad | 102 | case sawtooth: |
jmpin | 2:f06ba516b1ad | 103 | myWave = sine; |
jmpin | 2:f06ba516b1ad | 104 | break; |
jmpin | 2:f06ba516b1ad | 105 | default: |
jmpin | 2:f06ba516b1ad | 106 | break; |
jmpin | 2:f06ba516b1ad | 107 | } |
jmpin | 2:f06ba516b1ad | 108 | } |
jmpin | 2:f06ba516b1ad | 109 | else if((keyPress == CHANGE_WAVESHAPE_DOWN) && (readyFlag)){ // button G pressed |
jmpin | 2:f06ba516b1ad | 110 | // Change waveform shape to previous waveform type |
jmpin | 2:f06ba516b1ad | 111 | switch(myWave){ |
jmpin | 2:f06ba516b1ad | 112 | case sine: |
jmpin | 2:f06ba516b1ad | 113 | myWave = sawtooth; |
jmpin | 2:f06ba516b1ad | 114 | break; |
jmpin | 2:f06ba516b1ad | 115 | case square: |
jmpin | 2:f06ba516b1ad | 116 | myWave = sine; |
jmpin | 2:f06ba516b1ad | 117 | break; |
jmpin | 2:f06ba516b1ad | 118 | case sawtooth: |
jmpin | 2:f06ba516b1ad | 119 | myWave = square; |
jmpin | 2:f06ba516b1ad | 120 | break; |
jmpin | 2:f06ba516b1ad | 121 | default: |
jmpin | 2:f06ba516b1ad | 122 | break; |
jmpin | 2:f06ba516b1ad | 123 | } |
jmpin | 2:f06ba516b1ad | 124 | } |
jmpin | 2:f06ba516b1ad | 125 | |
jmpin | 0:48311ffdfa96 | 126 | } |
jmpin | 0:48311ffdfa96 | 127 | //do other tasks in main - interrupts will process button message characters |
jmpin | 0:48311ffdfa96 | 128 | myled = 1; |
jmpin | 0:48311ffdfa96 | 129 | wait(0.1); |
jmpin | 0:48311ffdfa96 | 130 | myled = 0; |
jmpin | 0:48311ffdfa96 | 131 | wait(0.1); |
jmpin | 0:48311ffdfa96 | 132 | |
jmpin | 0:48311ffdfa96 | 133 | } |