Chuck Timber / Mbed 2 deprecated Gemphet8

Dependencies:   MIDI REnc button mbed

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?

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