Hi Ian
Thanks for taking the time to help. I have been playing with this all day
A friend helped me and I got this working in a different way:
#include <AFMotor.h>
int IRledPin =Â 12;Â Â // LED connected to digital pin 12
const int ButtonPin = 2;
AF_Stepper motor(200, 1);
int ButtonState = 0;
// This procedure sends a 38KHz pulse to the IRledPin
// for a certain # of microseconds. We'll use this whenever we need to send codes
void pulseIR(long microsecs) {
 // we'll count down from the number of microseconds we are told to wait
 cli(); // this turns off any background interrupts
 while (microsecs > 0) {
  // 38 kHz is about 13 microseconds high and 13 microseconds low
 digitalWrite(IRledPin, HIGH); // this takes about 3 microseconds to happen
 delayMicroseconds(10);    // hang out for 10 microseconds, you can also change this to 9 if its not working
 digitalWrite(IRledPin, LOW); // this also takes about 3 microseconds
 delayMicroseconds(10);    // hang out for 10 microseconds, you can also change this to 9 if its not working
 // so 26 microseconds altogether
 microsecs -= 26;
 }
 sei(); // this turns them back on
}
void SendNikonCode() {
 Serial.println("Fire Camera!");
 pulseIR(2080);
 delay(27);
 pulseIR(440);
 delayMicroseconds(1500);
 pulseIR(460);
 delayMicroseconds(3440);
 pulseIR(480);
 delay(65); // wait 65 milliseconds before sending it again
 pulseIR(2000);
 delay(27);
 pulseIR(440);
 delayMicroseconds(1500);
 pulseIR(460);
 delayMicroseconds(3440);
 pulseIR(480);
 delay(55);
}
void RotateTT() {
 Serial.println("6 Double coil steps");
 motor.step(6, FORWARD, DOUBLE);
}
// setup() is called first, then loop() is repeatedly called until power is switched off.
// We're doing everything in setup(), so loop() can be empty.
void setup()Â {
 Serial.begin(9600);     // set up Serial library at 9600 bps
 Serial.println("Start!");
 pinMode(ButtonPin, INPUT);
 pinMode(IRledPin, OUTPUT);
 motor.setSpeed(5);
 for (int i = 0; i < 5; i++) {
 if (ButtonState == LOW) {
  SendNikonCode();
  delay(1000);
  RotateTT();
  delay(1000);
 }
 else {
 digitalWrite(IRledPin, LOW);
 }
}
}
void loop()
{
 // All done. Loop here, doing nothing.
}
Though your method works too and seems cleaner. However, the next step is as you suggested, a button to start the process. I can't seem to work out the right code. You can see in the example above what I have tried and it just acts like the button is not there. i.e it cycles through the 2 functions for the amount specified, then stops. I tried to add a button start to your code also and the same happens
#include <AFMotor.h>
int IRledPin =Â 12;Â Â // LED connected to digital pin 12
AF_Stepper motor(200, 1);
int NumberOfPictures = 5;Â // How many pictures should we take?
int CountVariable = 0;Â // I'll use this to keep a tab on how many pictures we've taken so far.
const int ButtonPin = 2;
int ButtonState = 0;
void setup()Â {
 Serial.begin(9600);     // set up Serial library at 9600 bps
 Serial.println("Start!");Â
 pinMode(IRledPin, OUTPUT);
 motor.setSpeed(5);
}
void loop() {
 if (ButtonState == LOW) {
 if (CountVariable == NumberOfPictures) return; // Stop now as CountVariable indicates that we have taken the correct NumberOfPictures
RotateTT();
delay(1000); // wait half a second for good measure
SendNikonCode();
delay(1000); // wait half a second for good measure
CountVariable ++; // increment the count variable so it is actually counting :)
}Â // at this point it will go to the top of the loop at the void loop() line and start again.
}
// This procedure sends a 38KHz pulse to the IRledPin
// for a certain # of microseconds. We'll use this whenever we need to send codes
void pulseIR(long microsecs) {
 // we'll count down from the number of microseconds we are told to wait
 cli(); // this turns off any background interrupts
 while (microsecs > 0) {
  // 38 kHz is about 13 microseconds high and 13 microseconds low
 digitalWrite(IRledPin, HIGH); // this takes about 3 microseconds to happen
 delayMicroseconds(10);    // hang out for 10 microseconds, you can also change this to 9 if its not working
 digitalWrite(IRledPin, LOW); // this also takes about 3 microseconds
 delayMicroseconds(10);    // hang out for 10 microseconds, you can also change this to 9 if its not working
 // so 26 microseconds altogether
 microsecs -= 26;
 }
 sei(); // this turns them back on
}
void SendNikonCode() {
 Serial.println("Fire Camera!");
 pulseIR(2080);
 delay(27);
 pulseIR(440);
 delayMicroseconds(1500);
 pulseIR(460);
 delayMicroseconds(3440);
 pulseIR(480);
 delay(65); // wait 65 milliseconds before sending it again
 pulseIR(2000);
 delay(27);
 pulseIR(440);
 delayMicroseconds(1500);
 pulseIR(460);
 delayMicroseconds(3440);
 pulseIR(480);
Â
 delay(55);
}
void RotateTT() {
 Serial.println("6 Double coil steps");
 motor.step(6, FORWARD, DOUBLE);
}
I would love to know what I'm doing wrong