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; }
int setAngle(int angle, int pin) { if (angle > m_maxAngle || angle < 0) { return MRAA_ERROR_UNSPECIFIED; } if (pin == pin3) { mraa_pwm_enable(m_pwmServoContext, 1); mraa_pwm_period_us(m_pwmServoContext, m_period); mraa_pwm_pulsewidth_us(m_pwmServoContext, calcPulseTraveling(angle)); } if (pin == pin9) { mraa_pwm_enable(m_pwmServoContext1, 1); mraa_pwm_period_us(m_pwmServoContext1, m_period); mraa_pwm_pulsewidth_us(m_pwmServoContext1, calcPulseTraveling(angle)); } if (m_waitAndDisablePwm) { sleep(1); haltPwm(); } m_currAngle = angle; return MRAA_SUCCESS; }
upm_result_t es9257_set_angle(es9257_context dev, int32_t angle){ if(ES9257_MAX_ANGLE < angle || angle < 0){ printf("The angle specified is either above the max angle or below 0"); return UPM_ERROR_UNSPECIFIED; } printf("setting angle to: %d\n", angle); mraa_pwm_enable(dev->pwm, 1); mraa_pwm_period_us(dev->pwm, ES9257_PERIOD); int32_t val = 0; es9257_calc_pulse_travelling(dev, &val, angle); mraa_pwm_pulsewidth_us(dev->pwm, val); upm_delay(1); mraa_pwm_enable(dev->pwm, 0); return UPM_SUCCESS; }
mraa_result_t VexMotorController::setSpeed(double speed) { if (m_pwmServoContext == NULL) { printf("PWM context is NULL.\n"); return MRAA_ERROR_UNSPECIFIED; } if (m_isInverted) speed = -speed; if (speed > 1) speed = 1; else if (speed < -1) speed = -1; mraa_pwm_enable(m_pwmServoContext, 1); mraa_pwm_period_us(m_pwmServoContext, m_period); mraa_pwm_pulsewidth_us(m_pwmServoContext, calcPulse(speed)); return MRAA_SUCCESS; }
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; }
mraa_result_t mraa_pwm_pulsewidth_ms(mraa_pwm_context dev, int ms) { return mraa_pwm_pulsewidth_us(dev, ms * 1000); }
void stop(){ mraa_pwm_period_us(pwm,1); mraa_pwm_pulsewidth_us(pwm,0); }
/** * The pulsewidth, microseconds * * @param us microseconds for pulsewidth * @return Result of operation */ mraa_result_t pulsewidth_us(int us) { return mraa_pwm_pulsewidth_us(m_pwm, us); }