Robot C-program for Group C-3 (light), E5 Fall 2002

Yavor Georgiev

Tal Levy

Shalaj Tater

int abs(int x)
{
    if (x < 0) x = -1 * x;
    return x;
}

void turnaround(void) {
    motor(2,-100);
    motor(3,-100);
    sleep(3.0);
    motor(3,100);
    sleep(2.5);
}

void turnleft(void){ 
    motor (2, 100);
    motor (3, 0);
}

void turnright(void){
    motor (2, 0);
    motor (3, 100);
}

void show_values(void){
    printf ("\na2: %d a3: %d", analog(2), analog(3));
}

void movefwd(void){
    motor (2, 100);
    motor (3, 100);
}


int max = 0; 

void calibrate(void){
    while (start_button()==0){
        show_values();
    }
    max = analog(2);
    printf("\n10 sec to start");
    sleep(10.0);	
}

void choose(void){
    if ((analog(2)-analog(3))>5){
        turnleft();
    } 
    if ((analog(3)-analog(2))>5){
        turnright();
    }
    if ((abs(analog(2)-analog(3)))<=5){
        movefwd();
    }   
}
int done=0;

void win(void){
    if ((analog(2) >= (max-5)) || (analog(3) >= (max-10))){
        ao();
        tone(500.0, 1.0);
        sleep(1.0);
        tone(500.0, 1.0);
        sleep(1.0);
        tone(500.0, 1.0);
        sleep(1.0);
        done=1;
    }
}

int screwedup=0;

void screwup(void){ 
    if(seconds() >= 40.0){
	  reset_system_time();
        tone(500.0, 1.0);
        screwedup=1;	
        }
     if((screwedup==1)&&(seconds() <= 15.0)){
	     movefwd();  
      } else {
           screwedup=0;
      }
}

void main(void){
    int x, y, z;
    calibrate();
    motor(2,100);
    motor(3,100);
    reset_system_time();
    while(!stop_button()){
        while(x=digital(7) && y=digital(8) && z=!stop_button()&&done==0){
            show_values();
            choose();
            screwup();
            win();
        }
        if (!z || done==1){
            ao();
        } else {
            turnaround();
        }
    }
    ao();
}