This example describes how to program a sequencer for a shape from shading application triggered via software trigger. Shape from shading is a technical solution to extract 3D information out of 2D images recorded at the same position but each with different lighting. The sequencer is set-up to take 4 images in fast succession triggered by one software trigger. The example uses the 4 high-power PWM outputs of the VCXG.I cameras to power 4 flash segments positioned to illuminate the scene from different angles.

If you want to know more about what to do with a sequencer or when to use a shape from shading, please refer to the application notes below and the user guide of VCXG.I cameras.

Intended camera behavior
VT_Verhalten_der_Kamera_für_Sfs.png

The camera is set to trigger mode for shape from shading purposes. Four images are then acquired for each incoming trigger signal.

VT_Timing_Diagramm_für_Shape_from_Shading.png

For each acquired image, the camera outputs activate the illumination in one of the quadrants.

Programming the sequencer

    // STOP ACQUISITION AND LOAD DEFAULT PARAMETERS
pDevice->GetRemoteNode("AcquisitionStop")->Execute();
pDevice->GetRemoteNode("UserSetSelector")->SetValue("Default");
pDevice->GetRemoteNode("UserSetLoad")->Execute();

// DEFINE EXPOSURE TIME AND ROI FOR THE SEQUENCER
double ExposureTime = 500;
bo_int64 OffsetX = 0
bo_int64 OffsetY = 0
bo_int64 Height = pDevice->GetRemoteNode("Height")->GetIntMax();
bo_int64 Width = pDevice->GetRemoteNode("Width")->GetIntMax();

// SWITCH TO SEQUENCER CONFIG MODE
pDevice->GetRemoteNode("SequencerConfigurationMode")->SetString("On")

