ChordJoy is a keyboard application that accepts chordal input from a set of digital ports, outputting letters and the chords that correspond to the piano keyboard keys the user has pressed.
Dependencies: PinDetect_KL25Z mbed-rtos mbed
Diff: main.cpp
- Revision:
- 0:5ffec551c755
- Child:
- 1:b6b866a58a87
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 18 05:48:12 2014 +0000 @@ -0,0 +1,88 @@ +#include "mbed.h" +#include "PinDetect.h" +#include "rtos.h" + +const int BUZZERS = 3; +const int LETTERS = 27; + +Serial pc(USBTX, USBRX); +PinDetect buttons [3] = { + PinDetect(D15), + PinDetect(D14), + PinDetect(D13) +}; + +// Note: there are only THREE PWMs on the board. So this is all we can use +// for this particular method of sound output. +PwmOut buzzers [3] = { + PwmOut(D0), + PwmOut(D2), + PwmOut(D3) +}; +// Periods of notes in microseconds +int notePeriods [8] = { + 3818, // C4 + 3412, // D4 + 3030, // E4 + 2895, // F4 + 2551, // G4 + 2273, // A4 + 2024, // B4 + 10000000 // inaudible pitch +}; +int chords [LETTERS][BUZZERS] = { + {0, 7, 7}, // single notes + {1, 7, 7}, + {2, 7, 7}, + {3, 7, 7}, + {4, 7, 7}, + {5, 7, 7}, + {6, 7, 7}, + {0, 2, 7}, // diads + {0, 3, 7}, + {0, 4, 7}, + {0, 5, 7}, + {1, 3, 7}, + {1, 4, 7}, + {1, 5, 7}, + {1, 6, 7}, + {2, 4, 7}, + {2, 5, 7}, + {2, 6, 7}, + {3, 4, 7}, + {3, 5, 7}, + {4, 6, 7}, + {0, 2, 4}, // triads + {0, 2, 5}, + {0, 3, 5}, + {1, 4, 6}, + {1, 3, 4}, + {1, 3, 6} +}; + +void playAllChords(void) { + for (int i = 0; i < LETTERS; i++) { + int *chord = chords[i]; + for (int j = 0; j < BUZZERS; j++) { + int noteIndex = chord[j]; + if (noteIndex == 7) { + buzzers[j] = 0; + } + else { + buzzers[j] = .5f; + int period = notePeriods[noteIndex]; + buzzers[j].period_us(period); + } + } + wait_ms(1000); + } +} + +int main() { + // Initialize all duty cycles to off, so we hear nothing. + for (int i = 0; i < BUZZERS; i++) { + buzzers[i] = 0.0f; + } + pc.printf("%c\n", 97); + // playAllChords(); +} \ No newline at end of file