Bluetooth Enabled Keyboard/Synthesizer for mbed

Dependencies:   mbed 4DGL-uLCD-SE SDFileSystem mbed-rtos

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?

UserRevisionLine numberNew 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 }