0

void AmebaServo::write(int value)
{
if(value < 0) value = 0;
if(value > 180) value = 180;

// currentWidth = value;// <<< 原始碼, 建議取消,在writeMicroseconds()時才指定值

value = (max-min) * value / 180 + min;
this->writeMicroseconds(value);
}

void AmebaServo::writeMicroseconds(int value)
{
if (value < min) value = min;
if (value > max) value = max;

// currentWidth = 180 * (value - min) / (max - min); // <<< 原始碼, 建議取消,影響READ()
currentWidth = value;  /// <<<建議修改

pwmout_write( (pwmout_t *)gpio_pin_struct[servoPin], (float)value / 20000.0);
}

int AmebaServo::read() // return the value as degrees
{
return 180 * (currentWidth - min) / (max - min);
}

int AmebaServo::readMicroseconds()
{
return currentWidth;
}

sean 回答了