There is tons of info on how to control a camera with an Arduino. But I'm wanting to use a Lanc based remote control to control an Arduino.
I want to take a Lanc Zoom Controller and have it send commands to an Arduino. But I think my problem is with the emulating a video camera so the Lanc Zoom Controller will sync with the Arduino and send it's commands. The communication is a 8 bit serial over one line. I'm creating a pulse to send binary to the remote, and listening for a binary response. The first two bytes are commands from the lanc remote, the next two are not used, then the next four are a response from the camera with recording info, or timecode....
Right now I can tell that the remote control isn't getting the pulse correctly. The controller has a red LED on it. It blinks when it has power and no sync. When the controller is plugged into a camera the Led is off. I use the same wiring build to send recored and zoom commands to a video camera with no problems.
Thanks for any help or thoughts. I'm new to a lot of this.
dan.
Here one of the main sites that I'm getting most of my info from:
I'm using this build
And here is a extremely simplified version of my code. For right now I'm trying to emulate the basics of a video camera.
#define cmdPin 7
#define lancPin 11
int bitDuration = 104; //Duration of one LANC bit in microseconds.
void setup() {
Serial.begin(9600); //open the serial port
pinMode(lancPin, INPUT); //listens to the LANC line
pinMode(cmdPin, OUTPUT); //writes to the LANC line
pinMode(recButton, INPUT); //start-stop recording button
digitalWrite(cmdPin, HIGH);
bitDuration = bitDuration - 8; //Writing to the digital port takes about 8 microseconds so only 96 microseconds are left till the end of each bit
}
void loop() {
digitalWrite(cmdPin, LOW); //Write bit 0 (Start Bit)
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
digitalWrite(cmdPin, LOW); //Write bit 0 (Start Bit)
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
digitalWrite(cmdPin, LOW); //Write bit 0 (Start Bit)
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
digitalWrite(cmdPin, LOW); //Write bit 0 (Start Bit)
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
digitalWrite(cmdPin, LOW); //Write bit 0 (Start Bit)
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
digitalWrite(cmdPin, LOW); //Write bit 0 (Start Bit)
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
digitalWrite(cmdPin, LOW); //Write bit 0 (Start Bit)
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
digitalWrite(cmdPin, LOW); //Write bit 0 (Start Bit)
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, LOW);
delayMicroseconds(bitDuration);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
digitalWrite(cmdPin, HIGH); //Write bit 1 (Stop Bit)
delayMicroseconds(10);
delay(6);
}