void turn_direction(float direction)
{
	int end_turn;
		
		if (direction < PI)     // turn clockwise
		{
			e_set_steps_left(0);
			e_set_speed_left(TURN_SPEED);  // motor speed in steps/s
			e_set_speed_right(-TURN_SPEED);  // motor speed in steps/s
			
			// calculate how many steps the robot needs to turn
			end_turn = (int)(STEPS_FOR_2PI*(direction/(2*PI)));   
			while(e_get_steps_left() < end_turn){
				flick_led();
		}   // turn until done 
		}
		else 					// turn counterclockwise
		{
			e_set_steps_right(0);
			e_set_speed_left(-TURN_SPEED);  // motor speed in steps/s
			e_set_speed_right(TURN_SPEED);  // motor speed in steps/s
			
			// calculate how many steps the robot needs to turn
			end_turn = (int)(STEPS_FOR_2PI*((2*PI-direction)/(2*PI)));
			while(e_get_steps_right() < end_turn){
				flick_led();
			}   // turn until done
		}

		// stop motors
		e_set_speed_left(0);  // motor speed in steps/s
		e_set_speed_right(0);  // motor speed in steps/s
}
Exemple #2
0
/** Stop the motor activities
 *
 * Set the speed for zero and clean the step counter
 */
void stop_motors()
{
  e_set_speed_right(0);
  e_set_speed_left(0);

  e_set_steps_right(0);
  e_set_steps_left(0);

  send_char(1);/* It signalize the end of operation. */
}
Exemple #3
0
void send_steps()
{
  int steps_right,steps_left;

  steps_right = e_get_steps_right();
  steps_left = e_get_steps_left();
  e_set_steps_right(0);
  e_set_steps_left(0);

  ve_send_int(steps_right);
  ve_send_int(steps_left);
}
void run_square() {
    unsigned char useGyroFlag = 0;  // 0=use odometry, 1=use gyroscope
    unsigned char squareState = 0;
    signed int tempZ = 0;
    float turnAngle = 0;
    float diffTime = 0;
    float dpmsValue = 0;

    //e_init_uart2(BAUD230400); // for debug
    
    while(1) {
        if(isEpuckVersion1_1() && useGyroFlag==1) {
            switch(squareState) {
                case 0: // set speed to go forward (square side)
                    e_set_speed_left(150);
                    e_set_speed_right(150);
                    e_set_steps_left(0);
                    squareState = 1;
                    break;
                case 1: // go forward for a while
                    if(e_get_steps_left() >= 800) {
                        squareState = 2;
                    }
                    break;
                case 2: // set speed to rotate on the square angle
                    e_set_steps_left(0);
                    e_set_speed_left(-100);
                    e_set_speed_right(100);
                    resetTime();
                    turnAngle = 0;
                    squareState = 3;
                    break;
                case 3: // rotate 90 degrees
                    tempZ = getZAxisGyro();
                    dpmsValue = rawToDpms(tempZ);
                    diffTime = getDiffTimeMsAndReset();
                    turnAngle += diffTime*dpmsValue; // integrate the angular rate to get the rotation angle
                    //sprintf(buffer, "%f,%d,%f\r\n", turnAngle,tempZ,diffTime);
                    //e_send_uart2_char(buffer, strlen(buffer));
                    if(turnAngle >= 90) {
                        e_set_speed_left(0);
                        e_set_speed_right(0);
                        squareState = 0;
                    }
                    break;
            }
        } else {
            switch(squareState) {
                case 0: // set speed to go forward (square side)
                    e_set_speed_left(150);
                    e_set_speed_right(150);
                    e_set_steps_left(0);
                    squareState = 1;
                    break;
                case 1: // go forward for a while
                    if(e_get_steps_left() >= 800) {
                        squareState = 2;
                    }
                    break;
                case 2: // set speed to rotate on the square angle
                    e_set_steps_left(0);
                    e_set_speed_left(-100);
                    e_set_speed_right(100);
                    resetTime();
                    turnAngle = 0;
                    squareState = 3;
                    break;
                case 3: // rotate 90 degrees
                    turnAngle = e_get_steps_left();
                    //sprintf(buffer, "%f,%d,%f\r\n", turnAngle,tempZ,diffTime);
                    //e_send_uart2_char(buffer, strlen(buffer));
                    if(turnAngle <= -330) {    // from field test 330 steps correspond to about 90 degrees
                        e_set_speed_left(0);
                        e_set_speed_right(0);
                        squareState = 0;
                    }
                    break;
            }
        }
    }
}