// SET 0 (FIRST STEP OF THE SEQUENCE) 
// wait for the trigger and acquire the first image
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(0);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(1);
pDevice->GetRemoteNode("ExposureTime")->SetInt(ExposureTime);
pDevice->GetRemoteNode("Height")->SetInt(Height);
pDevice->GetRemoteNode("Width")->SetInt(Width);
pDevice->GetRemoteNode("OffsetX")->SetInt(OffsetX);
pDevice->GetRemoteNode("OffsetY")->SetInt(OffsetY);
pDevice->GetRemoteNode("TriggerMode")->SetValue("On");
pDevice->GetRemoteNode("UserOutputValueAll")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetValue("RisingEdge");
pDevice->GetRemoteNode("SequencerTriggerSource")->SetValue("ExposureActive");
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 1 (SECOND STEP OF THE SEQUENCE) 
// while the exposure is active strobe Output1 (lightning 1)
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(1);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(2);
pDevice->GetRemoteNode("UserOutputValueAll")->SetInt(1);
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetValue("FallingEdge");
pDevice->GetRemoteNode("SequencerTriggerSource")->SetValue("ExposureActive");
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 2 (THIRD STEP OF THE SEQUENCE)
// acquire second Image
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(2);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(3);
pDevice->GetRemoteNode("ExposureTime")->SetInt(ExposureTime);
pDevice->GetRemoteNode("Height")->SetInt(Height);
pDevice->GetRemoteNode("Width")->SetInt(Width);
pDevice->GetRemoteNode("OffsetX")->SetInt(OffsetX);
pDevice->GetRemoteNode("OffsetY")->SetInt(OffsetY);
pDevice->GetRemoteNode("TriggerMode")->SetValue("Off");
pDevice->GetRemoteNode("UserOutputValueAll")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetValue("RisingEdge");
pDevice->GetRemoteNode("SequencerTriggerSource")->SetValue("ExposureActive");
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 3 (FOURTH STEP OF THE SEQUENCE) 
// while the exposure is active strobe Output2 (lightning 2)
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(3);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(4);
pDevice->GetRemoteNode("UserOutputValueAll")->SetInt(2);
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetValue("FallingEdge");
pDevice->GetRemoteNode("SequencerTriggerSource")->SetValue("ExposureActive");
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 4 (FIFTH STEP OF THE SEQUENCE) 
// acquire third Image
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(4);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(5);
pDevice->GetRemoteNode("ExposureTime")->SetInt(ExposureTime);
pDevice->GetRemoteNode("Height")->SetInt(Height);
pDevice->GetRemoteNode("Width")->SetInt(Width);
pDevice->GetRemoteNode("OffsetX")->SetInt(OffsetX);
pDevice->GetRemoteNode("OffsetY")->SetInt(OffsetY);
pDevice->GetRemoteNode("TriggerMode")->SetValue("Off");
pDevice->GetRemoteNode("UserOutputValueAll")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetValue("RisingEdge");
pDevice->GetRemoteNode("SequencerTriggerSource")->SetValue("ExposureActive");
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 5 (SIXTH STEP OF THE SEQUENCE)
// strobe Output3 (lightning 3)
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(5);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(6);
pDevice->GetRemoteNode("UserOutputValueAll")->SetInt(4);
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetValue("FallingEdge");
pDevice->GetRemoteNode("SequencerTriggerSource")->SetValue("ExposureActive");
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 6 (SEVENTH STEP OF THE SEQUENCE)
// acquire 4. image
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(6);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(7);
pDevice->GetRemoteNode("ExposureTime")->SetInt(ExposureTime);
pDevice->GetRemoteNode("Height")->SetInt(Height);
pDevice->GetRemoteNode("Width")->SetInt(Width);
pDevice->GetRemoteNode("OffsetX")->SetInt(OffsetX);
pDevice->GetRemoteNode("OffsetY")->SetInt(OffsetY);
pDevice->GetRemoteNode("TriggerMode")->SetValue("Off");
pDevice->GetRemoteNode("UserOutputValueAll")->SetInt(0);
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetValue("RisingEdge");
pDevice->GetRemoteNode("SequencerTriggerSource")->SetValue("ExposureActive");
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// SET 7 (EIGHTH STEP OF THE SEQUENCE)
// strobe (Output4) lightning 4
pDevice->GetRemoteNode("SequencerSetSelector")->SetInt(7);
pDevice->GetRemoteNode("SequencerSetLoad")->Execute();
pDevice->GetRemoteNode("SequencerSetNext")->SetInt(0);
pDevice->GetRemoteNode("UserOutputValueAll")->SetInt(8);
pDevice->GetRemoteNode("SequencerTriggerActivation")->SetValue("FallingEdge");
pDevice->GetRemoteNode("SequencerTriggerSource")->SetValue("ExposureActive");
pDevice->GetRemoteNode("SequencerSetSave")->Execute();

// set the sequencer to start with the Set0
pDevice->GetRemoteNode("SequencerSetStart")->SetInt(0);

// SEQUENCER CONFIG END
pDevice->GetRemoteNode("SequencerConfigurationMode")->SetString("Off");
 
  
    // STOP ACQUISITION AND LOAD DEFAULT PARAMETERS
mDevice.RemoteNodeList["AcquisitionStop"].Execute();
mDevice.RemoteNodeList["UserSetSelector"].Value = "Default";
mDevice.RemoteNodeList["UserSetLoad"].Execute();

// DEFINE EXPOSURE TIME AND ROI FOR THE SEQUENCER
double ExposureTime = 500;
long OffsetX = 0;
long OffsetY = 0;
long Height = mDevice.RemoteNodeList["Height"].Max;
long Width = mDevice.RemoteNodeList["Width"].Max;

// SWITCH TO SEQUENCER CONFIG MODE
mDevice.RemoteNodeList["SequencerConfigurationMode"].Value = "On";

