Exemplo n.º 1
0
//0 is to the right, and position increases leftward
void motor_crude_controller(uint16_t current_position, uint16_t reference){
	
	
	//if requested position is out of reach
	if(reference > max_left){
		motor_crude_controller(max_left, reference);
	}
	
	//if we're close to ref
	if(abs(current_position - reference) < 300){
		motor_speed(0);
		return;
	}
	
	//too far left
	if(current_position > reference){
		motor_direction(right);
		motor_speed(100);
	}
	//too far right
	else{
		motor_direction(left);
		motor_speed(100);
	}
}
Exemplo n.º 2
0
void motor_test(void){
	motor_direction(right);
	_delay_ms(500);
	motor_direction(left);
	_delay_ms(500);

}
Exemplo n.º 3
0
//MOTOR SPEED NEEDS TO BE TUNED FOR INDIVIDUAL GAME BOARD
void motor_controller_calibrate_by_reset(){
	
	uint8_t speed = 65;
	
	motor_init();
	
	uint16_t position;
	uint16_t prev_position;
	
	motor_speed(speed);
	motor_direction(right);
	_delay_ms(150);
	
	position =  motor_encoder_read();
	
	//go right until stopped, then set encoder to zero
	while(position != prev_position){
		
		
		position =  motor_encoder_read();
		_delay_ms(100);
		prev_position = position;
		position = motor_encoder_read();
		printf("position: %u\tPrev: %u\n", position, prev_position);

		
	}
	motor_encoder_reset();
	
	motor_speed(speed);
	motor_direction(left);
	_delay_ms(150);
	
	//go left until stopped, set max left to current position
	do{
		
		
		position =  motor_encoder_read();
		_delay_ms(100);
		prev_position = position;
		position = motor_encoder_read();
		printf("position: %d\n", position);
		
		
	} while(position != prev_position);
	
	max_left = position;
	motor_speed(0);
	
	motor_speed(speed);
	motor_direction(right);
	_delay_ms(100);
	while(motor_encoder_read() > 4500){
		_delay_ms(100);
	}
}
Exemplo n.º 4
0
//negative speed to the right to make transition to encoder values easier
void motor_speed_direction(int16_t speed){
	if(speed < 0){
		motor_direction(right);
	}
	else{
		motor_direction(left);
	}
	
	motor_speed(abs(speed));
}
Exemplo n.º 5
0
void motor_speed(int16_t speed){
	if (speed > 0) {	motor_direction(MOTOR_LEFT);  }
	else		   {	motor_direction(MOTOR_RIGHT); }
		
	speed = abs(speed);
	
	if		(speed > MOTOR_MAX_SPEED)	{ speed = MOTOR_MAX_SPEED; }
	//else if (speed < MOTOR_MIN_SPEED)	{ speed =				1; }
		
	max520_write(MAX520_CHANNEL_MOTOR, (uint8_t)speed);
}
Exemplo n.º 6
0
void motor_speed_direction_cap(int16_t speed, uint8_t cap){
	if(speed < 0){
		motor_direction(right);
	}
	else{
		motor_direction(left);
	}
	if(abs(speed) > cap){
		motor_speed(abs(cap));
	}
	
}
Exemplo n.º 7
0
void motor_speed(int16_t speed){
	if(speed > 0){
		motor_direction(right);
	}
	else{
		motor_direction(left);
		speed = abs(speed);
	}
	
	if(speed > max_speed){
		speed = max_speed;
	}
	
	dac_write(0, speed);
}