예제 #1
0
파일: pwm.cpp 프로젝트: utcoupe/Coupe2012
void setRightPWM(int value){
	MoteurD.setSpeed(abs(value));
	if(value>0)
		MoteurD.run(FORWARD);
	else
		MoteurD.run(BACKWARD);
}
예제 #2
0
파일: pwm.cpp 프로젝트: utcoupe/Coupe2012
void setLeftPWM(int value){
	MoteurG.setSpeed(abs(value));
	if(value<0)
		MoteurG.run(FORWARD);
	else
		MoteurG.run(BACKWARD);
}
예제 #3
0
파일: pwm.cpp 프로젝트: utcoupe/Coupe2012
void initPWM(){
	MoteurG = AF_DCMotor(1, MOTOR12_64KHZ);
	MoteurD = AF_DCMotor(2, MOTOR12_64KHZ);
	MoteurG.setSpeed(0);
	MoteurG.run(FORWARD);
	MoteurD.setSpeed(0);
	MoteurD.run(FORWARD);
}
예제 #4
0
MotorControl::MotorControl(int leftForward, int rightForward, int leftReverse, int rightReverse){
    Serial.begin(9600);
    Serial.print("MotorControl initiated");
    _leftForward=leftForward;
    _rightForward=rightForward;
    _leftReverse=leftReverse;
    _rightReverse=rightReverse;
    motorLeft.run(RELEASE);
    motorRight.run(RELEASE);
}
예제 #5
0
파일: motor.cpp 프로젝트: galoompa/pl
void motor_setup()
{
  lift_motor.setSpeed( RAW_LIFT_DOWN_SPEED );
  lat_stepper.setSpeed( RAW_LAT_SPEED );
  lift_action = MOTOR_STOP;
  lat_action = MOTOR_STOP;
}
예제 #6
0
파일: motor.cpp 프로젝트: galoompa/pl
void set_lift_action_auto( motor_direction dir )
{
  /*if( interlocked_up() || interlocked_down() ) {
    return;
  }*/
  lift_motor_manual = false;
  //lift_action = dir;
  lift_motor_reference = get_lift_cm();
  switch( dir ) {
    case MOTOR_UP:
      if( interlocked_up() ) {
        return;
      }
      lift_action = dir;
      //lift_motor.run( FORWARD );
      //lift_motor.setSpeed( RAW_LIFT_UP_SPEED );
      break;
    case MOTOR_DOWN:
      if( interlocked_down() ) {
        return;
      }
      lift_action = dir;
      //lift_motor.run( BACKWARD );
      //lift_motor.setSpeed( RAW_LIFT_DOWN_SPEED );
      break;
    case MOTOR_STOP:
    default:
      lift_action = dir;
      lift_motor.run( RELEASE );
      break;
  }
}
예제 #7
0
파일: motor.cpp 프로젝트: utcoupe/coupe14
void set_pwm_right(int pwm){
	if (pwm > 0)
		pwm += PWM_MIN;
	else if (pwm < 0)
		pwm -= PWM_MIN;

	if(pwm > 255)
		pwm = 255;
	else if(pwm < -255)
		pwm = -255;

	if(pwm >= 0)
		motor_right.run(FORWARD);
	else
		motor_right.run(BACKWARD);
	
	motor_right.setSpeed(abs(pwm));
}
예제 #8
0
파일: motor.cpp 프로젝트: utcoupe/coupe14
void set_pwm_left(int pwm){
	pwm = -pwm;//les moteurs sont faces à face, pour avancer il faut qu'il tournent dans un sens différent
	if (pwm > 0)
		pwm += PWM_MIN;
	else if (pwm < 0)
		pwm -= PWM_MIN;

	if(pwm > 255)
		pwm = 255;
	else if(pwm < -255)
		pwm = -255;

	if(pwm >= 0)
		motor_left.run(FORWARD);
	else
		motor_left.run(BACKWARD);

	motor_left.setSpeed(abs(pwm));
}
예제 #9
0
파일: actions.cpp 프로젝트: utcoupe/coupe14
void pump(bool etat) {
	static bool saved_etat = etat;
	if (etat == PAUSE_PUMP) {
		digitalWrite(PIN_VALVE, HIGH);
		pump_motor.setSpeed(0);
	} else  {
		if (etat == RESUME_PUMP) {
			etat = saved_etat;
		} else {
			saved_etat = etat;
		}
		if (etat) {
			digitalWrite(PIN_VALVE, LOW);
			pump_motor.setSpeed(PWM_PUMP);
		} else {
			digitalWrite(PIN_VALVE, HIGH);
			pump_motor.setSpeed(0);
		}
	}
}
예제 #10
0
파일: motor.cpp 프로젝트: galoompa/pl
void set_lift_action( motor_direction dir )
{
  // override interlock on non-auto
  /*if( interlocked_up() || interlocked_down() ) {
    return;
  }*/
  lift_motor_manual = true;
  lift_action = dir;
  switch( dir ) {
    case MOTOR_UP:
      lift_motor.run( FORWARD );
      lift_motor.setSpeed( RAW_LIFT_UP_SPEED );
      break;
    case MOTOR_DOWN:
      lift_motor.run( BACKWARD );
      lift_motor.setSpeed( RAW_LIFT_DOWN_SPEED );
      break;
    case MOTOR_STOP:
    default:
      lift_motor.run( RELEASE );
      break;
  }
}
예제 #11
0
파일: actions.cpp 프로젝트: utcoupe/coupe14
void initAct() {
	//Moteurs :
	pump_motor.run(FORWARD);
	cmdBrasServ(ANGLE_DEPOT, LONGUEUR_DEPOT);
	servoRet.write(150); 
	pump(true);
	stepperAsc.setAcceleration(AMAX_STEPPER);
	stepperAsc.setMaxSpeed(VMAX_STEPPER);
	stepperAsc.move(6000);
	while (digitalRead(PIN_INT_HAUT_ASC) == 1) {
		updateBras();
	}
	topStop();
	pump(false);
	cmdBrasServ(ANGLE_DEPOT, LONGUEUR_DEPOT);
	cmdAsc(HAUTEUR_GARDE_DEPOT);
	while (!next_step)
		stepperAsc.run();
	next_step = true;
	servoRet.write(180); 
}
예제 #12
0
파일: motor.cpp 프로젝트: galoompa/pl
void motor_loop()
{
  // lateral motor run
  if( lat_action == MOTOR_RIGHT && interlocked_right() ||
      lat_action == MOTOR_LEFT  && interlocked_left() )
  {
    Serial.println( "Lat interlocked" );
    set_lat_action( MOTOR_STOP );
  }
  if( lat_action != MOTOR_STOP ) {
    lat_stepper.runSpeed();
  }
  
  // lift motor run (if auto)
  // time stuff:
  unsigned long time = millis();
  static long next_sample_time = 0;
  if( next_sample_time == 0 ) {
    next_sample_time = time;
  }
  // control loop
  if( time > next_sample_time ) {
    next_sample_time += LIFT_CONTROL_LOOP_MS;
    if( !lift_motor_manual ) {
      float error;
      switch( lift_action ) {
        case MOTOR_UP:
          if( get_lift_cm() > LIFT_UPPER_LIMIT || interlocked_up() ) {
            lift_action = MOTOR_STOP;
            lift_motor.run( RELEASE );
            break;
          }
          lift_motor.run( FORWARD );
          lift_motor_reference += LIFT_CONTROL_CM_PER_LOOP;
          error = lift_motor_reference - get_lift_cm();
          if( error > 0 ) {
            lift_motor.setSpeed( Kp * error );
          } else {
            lift_motor.setSpeed( 0 );
          }
          break;
        case MOTOR_DOWN:
          if( get_lift_cm() < LIFT_LOWER_LIMIT || interlocked_down() ) {
            lift_action = MOTOR_STOP;
            lift_motor.run( RELEASE );
            break;
          }
          lift_motor.run( BACKWARD );
          lift_motor_reference -= LIFT_CONTROL_CM_PER_LOOP;
          error = lift_motor_reference - get_lift_cm();
          if( error < 0 ) {
            lift_motor.setSpeed( -Kp * error );
          } else {
            lift_motor.setSpeed( 0 );
          }
          break;
        case MOTOR_STOP:
          //lift_motor.run( RELEASE );
          break;
      }
    }
  }
}
예제 #13
0
void MotorControl::backward(){
    motorLeft.setSpeed(_leftReverse);
    motorRight.setSpeed(_rightReverse);
    motorLeft.run(BACKWARD);
    motorRight.run(BACKWARD);
}
예제 #14
0
void MotorControl::brake(){
    motorLeft.run(RELEASE);
    motorRight.run(RELEASE);
}
예제 #15
0
void MotorControl::turnRight(){
    motorLeft.setSpeed(_leftForward);
    motorRight.setSpeed(_rightReverse);
    motorLeft.run(FORWARD);
    motorRight.run(BACKWARD);
}
예제 #16
0
void MotorControl::forward(){
    motorLeft.setSpeed(_leftForward);
    motorRight.setSpeed(_rightForward);
    motorLeft.run(FORWARD);
    motorRight.run(FORWARD);
}