// SET 0 (First STEP OF THE SEQUENCE) 
// wait for the trigger and acquire the first image
mDevice.RemoteNodeList["SequencerSetSelector"].Value = 0;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["SequencerSetNext"].Value = 1;
mDevice.RemoteNodeList["ExposureTime"].Value = ExposureTime;
mDevice.RemoteNodeList["OffsetX"].Value = OffsetX;
mDevice.RemoteNodeList["OffsetY"].Value = OffsetY;
mDevice.RemoteNodeList["Height"].Value = Height;
mDevice.RemoteNodeList["Width"].Value = Width;
mDevice.RemoteNodeList["TriggerMode"].Value = "On";
mDevice.RemoteNodeList["UserOutputValueAll"].Value = 0;
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 1 (SECOND STEP OF THE SEQUENCE) 
// while the exposure is active strobe Output1 (lightning 1)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = 1;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["SequencerSetNext"].Value = 2;
mDevice.RemoteNodeList["UserOutputValueAll"].Value = 1;
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "FallingEdge";
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 2 (THIRD STEP OF THE SEQUENCE)
// acquire second Image
mDevice.RemoteNodeList["SequencerSetSelector"].Value = 2;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["SequencerSetNext"].Value = 3;
mDevice.RemoteNodeList["ExposureTime"].Value = ExposureTime;
mDevice.RemoteNodeList["OffsetX"].Value = OffsetX;
mDevice.RemoteNodeList["OffsetY"].Value = OffsetY;
mDevice.RemoteNodeList["Height"].Value = Height;
mDevice.RemoteNodeList["Width"].Value = Width;
mDevice.RemoteNodeList["TriggerMode"].Value = "Off";
mDevice.RemoteNodeList["UserOutputValueAll"].Value = 0;
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 3 (FOURTH STEP OF THE SEQUENCE) 
// while the exposure is active strobe Output2 (lightning 2)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = 3;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["SequencerSetNext"].Value = 4;
mDevice.RemoteNodeList["UserOutputValueAll"].Value = 2;
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "FallingEdge";
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 4 (FIFTH STEP OF THE SEQUENCE) 
// acquire third Image 
mDevice.RemoteNodeList["SequencerSetSelector"].Value = 4;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["SequencerSetNext"].Value = 5;
mDevice.RemoteNodeList["ExposureTime"].Value = ExposureTime;
mDevice.RemoteNodeList["OffsetX"].Value = OffsetX;
mDevice.RemoteNodeList["OffsetY"].Value = OffsetY;
mDevice.RemoteNodeList["Height"].Value = Height;
mDevice.RemoteNodeList["Width"].Value = Width;
mDevice.RemoteNodeList["TriggerMode"].Value = "Off";
mDevice.RemoteNodeList["UserOutputValueAll"].Value = 0;
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 5 (SIXTH STEP OF THE SEQUENCE)
// strobe Output3 (lightning 3)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = 5;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["SequencerSetNext"].Value = 6;
mDevice.RemoteNodeList["UserOutputValueAll"].Value = 4;
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "FallingEdge";
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 6 (SEVENTH STEP OF THE SEQUENCE)
// acquire 4. image
mDevice.RemoteNodeList["SequencerSetSelector"].Value = 6;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["SequencerSetNext"].Value = 7;
mDevice.RemoteNodeList["ExposureTime"].Value = ExposureTime;
mDevice.RemoteNodeList["OffsetX"].Value = OffsetX;
mDevice.RemoteNodeList["OffsetY"].Value = OffsetY;
mDevice.RemoteNodeList["Height"].Value = Height;
mDevice.RemoteNodeList["Width"].Value = Width;
mDevice.RemoteNodeList["TriggerMode"].Value = "Off";
mDevice.RemoteNodeList["UserOutputValueAll"].Value = 0;
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 7 (EIGHTH STEP OF THE SEQUENCE)
// strobe (Output4) lightning 4
mDevice.RemoteNodeList["SequencerSetSelector"].Value = 7;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
mDevice.RemoteNodeList["SequencerSetNext"].Value = 0;
mDevice.RemoteNodeList["UserOutputValueAll"].Value = 8;
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "FallingEdge";
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// set the sequencer to start with the Set0
mDevice.RemoteNodeList["SequencerSetStart"].Value = 0;

