![](/media/cache/profiles/89a26a363b87a87ac6a94277e841b7f4.50x50_q85.jpg)
Uses *spark d-fuser controller hardware as a USB-DMX interface. Developed for visualising Laurel Pardue’s augmented violin with lights.
Dependencies: DMX mbed spk_oled_ssd1305
Diff: main.cpp
- Revision:
- 3:642cd9d00b69
- Parent:
- 2:24d9b7a3073c
- Child:
- 4:c8b23ce175f4
diff -r 24d9b7a3073c -r 642cd9d00b69 main.cpp --- a/main.cpp Thu May 14 00:43:18 2015 +0000 +++ b/main.cpp Thu May 14 19:57:40 2015 +0000 @@ -43,6 +43,8 @@ #define kDMX_PARCAN_B 2 #define kDMX_PARCAN_LUMA 3 +#define kDMX_SPOT_DIMMER 31 + #define kDMX_HAZER_HAZE 128 #define kDMX_HAZER_FAN 129 @@ -76,7 +78,8 @@ char usbSerialBuffer[kUSBSerialBufferLength]; int usbSerialBufferPosition = 0; -bool newData = false; +bool newStringData = false; +bool newBowData = false; //// LAUREL VIOLIN DATA @@ -104,34 +107,46 @@ float sMaxFixed = 0.2; float sMultiplier = 255.0/sMaxFixed; +float eMaxFixed = 400; +float eMultiplier = 255.0/eMaxFixed; + void testDMX() { static char state = 1; - int address; - - switch (state) + if (state == 5) + { + dmx.put(kDMX_SPOT_DIMMER, 255); + } + else { - case 1: address = kDMX_PARCAN_1; break; - case 2: address = kDMX_PARCAN_2; break; - case 3: address = kDMX_PARCAN_3; break; - case 4: address = kDMX_PARCAN_4; break; + dmx.put(kDMX_SPOT_DIMMER, 0); + + int address; + + switch (state) + { + case 1: address = kDMX_PARCAN_1; break; + case 2: address = kDMX_PARCAN_2; break; + case 3: address = kDMX_PARCAN_3; break; + case 4: address = kDMX_PARCAN_4; break; + } + + unsigned char parCanData[4]; + parCanData[kDMX_PARCAN_R] = 255; + parCanData[kDMX_PARCAN_G] = 255; + parCanData[kDMX_PARCAN_B] = 255; + parCanData[kDMX_PARCAN_LUMA] = 0; + dmx.put(parCanData, kDMX_PARCAN_1, 4); + dmx.put(parCanData, kDMX_PARCAN_2, 4); + dmx.put(parCanData, kDMX_PARCAN_3, 4); + dmx.put(parCanData, kDMX_PARCAN_4, 4); + + parCanData[kDMX_PARCAN_LUMA] = 255; + dmx.put(parCanData, address, 4); } - unsigned char parCanData[4]; - parCanData[kDMX_PARCAN_R] = 255; - parCanData[kDMX_PARCAN_G] = 255; - parCanData[kDMX_PARCAN_B] = 255; - parCanData[kDMX_PARCAN_LUMA] = 0; - dmx.put(parCanData, kDMX_PARCAN_1, 4); - dmx.put(parCanData, kDMX_PARCAN_2, 4); - dmx.put(parCanData, kDMX_PARCAN_3, 4); - dmx.put(parCanData, kDMX_PARCAN_4, 4); - - parCanData[kDMX_PARCAN_LUMA] = 255; - dmx.put(parCanData, address, 4); - - if (++state > 4) state = 1; + if (++state > 5) state = 1; } inline void processData() @@ -177,13 +192,13 @@ if (scanCount == 7) { - newData = true; + newStringData = true; + newBowData = true; processData(); } else if (scanCount == 4) { - // No bow data - newData = true; + newStringData = true; processData(); } else @@ -269,7 +284,7 @@ // We've finished setting up, now loop this forever... while (true) { - if (newData) + if (newStringData) { char S1DMX = S1 * sMultiplier; char S2DMX = S2 * sMultiplier; @@ -301,7 +316,14 @@ snprintf(dmxSummary, kStringBufferLength, "S %03u %03u %03u %03u", S1DMX, S2DMX, S3DMX, S4DMX); screen.textToBuffer(dmxSummary,6); - newData = false; + newStringData = false; + } + + if (newBowData) + { + if (EB < 0) EB = 0; + char bowDMX = EB * eMultiplier; + dmx.put(kDMX_SPOT_DIMMER, bowDMX); } // Has the button changed?