Skip to content
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Cannot retrieve contributors at this time
This program will generate an Infra-Red command for a Nikon camera which will take a picture.
The Camera's shutter mode must be set to remote control:
Nikon: Info button -> release mode -> Quick-response remote.
Created by: Allyn Hunt
Acknowledgements -
This project was made possible using information from the following projects:
Connecting the IR-LED to the GPIO:
Only the dedicated GPIO pins 2 or 3 can be used for this project.
see for more information on GPIO speeds.
// Creat an array for the pulse values:
int nikonCommand[16] = {76, 1058, 15, 61, 15, 137, 15, 1078, 76, 1058, 15, 61, 15, 137, 15, 1078};
// Setup the pin used for the IR LED:
int pinIR_LED = 2;
// Set a delay between pictures:
int delaySeconds = 5;
// Setup pin to fast mode:
void setup(){
pinMode(pinIR_LED, OUTPUT_FAST);
Serial.println("Setup..." );
void takePicNikon()
for(int x=0; x<sizeof(nikonCommand)/sizeof(int); x++)
int y = x + 1;
pulseLoop(nikonCommand[x], (y%2));
void loop()
Serial.println("Taking picture: " );
// This calls the main function:
// Delay for a given time before taking another picture:
delay((delaySeconds * 1000));
// This function generates the actual pulses used to make the command:
// Note: Putting any print statements in here will cause the pulses to become skewed and unstable.
void pulseLoop(int pulses, int SHINE)
// Integers for loops:
int i;
int n;
// delayValue is used to delay the clock from 460KHz to 38.4KHz:
int delayValue = 12;
register int x = 0;
// Loop to control the number of pulses created
// Number is multiplied by 2 to create both the low and high period of the pulse:
for(n=0; n<(pulses*2); n++)
// Loop to delay the digitalWrite to 38.4KHz:
for(i=0; i<delayValue; i++)
// SHINE only activates the IR LED when we are supposed to pulse, deactivates for the delay:
digitalWrite(pinIR_LED, (x & SHINE));
x =!x;