// SEQUENCER CONFIG END
mDevice.RemoteNodeList["SequencerConfigurationMode"].Value = "Off"; 
  

Now that the sequencer is set-up we also need to configure the PWM Outputs of the camera to drive the lighting for the setup.

    // define line outputs parameters
bo_int64 LightningTime = (long)ExposureTime - 2;
bo_int64 MaxDutyCycle = 10;
bo_int64 DutyCycle = 10;
bo_int64 MaxDuration = 1900;
String LineFormat = "OpenSource";
String LinePWMMode = "OnePulse";

// configure Line4 for UserOutput1 as single lightning flash 1 
pDevice->GetRemoteNode("LineSelector")->SetValue("Line4");
pDevice->GetRemoteNode("LineFormat")->SetValue(LineFormat);
pDevice->GetRemoteNode("LineInverter")->SetValue("0");
pDevice->GetRemoteNode("LinePWMConfigurationMode")->SetValue("On");
pDevice->GetRemoteNode("LinePWMDuration")->SetInt(1);
pDevice->GetRemoteNode("LinePWMDutyCycle")->SetInt(1);
pDevice->GetRemoteNode("LinePWMMaxDutyCycle")->SetInt(MaxDutyCycle);
pDevice->GetRemoteNode("LinePWMMaxDuration")->SetInt(MaxDuration);
pDevice->GetRemoteNode("LinePWMConfigurationMode")->SetValue("Off");
pDevice->GetRemoteNode("LinePWMDuration")->SetInt(LightningTime);
pDevice->GetRemoteNode("LinePWMDutyCycle")->SetInt(DutyCycle);
pDevice->GetRemoteNode("LinePWMMode")->SetValue(LinePWMMode);
pDevice->GetRemoteNode("LineSource")->SetValue("UserOutput1");

// configure Line5 for UserOutput2 as single lightning flash 2 
pDevice->GetRemoteNode("LineSelector")->SetValue("Line5");
pDevice->GetRemoteNode("LineFormat")->SetValue(LineFormat);
pDevice->GetRemoteNode("LineInverter")->SetValue("0");
pDevice->GetRemoteNode("LinePWMConfigurationMode")->SetValue("On");
pDevice->GetRemoteNode("LinePWMDuration")->SetInt(1);
pDevice->GetRemoteNode("LinePWMDutyCycle")->SetInt(1);
pDevice->GetRemoteNode("LinePWMMaxDutyCycle")->SetInt(MaxDutyCycle);
pDevice->GetRemoteNode("LinePWMMaxDuration")->SetInt(MaxDuration);
pDevice->GetRemoteNode("LinePWMConfigurationMode")->SetValue("Off");
pDevice->GetRemoteNode("LinePWMDuration")->SetInt(LightningTime);
pDevice->GetRemoteNode("LinePWMDutyCycle")->SetInt(DutyCycle);
pDevice->GetRemoteNode("LinePWMMode")->SetValue(LinePWMMode);
pDevice->GetRemoteNode("LineSource")->SetValue("UserOutput2");

// configure Line6 for UserOutput3 as single lightning flash 3 
pDevice->GetRemoteNode("LineSelector")->SetValue("Line6");
pDevice->GetRemoteNode("LineFormat")->SetValue(LineFormat);
pDevice->GetRemoteNode("LineInverter")->SetValue("0");
pDevice->GetRemoteNode("LinePWMConfigurationMode")->SetValue("On");
pDevice->GetRemoteNode("LinePWMDuration")->SetInt(1);
pDevice->GetRemoteNode("LinePWMDutyCycle")->SetInt(1);
pDevice->GetRemoteNode("LinePWMMaxDutyCycle")->SetInt(MaxDutyCycle);
pDevice->GetRemoteNode("LinePWMMaxDuration")->SetInt(MaxDuration);
pDevice->GetRemoteNode("LinePWMConfigurationMode")->SetValue("Off");
pDevice->GetRemoteNode("LinePWMDuration")->SetInt(LightningTime);
pDevice->GetRemoteNode("LinePWMDutyCycle")->SetInt(DutyCycle);
pDevice->GetRemoteNode("LinePWMMode")->SetValue(LinePWMMode);
pDevice->GetRemoteNode("LineSource")->SetValue("UserOutput3");

