This is a Library I have created for a Project, the aim being to send the shutter release trigger signal to my Nikon D40x DSLR using an IR led. The code defaults to a 38.4KHz oscilation but can be set to any frequency.
Pulse.cpp@0:083159111741, 2010-12-01 (annotated)
- Committer:
- hazanjon
- Date:
- Wed Dec 01 00:36:04 2010 +0000
- Revision:
- 0:083159111741
Beta
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hazanjon | 0:083159111741 | 1 | |
hazanjon | 0:083159111741 | 2 | #include "Pulse.h" |
hazanjon | 0:083159111741 | 3 | #include "mbed.h" |
hazanjon | 0:083159111741 | 4 | |
hazanjon | 0:083159111741 | 5 | Pulse::Pulse(PinName pin) : output_pin(pin) { |
hazanjon | 0:083159111741 | 6 | output_pin = 0; |
hazanjon | 0:083159111741 | 7 | switch_state = false; |
hazanjon | 0:083159111741 | 8 | oscilation = 38400; //Set default oscilation to 38.4KHz |
hazanjon | 0:083159111741 | 9 | } |
hazanjon | 0:083159111741 | 10 | |
hazanjon | 0:083159111741 | 11 | void Pulse::send_pulse(int* sequence){ |
hazanjon | 0:083159111741 | 12 | int num_switches = (sizeof(sequence)/sizeof(int)); |
hazanjon | 0:083159111741 | 13 | int tick = 1000000/oscilation; |
hazanjon | 0:083159111741 | 14 | for(int i = 0; i < num_switches; i++){ |
hazanjon | 0:083159111741 | 15 | if(i % 2 == 0){ |
hazanjon | 0:083159111741 | 16 | change_state(); |
hazanjon | 0:083159111741 | 17 | output_pin = 1; |
hazanjon | 0:083159111741 | 18 | flipper.attach_us(this, &Pulse::flip_pin, tick); |
hazanjon | 0:083159111741 | 19 | wait_us(sequence[i]); |
hazanjon | 0:083159111741 | 20 | flipper.detach(); |
hazanjon | 0:083159111741 | 21 | change_state(); |
hazanjon | 0:083159111741 | 22 | output_pin = 0; |
hazanjon | 0:083159111741 | 23 | }else{ |
hazanjon | 0:083159111741 | 24 | wait_us(sequence[i]); |
hazanjon | 0:083159111741 | 25 | } |
hazanjon | 0:083159111741 | 26 | } |
hazanjon | 0:083159111741 | 27 | } |
hazanjon | 0:083159111741 | 28 | |
hazanjon | 0:083159111741 | 29 | void Pulse::set_osc(int khz){ |
hazanjon | 0:083159111741 | 30 | if(khz > 0 && khz <= 250000) //Make sure that the new oscilation is positive and also less than 250KHz |
hazanjon | 0:083159111741 | 31 | oscilation = khz; |
hazanjon | 0:083159111741 | 32 | } |
hazanjon | 0:083159111741 | 33 | |
hazanjon | 0:083159111741 | 34 | void Pulse::set_pin(PinName pin){ |
hazanjon | 0:083159111741 | 35 | output_pin = pin; |
hazanjon | 0:083159111741 | 36 | } |
hazanjon | 0:083159111741 | 37 | |
hazanjon | 0:083159111741 | 38 | void Pulse::flip_pin(){ |
hazanjon | 0:083159111741 | 39 | if(switch_state) //Stop the output from switching unless it is meant to be transmitting |
hazanjon | 0:083159111741 | 40 | output_pin = !output_pin; |
hazanjon | 0:083159111741 | 41 | else |
hazanjon | 0:083159111741 | 42 | output_pin = 0; |
hazanjon | 0:083159111741 | 43 | } |
hazanjon | 0:083159111741 | 44 | |
hazanjon | 0:083159111741 | 45 | void Pulse::change_state(){ |
hazanjon | 0:083159111741 | 46 | switch_state = !switch_state; |
hazanjon | 0:083159111741 | 47 | } |
hazanjon | 0:083159111741 | 48 | |
hazanjon | 0:083159111741 | 49 | |
hazanjon | 0:083159111741 | 50 |