A DMX based Dowser for projectors.

Dependencies:   DMX-K46Z SLCD Servo mbed

This is an update to map to the Freescale platform. DMX 512.

Committer:
rosienej
Date:
Thu Mar 26 17:11:27 2015 +0000
Revision:
1:088d1710de36
Parent:
0:216a04cfcd28
comments and doc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosienej 0:216a04cfcd28 1 #include "mbed.h"
rosienej 0:216a04cfcd28 2 #include "SLCD.h"
rosienej 0:216a04cfcd28 3 #include "Servo.h"
rosienej 0:216a04cfcd28 4 #include "DMX.h"
rosienej 0:216a04cfcd28 5
rosienej 0:216a04cfcd28 6 // The Switch Resources
rosienej 0:216a04cfcd28 7 DigitalOut S1o(PTB19);
rosienej 0:216a04cfcd28 8 DigitalOut S2o(PTC7);
rosienej 0:216a04cfcd28 9
rosienej 0:216a04cfcd28 10 DigitalOut LD1(LED1);
rosienej 0:216a04cfcd28 11 DigitalOut LD2(LED2);
rosienej 0:216a04cfcd28 12
rosienej 0:216a04cfcd28 13
rosienej 0:216a04cfcd28 14 DigitalIn S1i0(PTD3,PullDown);
rosienej 0:216a04cfcd28 15 DigitalIn S1i1(PTB18,PullDown);
rosienej 0:216a04cfcd28 16
rosienej 0:216a04cfcd28 17 DigitalIn S2i0(PTC8,PullDown);
rosienej 0:216a04cfcd28 18 DigitalIn S2i1(PTC6,PullDown);
rosienej 0:216a04cfcd28 19
rosienej 0:216a04cfcd28 20
rosienej 0:216a04cfcd28 21 // The LCD display
rosienej 0:216a04cfcd28 22
rosienej 0:216a04cfcd28 23 SLCD slcd;
rosienej 0:216a04cfcd28 24
rosienej 0:216a04cfcd28 25 // The Servo
rosienej 0:216a04cfcd28 26 Servo Shutter(PTC1); // put this on a PWM pin
rosienej 0:216a04cfcd28 27
rosienej 0:216a04cfcd28 28 // The DMX protocol
rosienej 1:088d1710de36 29 DMX dmx(PTE22, PTE23); // put it on a serial port DMX (PinName p_tx, PinName p_rx);
rosienej 0:216a04cfcd28 30
rosienej 0:216a04cfcd28 31 int main()
rosienej 0:216a04cfcd28 32 {
rosienej 0:216a04cfcd28 33
rosienej 1:088d1710de36 34 int DMX_ADDR=0; // DMX_ADDR set from the config file
rosienej 1:088d1710de36 35 unsigned int DMX_VALUE=0; // This value is set from the DMX stream
rosienej 1:088d1710de36 36 // unsigned int DMX_LAST_VALUE=0;
rosienej 1:088d1710de36 37 int DMX_MSG_COUNT=0; // A counter for diagnostic purposes
rosienej 1:088d1710de36 38 int DMX_STATUS;
rosienej 0:216a04cfcd28 39
rosienej 1:088d1710de36 40 int position1 =0;
rosienej 1:088d1710de36 41 int position2 =0;
rosienej 1:088d1710de36 42 float pos=0.0;
rosienej 1:088d1710de36 43
rosienej 1:088d1710de36 44
rosienej 0:216a04cfcd28 45 S1o=1;
rosienej 0:216a04cfcd28 46 S2o=1;
rosienej 0:216a04cfcd28 47
rosienej 1:088d1710de36 48 Shutter.calibrate(0.0008,180); // Calibrate the servo
rosienej 1:088d1710de36 49
rosienej 1:088d1710de36 50 /* while (true) {
rosienej 0:216a04cfcd28 51 position1 = S1i0 + (S1i1<<1);
rosienej 0:216a04cfcd28 52 position2 = S2i0 + (S2i1<<1);
rosienej 0:216a04cfcd28 53
rosienej 0:216a04cfcd28 54 slcd.Home();
rosienej 0:216a04cfcd28 55 slcd.printf("%2d",position1*4+position2);
rosienej 0:216a04cfcd28 56
rosienej 1:088d1710de36 57 pos = pos + 0.01;
rosienej 1:088d1710de36 58 pos=(pos>1.0)?0.0:pos;
rosienej 1:088d1710de36 59
rosienej 1:088d1710de36 60 Shutter = pos;
rosienej 1:088d1710de36 61 wait(0.1);
rosienej 1:088d1710de36 62 } */
rosienej 1:088d1710de36 63
rosienej 1:088d1710de36 64 DMX_MSG_COUNT=0; // set the number of (unique) messages so far to zero
rosienej 1:088d1710de36 65 while(true) { // until power off.....
rosienej 1:088d1710de36 66
rosienej 1:088d1710de36 67 position1 = S1i0 + (S1i1<<1);
rosienej 1:088d1710de36 68 position2 = S2i0 + (S2i1<<1);
rosienej 1:088d1710de36 69
rosienej 1:088d1710de36 70 DMX_ADDR = 200+position1*4+position2; // 1 to MaxDMX
rosienej 1:088d1710de36 71
rosienej 1:088d1710de36 72 DMX_STATUS=dmx.get_mode_rx();
rosienej 1:088d1710de36 73 if(DMX_STATUS==DMX_MODE_BEGIN) {LD1= 0; LD2 = 1;}
rosienej 1:088d1710de36 74 if(DMX_STATUS==DMX_MODE_BREAK) {LD1= 1; LD2 = 0;}
rosienej 1:088d1710de36 75 if(DMX_STATUS==DMX_MODE_DATA) {LD1= 1; LD2 = 1;}
rosienej 1:088d1710de36 76 if(DMX_STATUS==DMX_MODE_ERROR) {LD1= 0; LD2 = 0;}
rosienej 1:088d1710de36 77
rosienej 1:088d1710de36 78
rosienej 1:088d1710de36 79 DMX_VALUE= dmx.get(DMX_ADDR-1); // get the data from the stream
rosienej 1:088d1710de36 80 // if(DMX_VALUE == DMX_LAST_VALUE) continue; // ignore if it is the same as the last one
rosienej 1:088d1710de36 81 // best as I can tell, the libary routine has a
rosienej 1:088d1710de36 82 // bug, (is_recived = 1; in break time should be a zero
rosienej 1:088d1710de36 83 // ignoring repeated values has the same result.
rosienej 1:088d1710de36 84
rosienej 1:088d1710de36 85 // DMX_LAST_VALUE = DMX_VALUE;
rosienej 1:088d1710de36 86 DMX_MSG_COUNT++; // update the count
rosienej 1:088d1710de36 87 pos = (1.0*DMX_VALUE)/(1.0*255); // calculate the shutter position
rosienej 1:088d1710de36 88 Shutter.write(pos); // position the servo
rosienej 1:088d1710de36 89 // Print the message
rosienej 1:088d1710de36 90 slcd.Home();
rosienej 1:088d1710de36 91 slcd.printf("%3d ",DMX_ADDR);
rosienej 1:088d1710de36 92 //slcd.printf("%d-->%4.2f",DMX_VALUE,pos);
rosienej 1:088d1710de36 93
rosienej 0:216a04cfcd28 94 }
rosienej 1:088d1710de36 95
rosienej 1:088d1710de36 96
rosienej 0:216a04cfcd28 97 }