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

Committer:
tobyspark
Date:
Fri Jun 17 14:07:40 2016 +0000
Revision:
7:7f3140672370
Parent:
6:cd5846520ea6
Pan+Tilt for bow

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tobyspark 0:59b1d685427c 1 #include "mbed.h"
tobyspark 0:59b1d685427c 2 #include "DMX.h"
tobyspark 0:59b1d685427c 3 #include "spk_oled_ssd1305.h"
tobyspark 0:59b1d685427c 4 #include "spk_oled_gfx.h"
tobyspark 0:59b1d685427c 5
tobyspark 1:f0cc153fe8d3 6 // https://developer.mbed.org/forum/mbed/post/4526/
tobyspark 1:f0cc153fe8d3 7 // 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200, 230400, 460800, 921600
tobyspark 0:59b1d685427c 8 #define kUSB_BAUD 57600
tobyspark 0:59b1d685427c 9
tobyspark 0:59b1d685427c 10 // MBED PINS
tobyspark 0:59b1d685427c 11
tobyspark 0:59b1d685427c 12 #define kMBED_AIN_XFADE p20
tobyspark 0:59b1d685427c 13 #define kMBED_AIN_FADEUP p19
tobyspark 0:59b1d685427c 14 #define kMBED_DIN_TAP_L p24
tobyspark 0:59b1d685427c 15 #define kMBED_DIN_TAP_R p23
tobyspark 0:59b1d685427c 16 #define kMBED_ENC_SW p15
tobyspark 0:59b1d685427c 17 #define kMBED_ENC_A p16
tobyspark 0:59b1d685427c 18 #define kMBED_ENC_B p17
tobyspark 0:59b1d685427c 19
tobyspark 0:59b1d685427c 20 #define kMBED_RS232_TTLTX p13
tobyspark 0:59b1d685427c 21 #define kMBED_RS232_TTLRX p14
tobyspark 0:59b1d685427c 22
tobyspark 0:59b1d685427c 23 #define kMBED_OLED_MOSI p5
tobyspark 0:59b1d685427c 24 #define kMBED_OLED_SCK p7
tobyspark 0:59b1d685427c 25 #define kMBED_OLED_CS p8
tobyspark 0:59b1d685427c 26 #define kMBED_OLED_RES p9
tobyspark 0:59b1d685427c 27 #define kMBED_OLED_DC p10
tobyspark 0:59b1d685427c 28
tobyspark 0:59b1d685427c 29 #define kMBED_DIN_ETHLO_DMXHI p30
tobyspark 0:59b1d685427c 30 #define kMBED_DOUT_RS485_TXHI_RXLO p29
tobyspark 0:59b1d685427c 31 #define kMBED_RS485_TTLTX p28
tobyspark 0:59b1d685427c 32 #define kMBED_RS485_TTLRX p27
tobyspark 0:59b1d685427c 33
tobyspark 0:59b1d685427c 34 // DMX Fixtures
tobyspark 0:59b1d685427c 35
tobyspark 4:c8b23ce175f4 36 #define kDMX_PARCAN_1 8 - 1
tobyspark 4:c8b23ce175f4 37 #define kDMX_PARCAN_2 12 - 1
tobyspark 4:c8b23ce175f4 38 #define kDMX_PARCAN_3 16 - 1
tobyspark 4:c8b23ce175f4 39 #define kDMX_PARCAN_4 20 - 1
tobyspark 0:59b1d685427c 40
tobyspark 5:1fe29795851a 41 #define kDMX_PARCAN_LUMA 0
tobyspark 5:1fe29795851a 42 #define kDMX_PARCAN_R 1
tobyspark 5:1fe29795851a 43 #define kDMX_PARCAN_G 2
tobyspark 5:1fe29795851a 44 #define kDMX_PARCAN_B 3
tobyspark 0:59b1d685427c 45
tobyspark 5:1fe29795851a 46 #define kDMX_SPOT_DIMMER 32 - 1
tobyspark 3:642cd9d00b69 47
tobyspark 7:7f3140672370 48 #define kDMX_PAN 36 - 1
tobyspark 7:7f3140672370 49 #define kDMX_TILT_MSB 37 - 1
tobyspark 7:7f3140672370 50 #define kDMX_TILT_LSB 38 - 1
tobyspark 7:7f3140672370 51
tobyspark 2:24d9b7a3073c 52 #define kDMX_HAZER_HAZE 128
tobyspark 2:24d9b7a3073c 53 #define kDMX_HAZER_FAN 129
tobyspark 2:24d9b7a3073c 54
tobyspark 0:59b1d685427c 55 // MISC Defines
tobyspark 0:59b1d685427c 56
tobyspark 0:59b1d685427c 57 #define kStringBufferLength 30
tobyspark 1:f0cc153fe8d3 58 #define kUSBSerialBufferLength 256
tobyspark 0:59b1d685427c 59
tobyspark 0:59b1d685427c 60 //// USB Serial
tobyspark 0:59b1d685427c 61
tobyspark 0:59b1d685427c 62 Serial usbSerial(USBTX, USBRX);
tobyspark 0:59b1d685427c 63
tobyspark 0:59b1d685427c 64 //// DMX
tobyspark 0:59b1d685427c 65
tobyspark 0:59b1d685427c 66 DigitalIn rj45ModeDIN(kMBED_DIN_ETHLO_DMXHI);
tobyspark 0:59b1d685427c 67 DigitalOut dmxDirectionDOUT(kMBED_DOUT_RS485_TXHI_RXLO);
tobyspark 0:59b1d685427c 68 enum { rj45Ethernet = 0, rj45DMX = 1}; // These values from circuit
tobyspark 0:59b1d685427c 69
tobyspark 0:59b1d685427c 70 DMX dmx(kMBED_RS485_TTLTX, kMBED_RS485_TTLRX);
tobyspark 0:59b1d685427c 71
tobyspark 0:59b1d685427c 72 //// Display
tobyspark 0:59b1d685427c 73
tobyspark 0:59b1d685427c 74 // SPKDisplay(PinName mosi, PinName clk, PinName cs, PinName dc, PinName res, Serial *debugSerial = NULL);
tobyspark 0:59b1d685427c 75 SPKDisplay screen(kMBED_OLED_MOSI, kMBED_OLED_SCK, kMBED_OLED_CS, kMBED_OLED_DC, kMBED_OLED_RES, NULL);
tobyspark 0:59b1d685427c 76
tobyspark 0:59b1d685427c 77 //// mbed input
tobyspark 0:59b1d685427c 78
tobyspark 0:59b1d685427c 79 DigitalIn button(kMBED_DIN_TAP_L);
tobyspark 2:24d9b7a3073c 80 DigitalIn buttonR(kMBED_DIN_TAP_R);
tobyspark 0:59b1d685427c 81 bool buttonLastState;
tobyspark 0:59b1d685427c 82
tobyspark 1:f0cc153fe8d3 83 char usbSerialBuffer[kUSBSerialBufferLength];
tobyspark 1:f0cc153fe8d3 84 int usbSerialBufferPosition = 0;
tobyspark 3:642cd9d00b69 85 bool newStringData = false;
tobyspark 3:642cd9d00b69 86 bool newBowData = false;
tobyspark 0:59b1d685427c 87
tobyspark 0:59b1d685427c 88 //// LAUREL VIOLIN DATA
tobyspark 0:59b1d685427c 89
tobyspark 0:59b1d685427c 90 // [T: A, B] - T = timestamp. A is the time count (in minutes or something. Not presently very useful), B is sample count. I can change what is creating the stamp. Also, as I'm using sample count, this is only useful/changes when I record.
tobyspark 0:59b1d685427c 91 int TA, TB;
tobyspark 0:59b1d685427c 92
tobyspark 0:59b1d685427c 93 // [P: A, B] - P = pitch. A is hardware estimate- i.e the pitch estimate that is determined solely from the fingerboard data. B is the combined hardware + audio data (more accurate, slightly slower). -1 = no data/not confident enough to estimate
tobyspark 0:59b1d685427c 94 float P1A, P1B, P2A, P2B, P3A, P3B, P4A, P4B;
tobyspark 0:59b1d685427c 95
tobyspark 0:59b1d685427c 96 // [S: A] = signal strength. A is RMS of audio signal in the buffer.
tobyspark 0:59b1d685427c 97 float S1, S2, S3, S4;
tobyspark 0:59b1d685427c 98
tobyspark 0:59b1d685427c 99 // [F: A, B, C, D] = finger on string raw data. generally ranges 1 (no contact) to like .4, 1 being no string down, .9 being low pitch near nut, .4 higher up in pitch closer to the bridge. A is G string (i think)
tobyspark 0:59b1d685427c 100 float F1, F2, F3, F4;
tobyspark 0:59b1d685427c 101
tobyspark 0:59b1d685427c 102 // [B: A, B, C, D] = raw bow data, A is sensor closest to frog, D closest to tip.
tobyspark 0:59b1d685427c 103 float B1, B2, B3, B4;
tobyspark 0:59b1d685427c 104
tobyspark 0:59b1d685427c 105 // [E: A, B, C] = bow Estimate. (currently broken) This should be A - pos estimate (0 to 1 normalized frog to tip), B- pressure (0 -400?) and C- on string/off (0, 1 if B is > 40) 0 for A/B means it isn't ready to estimate. -1 means bow off string.
tobyspark 0:59b1d685427c 106 float EA, EB;
tobyspark 0:59b1d685427c 107 int EC;
tobyspark 0:59b1d685427c 108
tobyspark 0:59b1d685427c 109 // TOBY VIOLIN EXTRAS
tobyspark 0:59b1d685427c 110
tobyspark 4:c8b23ce175f4 111 float sMaxFixed = 0.1;
tobyspark 2:24d9b7a3073c 112 float sMultiplier = 255.0/sMaxFixed;
tobyspark 2:24d9b7a3073c 113
tobyspark 3:642cd9d00b69 114 float eMaxFixed = 400;
tobyspark 3:642cd9d00b69 115 float eMultiplier = 255.0/eMaxFixed;
tobyspark 3:642cd9d00b69 116
tobyspark 2:24d9b7a3073c 117 void testDMX()
tobyspark 2:24d9b7a3073c 118 {
tobyspark 2:24d9b7a3073c 119 static char state = 1;
tobyspark 2:24d9b7a3073c 120
tobyspark 3:642cd9d00b69 121 if (state == 5)
tobyspark 3:642cd9d00b69 122 {
tobyspark 3:642cd9d00b69 123 dmx.put(kDMX_SPOT_DIMMER, 255);
tobyspark 3:642cd9d00b69 124 }
tobyspark 3:642cd9d00b69 125 else
tobyspark 2:24d9b7a3073c 126 {
tobyspark 3:642cd9d00b69 127 dmx.put(kDMX_SPOT_DIMMER, 0);
tobyspark 3:642cd9d00b69 128
tobyspark 3:642cd9d00b69 129 int address;
tobyspark 3:642cd9d00b69 130
tobyspark 3:642cd9d00b69 131 switch (state)
tobyspark 3:642cd9d00b69 132 {
tobyspark 3:642cd9d00b69 133 case 1: address = kDMX_PARCAN_1; break;
tobyspark 3:642cd9d00b69 134 case 2: address = kDMX_PARCAN_2; break;
tobyspark 3:642cd9d00b69 135 case 3: address = kDMX_PARCAN_3; break;
tobyspark 3:642cd9d00b69 136 case 4: address = kDMX_PARCAN_4; break;
tobyspark 3:642cd9d00b69 137 }
tobyspark 3:642cd9d00b69 138
tobyspark 3:642cd9d00b69 139 unsigned char parCanData[4];
tobyspark 3:642cd9d00b69 140 parCanData[kDMX_PARCAN_R] = 255;
tobyspark 3:642cd9d00b69 141 parCanData[kDMX_PARCAN_G] = 255;
tobyspark 3:642cd9d00b69 142 parCanData[kDMX_PARCAN_B] = 255;
tobyspark 3:642cd9d00b69 143 parCanData[kDMX_PARCAN_LUMA] = 0;
tobyspark 3:642cd9d00b69 144 dmx.put(parCanData, kDMX_PARCAN_1, 4);
tobyspark 3:642cd9d00b69 145 dmx.put(parCanData, kDMX_PARCAN_2, 4);
tobyspark 3:642cd9d00b69 146 dmx.put(parCanData, kDMX_PARCAN_3, 4);
tobyspark 3:642cd9d00b69 147 dmx.put(parCanData, kDMX_PARCAN_4, 4);
tobyspark 3:642cd9d00b69 148
tobyspark 3:642cd9d00b69 149 parCanData[kDMX_PARCAN_LUMA] = 255;
tobyspark 3:642cd9d00b69 150 dmx.put(parCanData, address, 4);
tobyspark 2:24d9b7a3073c 151 }
tobyspark 2:24d9b7a3073c 152
tobyspark 3:642cd9d00b69 153 if (++state > 5) state = 1;
tobyspark 2:24d9b7a3073c 154 }
tobyspark 2:24d9b7a3073c 155
tobyspark 2:24d9b7a3073c 156 inline void processData()
tobyspark 2:24d9b7a3073c 157 {
tobyspark 2:24d9b7a3073c 158 float sMax = S1;
tobyspark 2:24d9b7a3073c 159 if (sMax < S2) sMax = S2;
tobyspark 2:24d9b7a3073c 160 if (sMax < S3) sMax = S3;
tobyspark 2:24d9b7a3073c 161 if (sMax < S4) sMax = S4;
tobyspark 2:24d9b7a3073c 162
tobyspark 2:24d9b7a3073c 163 float threshold = sMax * 0.7;
tobyspark 2:24d9b7a3073c 164
tobyspark 2:24d9b7a3073c 165 if (S1 < threshold) S1 = 0;
tobyspark 2:24d9b7a3073c 166 if (S2 < threshold) S2 = 0;
tobyspark 2:24d9b7a3073c 167 if (S3 < threshold) S3 = 0;
tobyspark 7:7f3140672370 168 if (S4 < threshold) S4 = 0;
tobyspark 2:24d9b7a3073c 169 }
tobyspark 0:59b1d685427c 170
tobyspark 0:59b1d685427c 171 void usbSerialReceive(void)
tobyspark 0:59b1d685427c 172 {
tobyspark 0:59b1d685427c 173 char receivedChar;
tobyspark 0:59b1d685427c 174
tobyspark 0:59b1d685427c 175 //if data is ready in the buffer
tobyspark 0:59b1d685427c 176 while (usbSerial.readable())
tobyspark 0:59b1d685427c 177 {
tobyspark 0:59b1d685427c 178 receivedChar = usbSerial.getc();
tobyspark 0:59b1d685427c 179
tobyspark 0:59b1d685427c 180 // Is end of line?
tobyspark 0:59b1d685427c 181 if (receivedChar == '\n' || receivedChar == '\r')
tobyspark 0:59b1d685427c 182 {
tobyspark 0:59b1d685427c 183 // [T: 352, 16896000],[P: 196, -1, 196, -1, 196, -1, 196, -1],[S: 0, 0, 0, 0],[F: 1, 1, 1, 1],[B: 0.5346, 0.5781, 0.9043, 0.9029],[E: 0, 0, 0]
tobyspark 0:59b1d685427c 184 int scanCount;
tobyspark 0:59b1d685427c 185 // scanCount = sscanf(
tobyspark 0:59b1d685427c 186 // usbSerialString.c_str(),
tobyspark 0:59b1d685427c 187 // "[T: %d, %d],[P: %f, %f, %f, %f, %f, %f, %f, %f],[S: %f, %f, %f, %f],[F: %f, %f, %f, %f],[B: %f, %f, %f, %f],[E: %f, %f, %d]",
tobyspark 0:59b1d685427c 188 // &TA, &TB, &P1A, &P1B, &P2A, &P2B, &P3A, &P3B, &P4A, &P4B, &S1, &S2, &S3, &S4, &F1, &F2, &F3, &F4, &B1, &B2, &B3, &B4, &EA, &EB, &EC
tobyspark 0:59b1d685427c 189 // );
tobyspark 0:59b1d685427c 190 // if (scanCount == 25)
tobyspark 0:59b1d685427c 191 scanCount = sscanf(
tobyspark 1:f0cc153fe8d3 192 usbSerialBuffer,
tobyspark 0:59b1d685427c 193 "[S: %f, %f, %f, %f],[E: %f, %f, %d]",
tobyspark 0:59b1d685427c 194 &S1, &S2, &S3, &S4, &EA, &EB, &EC
tobyspark 0:59b1d685427c 195 );
tobyspark 0:59b1d685427c 196
tobyspark 0:59b1d685427c 197 if (scanCount == 7)
tobyspark 0:59b1d685427c 198 {
tobyspark 3:642cd9d00b69 199 newStringData = true;
tobyspark 3:642cd9d00b69 200 newBowData = true;
tobyspark 2:24d9b7a3073c 201 processData();
tobyspark 2:24d9b7a3073c 202 }
tobyspark 2:24d9b7a3073c 203 else if (scanCount == 4)
tobyspark 2:24d9b7a3073c 204 {
tobyspark 3:642cd9d00b69 205 newStringData = true;
tobyspark 2:24d9b7a3073c 206 processData();
tobyspark 0:59b1d685427c 207 }
tobyspark 0:59b1d685427c 208 else
tobyspark 0:59b1d685427c 209 {
tobyspark 0:59b1d685427c 210 screen.textToBuffer("Read vars failed", 6);
tobyspark 0:59b1d685427c 211 }
tobyspark 0:59b1d685427c 212
tobyspark 0:59b1d685427c 213 // Clear to start again
tobyspark 1:f0cc153fe8d3 214 usbSerialBufferPosition = 0;
tobyspark 0:59b1d685427c 215 }
tobyspark 1:f0cc153fe8d3 216 else if (usbSerialBufferPosition < kUSBSerialBufferLength)
tobyspark 0:59b1d685427c 217 {
tobyspark 0:59b1d685427c 218 // Build string up
tobyspark 1:f0cc153fe8d3 219 usbSerialBuffer[usbSerialBufferPosition++] = receivedChar;
tobyspark 1:f0cc153fe8d3 220 usbSerialBuffer[usbSerialBufferPosition] = 0;
tobyspark 0:59b1d685427c 221
tobyspark 1:f0cc153fe8d3 222 screen.textToBuffer(usbSerialBuffer,4);
tobyspark 0:59b1d685427c 223 }
tobyspark 0:59b1d685427c 224 }
tobyspark 0:59b1d685427c 225 }
tobyspark 0:59b1d685427c 226
tobyspark 0:59b1d685427c 227 //// M A I N
tobyspark 0:59b1d685427c 228 int main() {
tobyspark 0:59b1d685427c 229
tobyspark 0:59b1d685427c 230 // Set display font
tobyspark 0:59b1d685427c 231 screen.fontStartCharacter = &characterBytesStartChar;
tobyspark 0:59b1d685427c 232 screen.fontEndCharacter = &characterBytesEndChar;
tobyspark 0:59b1d685427c 233 screen.fontCharacters = characterBytes;
tobyspark 0:59b1d685427c 234
tobyspark 0:59b1d685427c 235 // Splash screen
tobyspark 0:59b1d685427c 236 screen.imageToBuffer(spkDisplayLogo);
tobyspark 0:59b1d685427c 237 screen.textToBuffer("SPK:DMXer",0);
tobyspark 0:59b1d685427c 238 screen.textToBuffer("FRATRES 2015",1);
tobyspark 0:59b1d685427c 239 screen.textToBuffer("SW v01",2);
tobyspark 0:59b1d685427c 240 screen.sendBuffer();
tobyspark 0:59b1d685427c 241
tobyspark 0:59b1d685427c 242 if (rj45ModeDIN == rj45DMX) screen.textToBuffer("RJ45: DMX Mode", 3);
tobyspark 0:59b1d685427c 243 else screen.textToBuffer("RJ45: Ethernet Mode", 3);
tobyspark 0:59b1d685427c 244 screen.sendBuffer();
tobyspark 0:59b1d685427c 245
tobyspark 0:59b1d685427c 246 dmxDirectionDOUT = 1;
tobyspark 0:59b1d685427c 247 dmx.start();
tobyspark 0:59b1d685427c 248
tobyspark 0:59b1d685427c 249 dmx.put(kDMX_PARCAN_1+kDMX_PARCAN_R, 255);
tobyspark 0:59b1d685427c 250 dmx.put(kDMX_PARCAN_1+kDMX_PARCAN_G, 255);
tobyspark 0:59b1d685427c 251 dmx.put(kDMX_PARCAN_1+kDMX_PARCAN_B, 255);
tobyspark 0:59b1d685427c 252 dmx.put(kDMX_PARCAN_1+kDMX_PARCAN_LUMA, 0);
tobyspark 0:59b1d685427c 253
tobyspark 0:59b1d685427c 254 dmx.put(kDMX_PARCAN_2+kDMX_PARCAN_R, 255);
tobyspark 0:59b1d685427c 255 dmx.put(kDMX_PARCAN_2+kDMX_PARCAN_G, 255);
tobyspark 0:59b1d685427c 256 dmx.put(kDMX_PARCAN_2+kDMX_PARCAN_B, 255);
tobyspark 0:59b1d685427c 257 dmx.put(kDMX_PARCAN_2+kDMX_PARCAN_LUMA, 0);
tobyspark 0:59b1d685427c 258
tobyspark 0:59b1d685427c 259 dmx.put(kDMX_PARCAN_3+kDMX_PARCAN_R, 255);
tobyspark 0:59b1d685427c 260 dmx.put(kDMX_PARCAN_3+kDMX_PARCAN_G, 255);
tobyspark 0:59b1d685427c 261 dmx.put(kDMX_PARCAN_3+kDMX_PARCAN_B, 255);
tobyspark 0:59b1d685427c 262 dmx.put(kDMX_PARCAN_3+kDMX_PARCAN_LUMA, 0);
tobyspark 0:59b1d685427c 263
tobyspark 0:59b1d685427c 264 dmx.put(kDMX_PARCAN_4+kDMX_PARCAN_R, 255);
tobyspark 0:59b1d685427c 265 dmx.put(kDMX_PARCAN_4+kDMX_PARCAN_G, 255);
tobyspark 0:59b1d685427c 266 dmx.put(kDMX_PARCAN_4+kDMX_PARCAN_B, 255);
tobyspark 0:59b1d685427c 267 dmx.put(kDMX_PARCAN_4+kDMX_PARCAN_LUMA, 0);
tobyspark 0:59b1d685427c 268
tobyspark 7:7f3140672370 269 dmx.put(kDMX_PAN, 50);
tobyspark 7:7f3140672370 270
tobyspark 0:59b1d685427c 271 //// Serial
tobyspark 0:59b1d685427c 272 usbSerial.baud(kUSB_BAUD);
tobyspark 0:59b1d685427c 273 usbSerial.attach(usbSerialReceive);
tobyspark 0:59b1d685427c 274
tobyspark 0:59b1d685427c 275 //// TASK: Prime button change detection
tobyspark 0:59b1d685427c 276 buttonLastState = button;
tobyspark 0:59b1d685427c 277
tobyspark 0:59b1d685427c 278 //// TASK: GO!
tobyspark 0:59b1d685427c 279
tobyspark 0:59b1d685427c 280 // We've finished setting up, now loop this forever...
tobyspark 0:59b1d685427c 281 while (true)
tobyspark 0:59b1d685427c 282 {
tobyspark 3:642cd9d00b69 283 if (newStringData)
tobyspark 0:59b1d685427c 284 {
tobyspark 0:59b1d685427c 285 char S1DMX = S1 * sMultiplier;
tobyspark 0:59b1d685427c 286 char S2DMX = S2 * sMultiplier;
tobyspark 0:59b1d685427c 287 char S3DMX = S3 * sMultiplier;
tobyspark 0:59b1d685427c 288 char S4DMX = S4 * sMultiplier;
tobyspark 2:24d9b7a3073c 289
tobyspark 2:24d9b7a3073c 290 unsigned char parCanData[4];
tobyspark 2:24d9b7a3073c 291 parCanData[kDMX_PARCAN_R] = 255;
tobyspark 2:24d9b7a3073c 292 parCanData[kDMX_PARCAN_G] = 255;
tobyspark 2:24d9b7a3073c 293 parCanData[kDMX_PARCAN_B] = 255;
tobyspark 2:24d9b7a3073c 294
tobyspark 2:24d9b7a3073c 295 parCanData[kDMX_PARCAN_LUMA] = S1DMX;
tobyspark 2:24d9b7a3073c 296 dmx.put(parCanData, kDMX_PARCAN_1, 4);
tobyspark 2:24d9b7a3073c 297
tobyspark 2:24d9b7a3073c 298 parCanData[kDMX_PARCAN_LUMA] = S2DMX;
tobyspark 2:24d9b7a3073c 299 dmx.put(parCanData, kDMX_PARCAN_2, 4);
tobyspark 2:24d9b7a3073c 300
tobyspark 2:24d9b7a3073c 301 parCanData[kDMX_PARCAN_LUMA] = S3DMX;
tobyspark 2:24d9b7a3073c 302 dmx.put(parCanData, kDMX_PARCAN_3, 4);
tobyspark 2:24d9b7a3073c 303
tobyspark 2:24d9b7a3073c 304 parCanData[kDMX_PARCAN_LUMA] = S4DMX;
tobyspark 2:24d9b7a3073c 305 dmx.put(parCanData, kDMX_PARCAN_4, 4);
tobyspark 0:59b1d685427c 306
tobyspark 0:59b1d685427c 307 char dmxSummary[kStringBufferLength];
tobyspark 0:59b1d685427c 308 snprintf(dmxSummary, kStringBufferLength, "S %03u %03u %03u %03u", S1DMX, S2DMX, S3DMX, S4DMX);
tobyspark 0:59b1d685427c 309 screen.textToBuffer(dmxSummary,6);
tobyspark 0:59b1d685427c 310
tobyspark 3:642cd9d00b69 311 newStringData = false;
tobyspark 3:642cd9d00b69 312 }
tobyspark 3:642cd9d00b69 313
tobyspark 3:642cd9d00b69 314 if (newBowData)
tobyspark 3:642cd9d00b69 315 {
tobyspark 7:7f3140672370 316 // EA = Position, EB = Pressure, EC = On string
tobyspark 3:642cd9d00b69 317 if (EB < 0) EB = 0;
tobyspark 3:642cd9d00b69 318 char bowDMX = EB * eMultiplier;
tobyspark 7:7f3140672370 319 if (EC)
tobyspark 7:7f3140672370 320 {
tobyspark 7:7f3140672370 321 dmx.put(kDMX_SPOT_DIMMER, bowDMX);
tobyspark 7:7f3140672370 322 }
tobyspark 7:7f3140672370 323 else
tobyspark 7:7f3140672370 324 {
tobyspark 7:7f3140672370 325 dmx.put(kDMX_SPOT_DIMMER, 0);
tobyspark 7:7f3140672370 326 }
tobyspark 7:7f3140672370 327
tobyspark 7:7f3140672370 328 dmx.put(kDMX_TILT_MSB, 15 + EA * 50);
tobyspark 0:59b1d685427c 329 }
tobyspark 0:59b1d685427c 330
tobyspark 0:59b1d685427c 331 // Has the button changed?
tobyspark 0:59b1d685427c 332 if (button != buttonLastState) {
tobyspark 0:59b1d685427c 333 // If so, lets update the lastState variable and then send an OSC message
tobyspark 0:59b1d685427c 334 buttonLastState = button;
tobyspark 0:59b1d685427c 335
tobyspark 2:24d9b7a3073c 336 if (button)
tobyspark 2:24d9b7a3073c 337 {
tobyspark 2:24d9b7a3073c 338 testDMX();
tobyspark 2:24d9b7a3073c 339 screen.textToBuffer("Sent: /mbed/button 1",5);
tobyspark 2:24d9b7a3073c 340 //dmx.put(kDMX_HAZER_HAZE, 128);
tobyspark 2:24d9b7a3073c 341 //dmx.put(kDMX_HAZER_FAN, 255);
tobyspark 2:24d9b7a3073c 342 }
tobyspark 2:24d9b7a3073c 343 else
tobyspark 2:24d9b7a3073c 344 {
tobyspark 2:24d9b7a3073c 345 screen.textToBuffer("Sent: /mbed/button 0",5);
tobyspark 2:24d9b7a3073c 346 dmx.put(kDMX_HAZER_HAZE, 0);
tobyspark 2:24d9b7a3073c 347 dmx.put(kDMX_HAZER_FAN, 0);
tobyspark 2:24d9b7a3073c 348 }
tobyspark 0:59b1d685427c 349 }
tobyspark 0:59b1d685427c 350
tobyspark 0:59b1d685427c 351 screen.sendBuffer();
tobyspark 0:59b1d685427c 352 }
tobyspark 0:59b1d685427c 353 }