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: MIDI REnc button mbed
main.cpp@11:e6a47dc75120, 2014-11-27 (annotated)
- Committer:
- ChuckTimber
- Date:
- Thu Nov 27 06:47:43 2014 +0000
- Revision:
- 11:e6a47dc75120
- Parent:
- 10:c3b797b62ddb
Gem8 application 1st launched.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ChuckTimber | 0:3dc89ac1495f | 1 | /** |
| ChuckTimber | 0:3dc89ac1495f | 2 | * @file main.cpp |
| ChuckTimber | 0:3dc89ac1495f | 3 | * Project Gem8 - handles 8-gembox synth project application |
| ChuckTimber | 0:3dc89ac1495f | 4 | * @brief Gem8 project application |
| ChuckTimber | 0:3dc89ac1495f | 5 | * @version 1.0 |
| ChuckTimber | 0:3dc89ac1495f | 6 | * @author Chuck Timber |
| ChuckTimber | 11:e6a47dc75120 | 7 | * @date 11/27/2014 |
| ChuckTimber | 0:3dc89ac1495f | 8 | */ |
| ChuckTimber | 0:3dc89ac1495f | 9 | |
| ChuckTimber | 0:3dc89ac1495f | 10 | #include "mbed.h" |
| ChuckTimber | 11:e6a47dc75120 | 11 | #include "btn2.h" |
| ChuckTimber | 11:e6a47dc75120 | 12 | #include "REnc.h" |
| ChuckTimber | 10:c3b797b62ddb | 13 | #include "MIDI.h" |
| ChuckTimber | 11:e6a47dc75120 | 14 | #include "midi_proc.h" |
| ChuckTimber | 10:c3b797b62ddb | 15 | #include "I2CEEprom.h" |
| ChuckTimber | 1:2760654d0b44 | 16 | |
| ChuckTimber | 11:e6a47dc75120 | 17 | #include "midi_param.h" |
| ChuckTimber | 11:e6a47dc75120 | 18 | |
| ChuckTimber | 1:2760654d0b44 | 19 | // LED (active HIGH) |
| ChuckTimber | 1:2760654d0b44 | 20 | #define dbg_led_on() { } |
| ChuckTimber | 1:2760654d0b44 | 21 | #define dbg_led_off() { } |
| ChuckTimber | 1:2760654d0b44 | 22 | |
| ChuckTimber | 10:c3b797b62ddb | 23 | /// MIDI parameters -- 82-byte (32+32+18) |
| ChuckTimber | 0:3dc89ac1495f | 24 | uint8_t midi_params[]={ |
| ChuckTimber | 0:3dc89ac1495f | 25 | 0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
| ChuckTimber | 0:3dc89ac1495f | 26 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
| ChuckTimber | 0:3dc89ac1495f | 27 | 0,0,0,0,0,0,0,64,0,0,127,0,32,127,0,0,64,32, |
| ChuckTimber | 0:3dc89ac1495f | 28 | }; |
| ChuckTimber | 0:3dc89ac1495f | 29 | |
| ChuckTimber | 11:e6a47dc75120 | 30 | uint8_t midi_cc_conv[] = { |
| ChuckTimber | 11:e6a47dc75120 | 31 | CC_MOD , CC_FMOD , CC_PWMOD , CC_PORTA , |
| ChuckTimber | 11:e6a47dc75120 | 32 | CC_VOL , CC_DAMPER , CC_DETUNE , CC_OSCMIX , |
| ChuckTimber | 11:e6a47dc75120 | 33 | CC_ENV1RELEASE , CC_ENV1ATTACK , CC_ENV1SUSTAIN , CC_ENV1DECAY , |
| ChuckTimber | 11:e6a47dc75120 | 34 | CC_LFORATE , CC_ENV2DECAY , CC_ENV2ATTACK , CC_PW , |
| ChuckTimber | 11:e6a47dc75120 | 35 | CC_CUTOFF , CC_Q |
| ChuckTimber | 11:e6a47dc75120 | 36 | }; |
| ChuckTimber | 11:e6a47dc75120 | 37 | |
| ChuckTimber | 11:e6a47dc75120 | 38 | unsigned int randSeed; |
| ChuckTimber | 11:e6a47dc75120 | 39 | static unsigned int tama; |
| ChuckTimber | 11:e6a47dc75120 | 40 | |
| ChuckTimber | 11:e6a47dc75120 | 41 | |
| ChuckTimber | 11:e6a47dc75120 | 42 | // Random patch |
| ChuckTimber | 11:e6a47dc75120 | 43 | void initRand(int x) { |
| ChuckTimber | 11:e6a47dc75120 | 44 | randSeed=x; |
| ChuckTimber | 11:e6a47dc75120 | 45 | } |
| ChuckTimber | 11:e6a47dc75120 | 46 | int nextRand(void) { |
| ChuckTimber | 11:e6a47dc75120 | 47 | randSeed=(1103515245*randSeed+12345)&2147483647; |
| ChuckTimber | 11:e6a47dc75120 | 48 | return (randSeed>>7)&0x7f; |
| ChuckTimber | 11:e6a47dc75120 | 49 | } |
| ChuckTimber | 11:e6a47dc75120 | 50 | void setupRandom(void) { |
| ChuckTimber | 11:e6a47dc75120 | 51 | srand( tama ); |
| ChuckTimber | 11:e6a47dc75120 | 52 | initRand(rand()); |
| ChuckTimber | 11:e6a47dc75120 | 53 | |
| ChuckTimber | 11:e6a47dc75120 | 54 | //randomset=1; |
| ChuckTimber | 11:e6a47dc75120 | 55 | midi_params[CC_MOD]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 56 | midi_params[CC_FMOD]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 57 | midi_params[CC_PWMOD]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 58 | midi_params[CC_PORTA]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 59 | midi_params[CC_ENV1ATTACK]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 60 | midi_params[CC_ENV1DECAY]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 61 | midi_params[CC_ENV1SUSTAIN]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 62 | midi_params[CC_ENV1RELEASE]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 63 | midi_params[CC_LFORATE]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 64 | midi_params[CC_PW]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 65 | midi_params[CC_OSCMIX]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 66 | midi_params[CC_DETUNE]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 67 | midi_params[CC_ENV2ATTACK]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 68 | midi_params[CC_ENV2DECAY]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 69 | midi_params[CC_CUTOFF]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 70 | midi_params[CC_Q]=nextRand(); |
| ChuckTimber | 11:e6a47dc75120 | 71 | } |
| ChuckTimber | 11:e6a47dc75120 | 72 | |
| ChuckTimber | 11:e6a47dc75120 | 73 | DigitalOut myled(LED2); |
| ChuckTimber | 10:c3b797b62ddb | 74 | I2CEEprom i2crom(dp5, dp27, 0xa0); |
| ChuckTimber | 10:c3b797b62ddb | 75 | MIDI midi(dp16, dp15); |
| ChuckTimber | 11:e6a47dc75120 | 76 | DigitalOut RST(dp26); |
| ChuckTimber | 11:e6a47dc75120 | 77 | BTN2 btn2(dp13); |
| ChuckTimber | 0:3dc89ac1495f | 78 | |
| ChuckTimber | 0:3dc89ac1495f | 79 | |
| ChuckTimber | 0:3dc89ac1495f | 80 | int main() { |
| ChuckTimber | 11:e6a47dc75120 | 81 | int i; |
| ChuckTimber | 11:e6a47dc75120 | 82 | |
| ChuckTimber | 11:e6a47dc75120 | 83 | RST = 0; |
| ChuckTimber | 11:e6a47dc75120 | 84 | myled = 1; |
| ChuckTimber | 11:e6a47dc75120 | 85 | srand( 0 ); |
| ChuckTimber | 11:e6a47dc75120 | 86 | initRand(rand()); |
| ChuckTimber | 11:e6a47dc75120 | 87 | |
| ChuckTimber | 11:e6a47dc75120 | 88 | wait(1.0); |
| ChuckTimber | 11:e6a47dc75120 | 89 | RST = 1; |
| ChuckTimber | 11:e6a47dc75120 | 90 | |
| ChuckTimber | 11:e6a47dc75120 | 91 | midi_init(); |
| ChuckTimber | 11:e6a47dc75120 | 92 | wait(1.0); |
| ChuckTimber | 11:e6a47dc75120 | 93 | |
| ChuckTimber | 11:e6a47dc75120 | 94 | for (i = 0; i < sizeof(midi_cc_conv); i++) { |
| ChuckTimber | 11:e6a47dc75120 | 95 | midi.sendControlChange(midi_cc_conv[i], midi_params[midi_cc_conv[i]], 1); |
| ChuckTimber | 11:e6a47dc75120 | 96 | } |
| ChuckTimber | 11:e6a47dc75120 | 97 | myled = 0; |
| ChuckTimber | 11:e6a47dc75120 | 98 | |
| ChuckTimber | 11:e6a47dc75120 | 99 | // midi.setInputChannel(1); |
| ChuckTimber | 5:7d7be4c72d21 | 100 | |
| ChuckTimber | 0:3dc89ac1495f | 101 | while(1) { |
| ChuckTimber | 11:e6a47dc75120 | 102 | if (midi.read()) { |
| ChuckTimber | 11:e6a47dc75120 | 103 | tama++; |
| ChuckTimber | 11:e6a47dc75120 | 104 | } |
| ChuckTimber | 10:c3b797b62ddb | 105 | |
| ChuckTimber | 11:e6a47dc75120 | 106 | |
| ChuckTimber | 11:e6a47dc75120 | 107 | switch (btn2.CMD2) { |
| ChuckTimber | 11:e6a47dc75120 | 108 | case 1: |
| ChuckTimber | 11:e6a47dc75120 | 109 | myled = 1; |
| ChuckTimber | 11:e6a47dc75120 | 110 | setupRandom(); |
| ChuckTimber | 11:e6a47dc75120 | 111 | for (i = 0; i < sizeof(midi_params); i++) { |
| ChuckTimber | 11:e6a47dc75120 | 112 | midi.sendControlChange(i, midi_params[i], 1); |
| ChuckTimber | 11:e6a47dc75120 | 113 | } |
| ChuckTimber | 11:e6a47dc75120 | 114 | myled = 0; |
| ChuckTimber | 11:e6a47dc75120 | 115 | btn2.CMD2 = 0; |
| ChuckTimber | 11:e6a47dc75120 | 116 | break; |
| ChuckTimber | 11:e6a47dc75120 | 117 | case 2: |
| ChuckTimber | 11:e6a47dc75120 | 118 | RST = 0; |
| ChuckTimber | 11:e6a47dc75120 | 119 | myled = 1; |
| ChuckTimber | 11:e6a47dc75120 | 120 | wait(1.0); |
| ChuckTimber | 11:e6a47dc75120 | 121 | RST = 1; |
| ChuckTimber | 11:e6a47dc75120 | 122 | for (i = 0; i < sizeof(midi_cc_conv); i++) { |
| ChuckTimber | 11:e6a47dc75120 | 123 | midi.sendControlChange(midi_cc_conv[i], midi_params[midi_cc_conv[i]], 1); |
| ChuckTimber | 11:e6a47dc75120 | 124 | } |
| ChuckTimber | 11:e6a47dc75120 | 125 | myled = 0; |
| ChuckTimber | 11:e6a47dc75120 | 126 | btn2.CMD2 = 0; |
| ChuckTimber | 11:e6a47dc75120 | 127 | break; |
| ChuckTimber | 11:e6a47dc75120 | 128 | } |
| ChuckTimber | 11:e6a47dc75120 | 129 | |
| ChuckTimber | 0:3dc89ac1495f | 130 | } |
| ChuckTimber | 0:3dc89ac1495f | 131 | } |
| ChuckTimber | 0:3dc89ac1495f | 132 |