// configure Line7 for UserOutput4 as single lightning flash 4 
pDevice->GetRemoteNode("LineSelector")->SetValue("Line7");
pDevice->GetRemoteNode("LineFormat")->SetValue(LineFormat);
pDevice->GetRemoteNode("LineInverter")->SetValue("0");
pDevice->GetRemoteNode("LinePWMConfigurationMode")->SetValue("On");
pDevice->GetRemoteNode("LinePWMDuration")->SetInt(1);
pDevice->GetRemoteNode("LinePWMDutyCycle")->SetInt(1);
pDevice->GetRemoteNode("LinePWMMaxDutyCycle")->SetInt(MaxDutyCycle);
pDevice->GetRemoteNode("LinePWMMaxDuration")->SetInt(MaxDuration);
pDevice->GetRemoteNode("LinePWMConfigurationMode")->SetValue("Off");
pDevice->GetRemoteNode("LinePWMDuration")->SetInt(LightningTime);
pDevice->GetRemoteNode("LinePWMDutyCycle")->SetInt(DutyCycle);
pDevice->GetRemoteNode("LinePWMMode")->SetValue(LinePWMMode);
pDevice->GetRemoteNode("LineSource")->SetValue("UserOutput4"); 
  
    // define line outputs parameters
long LightningTime = (long)ExposureTime - 2;
long MaxDutyCycle = 10;
long DutyCycle = 10;
long MaxDuration = 1900;
string LineFormat = "OpenSource";
string LinePWMMode = "OnePulse";

// configure Line4 for UserOutput1 as single lightning flash 1 
mDevice.RemoteNodeList["LineSelector"].Value = "Line4";
mDevice.RemoteNodeList["LineFormat"].Value = LineFormat;
mDevice.RemoteNodeList["LineInverter"].Value = false;
mDevice.RemoteNodeList["LinePWMConfigurationMode"].Value = "On";
mDevice.RemoteNodeList["LinePWMDuration"].Value = 1;
mDevice.RemoteNodeList["LinePWMDutyCycle"].Value = 1;
mDevice.RemoteNodeList["LinePWMMaxDutyCycle"].Value = MaxDutyCycle;
mDevice.RemoteNodeList["LinePWMMaxDuration"].Value = MaxDuration;
mDevice.RemoteNodeList["LinePWMConfigurationMode"].Value = "Off";
mDevice.RemoteNodeList["LinePWMDuration"].Value = LightningTime;
mDevice.RemoteNodeList["LinePWMDutyCycle"].Value = DutyCycle;
mDevice.RemoteNodeList["LinePWMMode"].Value = LinePWMMode;
mDevice.RemoteNodeList["LineSource"].Value = "UserOutput1";

// configure Line5 for UserOutput2 as single lightning flash 2 
mDevice.RemoteNodeList["LineSelector"].Value = "Line5";
mDevice.RemoteNodeList["LineFormat"].Value = LineFormat;
mDevice.RemoteNodeList["LineInverter"].Value = false;
mDevice.RemoteNodeList["LinePWMConfigurationMode"].Value = "On";
mDevice.RemoteNodeList["LinePWMDuration"].Value = 1;
mDevice.RemoteNodeList["LinePWMDutyCycle"].Value = 1;
mDevice.RemoteNodeList["LinePWMMaxDutyCycle"].Value = MaxDutyCycle;
mDevice.RemoteNodeList["LinePWMMaxDuration"].Value = MaxDuration;
mDevice.RemoteNodeList["LinePWMConfigurationMode"].Value = "Off";
mDevice.RemoteNodeList["LinePWMDuration"].Value = LightningTime;
mDevice.RemoteNodeList["LinePWMDutyCycle"].Value = DutyCycle;
mDevice.RemoteNodeList["LinePWMMode"].Value = LinePWMMode;
mDevice.RemoteNodeList["LineSource"].Value = "UserOutput2";

