mraa_result_t mraa_pwm_config_percent(mraa_pwm_context dev, int ms, float percentage) { int old_dutycycle, old_period, status; if (!dev) { syslog(LOG_ERR, "pwm: config_percent: context is NULL"); return MRAA_ERROR_INVALID_HANDLE; } old_dutycycle = mraa_pwm_read_duty(dev); old_period = mraa_pwm_read_period(dev); status = mraa_pwm_period_us(dev, ms * 1000); if (status != MRAA_SUCCESS) { mraa_pwm_write_duty(dev, old_dutycycle); return status; } status = mraa_pwm_write_duty(dev, 0); if (status != MRAA_SUCCESS) { return status; } status = mraa_pwm_pulsewidth_us(dev, (ms * 1000) * percentage); if (status != MRAA_SUCCESS) { mraa_pwm_write_duty(dev, old_dutycycle); mraa_pwm_write_period(dev, old_period); return status; } return MRAA_SUCCESS; }
float mraa_pwm_read(mraa_pwm_context dev) { int period = mraa_pwm_read_period(dev); if (period > 0) { return (mraa_pwm_read_duty(dev) / (float) period); } return 0.0f; }
float mraa_pwm_read(mraa_pwm_context dev) { if (!dev) { syslog(LOG_ERR, "pwm: read: context is NULL"); return MRAA_ERROR_INVALID_HANDLE; } int period = mraa_pwm_read_period(dev); if (period > 0) { return (mraa_pwm_read_duty(dev) / (float) period); } return 0.0f; }
mraa_result_t mraa_pwm_config_percent(mraa_pwm_context dev, int ms ,float percentage) { int old_dutycycle, old_period, status; old_dutycycle = mraa_pwm_read_duty(dev); old_period = mraa_pwm_read_period(dev); status = mraa_pwm_write_duty(dev, 0); if (status != MRAA_SUCCESS) { return status; } status = mraa_pwm_period_us(dev, ms*1000); if (status != MRAA_SUCCESS) { mraa_pwm_write_duty(dev, old_dutycycle); return status; } status = mraa_pwm_pulsewidth_us(dev, (ms*1000)*percentage); if (status != MRAA_SUCCESS) { mraa_pwm_write_duty(dev, old_dutycycle); mraa_pwm_write_period(dev, old_period); return status; } return MRAA_SUCCESS; }
float mraa_pwm_read(mraa_pwm_context dev) { float output = mraa_pwm_read_duty(dev) / (float) mraa_pwm_read_period(dev); return output; }