https://github.com/kanaya/midi-timer
Dependencies: MIDI mbed-rtos mbed
Revision 0:12da9c671126, committed 2013-10-14
- Comitter:
- kanaya
- Date:
- Mon Oct 14 05:41:11 2013 +0000
- Child:
- 1:cb68a764ab9d
- Commit message:
- Released on 2013-10-14.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MIDI.lib Mon Oct 14 05:41:11 2013 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/okini3939/code/MIDI/#0eeca7deec08
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Oct 14 05:41:11 2013 +0000
@@ -0,0 +1,106 @@
+// Wire
+// 09 I2C
+// 10 I2C
+// 11 Analog Switch A (on-intervals)
+// 12 Analog Switch B (off-intervals)
+// 13 TX (MIDI OUT)
+// 15 VR A1/B1
+// 16 VR A2/B2
+// 17 VR A3/B3
+// 18 VR A4/B4
+// 19 VR C1
+
+#include "mbed.h"
+#include "rtos.h"
+#include "MIDI.h"
+
+#define MILISECOND 1000
+#define INTERVAL 5
+#define RANDOMNESS 10
+
+#define MIN_OFF_INTERVAL 100
+#define MIN_ON_INTERVAL 10
+
+Serial pc(USBTX, USBRX);
+
+int notes[4] = { 60, 64, 67, 71 };
+
+Mutex midiMutex;
+Mutex vrSelectorMutex;
+
+MIDI midi(p13, p14);
+
+DigitalOut vrSelectorA(p11);
+DigitalOut vrSelectorB(p12);
+
+AnalogIn vr1(p15);
+AnalogIn vr2(p16);
+AnalogIn vr3(p17);
+AnalogIn vr4(p18);
+AnalogIn vr5(p19);
+
+AnalogIn vrs[4] = { vr1, vr2, vr3, vr4 };
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+DigitalOut leds[4] = { led1, led2, led3, led4 };
+
+void led_thread(void const *args) {
+ int num = *(int *)args;
+ while (true) {
+ // Send MIDI note off
+ leds[num] = 0;
+ midiMutex.lock();
+ midi.sendNoteOn(notes[num], 0, num + 1);
+ midiMutex.unlock();
+ // Read parameters
+ vrSelectorMutex.lock();
+ vrSelectorA = 1; vrSelectorB = 0;
+ Thread::wait(1);
+ float a = vrs[num];
+ vrSelectorA = 0; vrSelectorB = 1;
+ Thread::wait(1);
+ float b = vrs[num];
+ vrSelectorMutex.unlock();
+ float c = vr5;
+ float randomness1 = ((float)rand() / (float)RAND_MAX * RANDOMNESS * 2.0 - RANDOMNESS) * c;
+ float randomness2 = ((float)rand() / (float)RAND_MAX * RANDOMNESS * 2.0 - RANDOMNESS) * c;
+ int interval1 = (a * 60 + randomness1) * MILISECOND;
+ int interval2 = (b * 60 + randomness2) * MILISECOND;
+ if (interval1 <= 0) {
+ interval1 = 0;
+ }
+ if (interval2 <= 0) {
+ interval2 = 0;
+ }
+ pc.printf("ch.%d: off_interval=%d, on_interval=%d\n", num + 1, interval2, interval1);
+ // Off-interval
+ Thread::wait(interval2 + MIN_OFF_INTERVAL);
+ // Send MIDI note on
+ leds[num] = 1;
+ midiMutex.lock();
+ midi.sendNoteOn(notes[num], 127, num + 1);
+ midiMutex.unlock();
+ // On-interval
+ Thread::wait(interval1 + MIN_ON_INTERVAL);
+ }
+}
+
+int main() {
+ pc.printf("Hello.\n");
+
+ srand(1);
+ midi.begin();
+ // readVRs();
+ int one = 0, two = 1, three = 2, four = 3;
+ Thread thread1(led_thread, &one);
+ Thread thread2(led_thread, &two);
+ Thread thread3(led_thread, &three);
+ Thread thread4(led_thread, &four);
+ while (true) {
+ Thread::wait(INTERVAL * MILISECOND);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Mon Oct 14 05:41:11 2013 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed-rtos/#ee87e782d34f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Oct 14 05:41:11 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f \ No newline at end of file