// set_shutter_speed_auto - set shutter speed to auto (true), or manual (false)
void
AP_OpticalFlow_ADNS3080::set_shutter_speed(unsigned int shutter_speed)
{
    NumericIntType aNum;
    aNum.uintValue = shutter_speed;

    // set shutter speed to manual
    set_shutter_speed_auto(false);
    delayMicroseconds(50);      // small delay

    // set specific shutter speed
    write_register(ADNS3080_SHUTTER_MAX_BOUND_LOWER,aNum.byteValue[0]);
    delayMicroseconds(50);      // small delay
    write_register(ADNS3080_SHUTTER_MAX_BOUND_UPPER,aNum.byteValue[1]);
    delayMicroseconds(50);      // small delay

    // larger delay
    delay(50);

    // need to update frame period to cause shutter value to take effect
    aNum.byteValue[1] = read_register(ADNS3080_FRAME_PERIOD_UPPER);
    delayMicroseconds(50);      // small delay
    aNum.byteValue[0] = read_register(ADNS3080_FRAME_PERIOD_LOWER);
    delayMicroseconds(50);      // small delay
    write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_LOWER,aNum.byteValue[0]);
    delayMicroseconds(50);      // small delay
    write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_UPPER,aNum.byteValue[1]);
    delayMicroseconds(50);      // small delay
}
示例#2
0
// set_shutter_speed_auto - set shutter speed to auto (true), or manual (false)
void AP_OpticalFlow_ADNS3080::set_shutter_speed(unsigned int shutter_speed){
	// set shutter speed to manual
	set_shutter_speed_auto(false);
	delayMicroseconds(50);  // small delay

	// set specific shutter speed
	write_register(ADNS3080_SHUTTER_MAX_BOUND_LOWER, lowByte(shutter_speed));
	delayMicroseconds(50);  // small delay
	write_register(ADNS3080_SHUTTER_MAX_BOUND_UPPER, highByte(shutter_speed));
	delayMicroseconds(50);  // small delay

	// larger delay
	delay(50);

	// need to update frame period to cause shutter value to take effect
	byte upper = read_register(ADNS3080_FRAME_PERIOD_UPPER);
	delayMicroseconds(50);  // small delay
	byte lower = read_register(ADNS3080_FRAME_PERIOD_LOWER);
	delayMicroseconds(50);  // small delay
	write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_LOWER, lower);
	delayMicroseconds(50);  // small delay
	write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_UPPER, upper);
	delayMicroseconds(50);  // small delay
}