Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}
Exemple #5
0
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;
}
Exemple #6
0
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);
 }
Exemple #8
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);
 }