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.
main.cpp
- Committer:
- jekain314
- Date:
- 2013-04-21
- Revision:
- 0:7a527a9bedce
- Child:
- 1:7972095b7aea
File content as of revision 0:7a527a9bedce:
#include "mbed.h" //are these actually used ??? DigitalOut ext_led[8] = {p21,p22,p23,p24,p25,p26,p27,p28}; //DigitalOut int_led[4] = {LED1, LED2, LED3, LED4}; // from handbook for BusOut: Flexible way to write multiple DigitalOut pins as one value BusOut int_led(LED1, LED2, LED3, LED4); //four built-in LEDs used to display the counter from the trigger DigitalInOut fire(p20); //connected to the tip of 2.5mm connector (T2i) DigitalInOut pre_fire(p19); //connected to the mid-connection for 2.5mm connector (T2i) InterruptIn x(p18); Serial pc(USBTX, USBRX); #define US_INTERVAL 500 //set the resolution of the timing information #define MS_INTERVAL 2 //interval used to change the counter display void resetLed() { for(int i=0; i<8; i++) { ext_led[i] = 0; } int_led = 0; } //xFire procedure is not used in the logic in main void xFire() { for(int i=1; i<16; i++) { wait_us(US_INTERVAL); int_led = i; } return; } volatile bool trigger = 0; Ticker trig; void setTrig() { trigger = 1; } int main() { // try open drain driving (internal pullup in camera?) //x procedure not used below x.mode(PullUp); x.fall(&xFire); fire.output(); //set the fire pin as outoput pre_fire.output(); //set the pre-fire pin as output //fire.mode(OpenDrain); //set up for the first trigger fire = 1; pre_fire = 1; // reset the LED's resetLed(); //trig is a ticker used to repeatedly fire a trigger at the interval (e.g., 7.5 secs) trig.attach(&setTrig, 7.5f); //set ticker interval to 7.5secs // start the program while(1) { // if(pc.readable()) //used to trigger from a keyboard click // { // char ch = pc.getc(); //read the keyboard click //below used for repeatedly triggering on a ticker if(trigger) //is the ticker has fired the trigger, proceed ... { trigger = 0; //reset the trigger to zero // turn all leds off to start the counter resetLed(); // pre-fire the trigger using the mid-body 2.5mm connection (T2i) pre_fire = 0; wait(.25f); //wait for 0.25 secs fire = 0; //fire the trigger using the tip connection wait(0.100f); // empirically known delay to get us to the range of the 4 timing LEDs // maybe we need more or later just use these... //just count up to 16 diaplaying the results on the LEDs for(int i=1; i<16; i++) { wait_ms(MS_INTERVAL); int_led = i; //write to the BusOut to display the counter on 4 LEDs } //reset for the next trigger // release the trigger fire = 1; pre_fire = 1; } } }