예제 #1
0
/* O robo anda em linha reta ate encontrar uma parede e
   entao passa a seguir a parede estando com ela sempre 
	 em seu lado direito */
int main() {

	unsigned short *dist[16];
	
	/* inicia no modo busca-parede */
	mode = 0;
	
	/* cria proximity call back para quando estiver proximo da parede */
	register_proximity_callback(3, MIM_DIST, found);
	register_proximity_callback(4, MIM_DIST, found);

	/* comeca andando em linha reta */
	set_motors_speed(SPEED, SPEED);

	/* enquanto estiver no modo busca-parede */
	while(mode == 0);

	/* passa a andar para esquerda */
	set_motors_speed(HSPEED, 0);

	/* enquanto nao estiver de lado para parede */
	do {
		read_sonar(3, dist[3]);
		read_sonar(4, dist[4]);
	} while(*(dist[3]) <= MIM_DIST && *(dist[4]) <= MIM_DIST);

	/* volta a andar para frente */
	set_motors_speed(SPEED, SPEED);
	dir = 0;
	
	/* fica seguindo a parede */
	while(mode) {
		read_sonar(7, dist[7]);
		read_sonar(8, dist[8]);
		if ( *(dist[7]) <= MIM_DIST || *(dist[8]) <= MIM_DIST ) {
			if(dir != 2) {
				set_motor_speed(1, HSPEED);
			}
		} else if ( *(dist[7]) >= MAX_DIST || *(dist[8]) >= MAX_DIST ) {
			if(dir != 1) {
				set_motor_speed(0, HSPEED);
			}
		} else {
			if(dir != 0) {
				set_motors_speed(SPEED, SPEED);
			}
		}
	}
	
	return 0;
}
예제 #2
0
파일: ronda.c 프로젝트: isadorasophia/MC404
void _start(void) {
    /* Initialize timer */
    total_time = 1;

    /* Set alarm */ 
    set_alarm();

    /* Go! */   
    forward();

    /* Set proximity callbacks */
    register_proximity_callback(LEFT_SONAR_ID, MIN_DISTANCE, &turn_right);
    register_proximity_callback(RIGHT_SONAR_ID, MIN_DISTANCE, &turn_right);

    for ever;
}