this test code is used to test trigger a Canon T2i DSLR camera using its 2.5mm bulb trigger input signals. A 4-LED diaplay is presented to the camera used to measure the time between the trigger input and the actual recorded image.

Dependencies:   mbed

Committer:
jekain314
Date:
Sun Apr 21 12:39:43 2013 +0000
Revision:
0:7a527a9bedce
Child:
1:7972095b7aea
Jekain added comments to Sam's test code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jekain314 0:7a527a9bedce 1 #include "mbed.h"
jekain314 0:7a527a9bedce 2
jekain314 0:7a527a9bedce 3 //are these actually used ???
jekain314 0:7a527a9bedce 4 DigitalOut ext_led[8] = {p21,p22,p23,p24,p25,p26,p27,p28};
jekain314 0:7a527a9bedce 5 //DigitalOut int_led[4] = {LED1, LED2, LED3, LED4};
jekain314 0:7a527a9bedce 6
jekain314 0:7a527a9bedce 7 // from handbook for BusOut: Flexible way to write multiple DigitalOut pins as one value
jekain314 0:7a527a9bedce 8 BusOut int_led(LED1, LED2, LED3, LED4); //four built-in LEDs used to display the counter from the trigger
jekain314 0:7a527a9bedce 9
jekain314 0:7a527a9bedce 10 DigitalInOut fire(p20); //connected to the tip of 2.5mm connector (T2i)
jekain314 0:7a527a9bedce 11 DigitalInOut pre_fire(p19); //connected to the mid-connection for 2.5mm connector (T2i)
jekain314 0:7a527a9bedce 12
jekain314 0:7a527a9bedce 13 InterruptIn x(p18);
jekain314 0:7a527a9bedce 14 Serial pc(USBTX, USBRX);
jekain314 0:7a527a9bedce 15
jekain314 0:7a527a9bedce 16
jekain314 0:7a527a9bedce 17 #define US_INTERVAL 500
jekain314 0:7a527a9bedce 18
jekain314 0:7a527a9bedce 19 //set the resolution of the timing information
jekain314 0:7a527a9bedce 20 #define MS_INTERVAL 2 //interval used to change the counter display
jekain314 0:7a527a9bedce 21
jekain314 0:7a527a9bedce 22 void resetLed()
jekain314 0:7a527a9bedce 23 {
jekain314 0:7a527a9bedce 24 for(int i=0; i<8; i++)
jekain314 0:7a527a9bedce 25 {
jekain314 0:7a527a9bedce 26 ext_led[i] = 0;
jekain314 0:7a527a9bedce 27 }
jekain314 0:7a527a9bedce 28 int_led = 0;
jekain314 0:7a527a9bedce 29 }
jekain314 0:7a527a9bedce 30
jekain314 0:7a527a9bedce 31 //xFire procedure is not used in the logic in main
jekain314 0:7a527a9bedce 32 void xFire()
jekain314 0:7a527a9bedce 33 {
jekain314 0:7a527a9bedce 34 for(int i=1; i<16; i++)
jekain314 0:7a527a9bedce 35 {
jekain314 0:7a527a9bedce 36 wait_us(US_INTERVAL);
jekain314 0:7a527a9bedce 37 int_led = i;
jekain314 0:7a527a9bedce 38 }
jekain314 0:7a527a9bedce 39 return;
jekain314 0:7a527a9bedce 40 }
jekain314 0:7a527a9bedce 41
jekain314 0:7a527a9bedce 42 volatile bool trigger = 0;
jekain314 0:7a527a9bedce 43 Ticker trig;
jekain314 0:7a527a9bedce 44 void setTrig()
jekain314 0:7a527a9bedce 45 {
jekain314 0:7a527a9bedce 46 trigger = 1;
jekain314 0:7a527a9bedce 47 }
jekain314 0:7a527a9bedce 48
jekain314 0:7a527a9bedce 49 int main()
jekain314 0:7a527a9bedce 50 {
jekain314 0:7a527a9bedce 51 // try open drain driving (internal pullup in camera?)
jekain314 0:7a527a9bedce 52 //x procedure not used below
jekain314 0:7a527a9bedce 53 x.mode(PullUp);
jekain314 0:7a527a9bedce 54 x.fall(&xFire);
jekain314 0:7a527a9bedce 55
jekain314 0:7a527a9bedce 56 fire.output(); //set the fire pin as outoput
jekain314 0:7a527a9bedce 57 pre_fire.output(); //set the pre-fire pin as output
jekain314 0:7a527a9bedce 58 //fire.mode(OpenDrain);
jekain314 0:7a527a9bedce 59
jekain314 0:7a527a9bedce 60 //set up for the first trigger
jekain314 0:7a527a9bedce 61 fire = 1;
jekain314 0:7a527a9bedce 62 pre_fire = 1;
jekain314 0:7a527a9bedce 63
jekain314 0:7a527a9bedce 64 // reset the LED's
jekain314 0:7a527a9bedce 65 resetLed();
jekain314 0:7a527a9bedce 66
jekain314 0:7a527a9bedce 67 //trig is a ticker used to repeatedly fire a trigger at the interval (e.g., 7.5 secs)
jekain314 0:7a527a9bedce 68 trig.attach(&setTrig, 7.5f); //set ticker interval to 7.5secs
jekain314 0:7a527a9bedce 69
jekain314 0:7a527a9bedce 70 // start the program
jekain314 0:7a527a9bedce 71 while(1)
jekain314 0:7a527a9bedce 72 {
jekain314 0:7a527a9bedce 73 // if(pc.readable()) //used to trigger from a keyboard click
jekain314 0:7a527a9bedce 74 // {
jekain314 0:7a527a9bedce 75 // char ch = pc.getc(); //read the keyboard click
jekain314 0:7a527a9bedce 76
jekain314 0:7a527a9bedce 77 //below used for repeatedly triggering on a ticker
jekain314 0:7a527a9bedce 78 if(trigger) //is the ticker has fired the trigger, proceed ...
jekain314 0:7a527a9bedce 79 {
jekain314 0:7a527a9bedce 80 trigger = 0; //reset the trigger to zero
jekain314 0:7a527a9bedce 81
jekain314 0:7a527a9bedce 82 // turn all leds off to start the counter
jekain314 0:7a527a9bedce 83 resetLed();
jekain314 0:7a527a9bedce 84
jekain314 0:7a527a9bedce 85 // pre-fire the trigger using the mid-body 2.5mm connection (T2i)
jekain314 0:7a527a9bedce 86 pre_fire = 0;
jekain314 0:7a527a9bedce 87
jekain314 0:7a527a9bedce 88 wait(.25f); //wait for 0.25 secs
jekain314 0:7a527a9bedce 89
jekain314 0:7a527a9bedce 90 fire = 0; //fire the trigger using the tip connection
jekain314 0:7a527a9bedce 91
jekain314 0:7a527a9bedce 92 wait(0.100f); // empirically known delay to get us to the range of the 4 timing LEDs
jekain314 0:7a527a9bedce 93
jekain314 0:7a527a9bedce 94 // maybe we need more or later just use these...
jekain314 0:7a527a9bedce 95 //just count up to 16 diaplaying the results on the LEDs
jekain314 0:7a527a9bedce 96 for(int i=1; i<16; i++)
jekain314 0:7a527a9bedce 97 {
jekain314 0:7a527a9bedce 98 wait_ms(MS_INTERVAL);
jekain314 0:7a527a9bedce 99 int_led = i; //write to the BusOut to display the counter on 4 LEDs
jekain314 0:7a527a9bedce 100 }
jekain314 0:7a527a9bedce 101
jekain314 0:7a527a9bedce 102 //reset for the next trigger
jekain314 0:7a527a9bedce 103 // release the trigger
jekain314 0:7a527a9bedce 104 fire = 1;
jekain314 0:7a527a9bedce 105 pre_fire = 1;
jekain314 0:7a527a9bedce 106 }
jekain314 0:7a527a9bedce 107 }
jekain314 0:7a527a9bedce 108 }