// configure Line6 for UserOutput3 as single lightning flash 3 
mDevice.RemoteNodeList["LineSelector"].Value = "Line6";
mDevice.RemoteNodeList["LineFormat"].Value = LineFormat;
mDevice.RemoteNodeList["LineInverter"].Value = false;
mDevice.RemoteNodeList["LinePWMConfigurationMode"].Value = "On";
mDevice.RemoteNodeList["LinePWMDuration"].Value = 1;
mDevice.RemoteNodeList["LinePWMDutyCycle"].Value = 1;
mDevice.RemoteNodeList["LinePWMMaxDutyCycle"].Value = MaxDutyCycle;
mDevice.RemoteNodeList["LinePWMMaxDuration"].Value = MaxDuration;
mDevice.RemoteNodeList["LinePWMConfigurationMode"].Value = "Off";
mDevice.RemoteNodeList["LinePWMDuration"].Value = LightningTime;
mDevice.RemoteNodeList["LinePWMDutyCycle"].Value = DutyCycle;
mDevice.RemoteNodeList["LinePWMMode"].Value = LinePWMMode;
mDevice.RemoteNodeList["LineSource"].Value = "UserOutput3";

// configure Line7 for UserOutput4 as single lightning flash 4 
mDevice.RemoteNodeList["LineSelector"].Value = "Line7";
mDevice.RemoteNodeList["LineFormat"].Value = LineFormat;
mDevice.RemoteNodeList["LineInverter"].Value = false;
mDevice.RemoteNodeList["LinePWMConfigurationMode"].Value = "On";
mDevice.RemoteNodeList["LinePWMDuration"].Value = 1;
mDevice.RemoteNodeList["LinePWMDutyCycle"].Value = 1;
mDevice.RemoteNodeList["LinePWMMaxDutyCycle"].Value = MaxDutyCycle;
mDevice.RemoteNodeList["LinePWMMaxDuration"].Value = MaxDuration;
mDevice.RemoteNodeList["LinePWMConfigurationMode"].Value = "Off";
mDevice.RemoteNodeList["LinePWMDuration"].Value = LightningTime;
mDevice.RemoteNodeList["LinePWMDutyCycle"].Value = DutyCycle;
mDevice.RemoteNodeList["LinePWMMode"].Value = LinePWMMode;
mDevice.RemoteNodeList["LineSource"].Value = "UserOutput4"; 
  

Finally we start the camera sequencer and do a software trigger.

    // START CAMERA SEQUENCER
pDevice->GetRemoteNode("SequencerMode")->SetValue("On");
pDevice->GetRemoteNode("TriggerSource")->SetValue("Software");
pDataStream->StartAcquisitionContinuous();
pDevice->GetRemoteNode("AcquisitionStart")->Execute();
pDevice->GetRemoteNode("TriggerSoftware")->Execute();

// CAPTURE 4 IMAGES

// STOP CAMERA SEQUENCER
pDevice->GetRemoteNode("AcquisitionStop")->Execute();
pDataStream->StopAcquisition();
pDevice->GetRemoteNode("SequencerMode")->SetValue("Off"); 
  
    // START CAMERA SEQUENCER
mDevice.RemoteNodeList["SequencerMode"].Value = "On";
mDevice.RemoteNodeList["TriggerSource"].Value = "Software";
mDataStream.StartAcquisition();
mDevice.RemoteNodeList["AcquisitionStart"].Execute();
mDevice.RemoteNodeList["TriggerSoftware"].Execute();

// CAPTURE 4 IMAGES

// STOP CAMERA SEQUENCER
mDevice.RemoteNodeList["AcquisitionStop"].Execute();
mDataStream.StopAcquisition();
mDevice.RemoteNodeList["SequencerMode"].Value = "Off"; 
  

Downloads

Software examples

To the top