PROGRAM SOURCES for the National Meeting


We used this Program Sources for the National Meeting. These are writtern in Interactive C. It's developed for Rug-Warrior by M.I.T.


Listfile [main.lis]

a:\src1.c
a:\src2.c
a:\src5.c
a:\src8.c
a:\src9.c
a:\src10.c
a:\src11.c
a:\xmas.c
a:\om.c
a:\hotaru3.c
a:\music1.c


[src1.c]


/****************************************************************/

/*                                                              */

/*      TITLE: 1.main program                                   */

/*                                                              */

/*      FILE NAME: src1.c                                       */

/*                                      ver.1.0  96/9/13        */

/*                                 written by sachiya yamamoto  */

/****************************************************************/

int pid2;

int new_win,old_win;



void main()

{

	int condition = 0;

	initialize();



	pid2 = start_process(fanfare());



	while(1)

	{

		condition = analog(pyro);

		new_win=0;

		if(condition <= 27)

		{

			printf("\nMANUAL");

			manual();

			i = 0;

			n = 0;

		}

		else if(condition >= 100 && condition <= 155)

		{	new_win=1;

			printf("\nWIN");

			win(); }

		else if(condition >= 37 && condition <= 90)

		{	printf("\nLOST");

			lost(); }

		else if(condition >= 165)

		{	printf("\nETC."); }



		if(old_win && !new_win)

			beeper_off();



		old_win=new_win;



	}

}


[src2.c]


void initialize()

{

/* main */	new_win = 0;

		old_win = 0;



/* win */	n = 0;



/* lost */	i = 0;



/* shoot */	safety_1 = 0;

		safety_2 = 0;

		safety_3 = 0;

		safety_4 = 0;



/* manual */	flag_rev = 0;

}


[src5.c]




/*****************************************************************************/

/*                                                                           */

/*	FUNCTION : void RUN_AWAY()                                           */

/*                                                                           */

/*  SUB FUNCTION in RUN_AWAY() : int SIGNAL() & void RUN()                   */

/*                                                                           */

/*                                                                           */

/*                                                                           */

/*                                                                           */

/*      produced by     DAISAKU TAKABAYASHI         1996,11,14 (THU)  REV.   */

/*****************************************************************************/



int     safety_1;

int     safety_2;

int     safety_3;

int	safety_4;

	

void run( float left, float right )

{

	motor(0,left);

	motor(1,right);

}



int signal()

{

	int     port_A=0x1000;

	int     signal=0;

	int     judge=0;



	while(1)

	{

		judge = bumper() & 0b100;

		signal=peek(port_A) & 0b00000110;       /* masking */



		if( signal==0x4 )       /* 0b 00000010 */

		{

			if( judge==0 )

			{	 

			    	return (1);

				printf("shoot outer center \n");

			}

			if( judge==0x4 ) 

			{

				printf("shoot inner center \n");

				return (4);

			}

		}

		else if( signal==0x2 && judge==0 )  /* 0b 00000100 */ 

		{

			printf("shoot outer left \n");

			return (2);

		}

		else if( signal==0x6 && judge==0 )  /* 0b 00000110 */

		{

			printf("shoot outer right \n");

			return (3);

		}

		else

		{

			printf("NO Signal\n");

			return (0);

		}

		sleep( 0.5 );

	}

}



void run_away()

{

	float   hi_spd;

	float   lo_spd;



	hi_spd=100.0;

	lo_spd=10.0;

	

	if( signal()==1 & safety_1==0 )		/* outer center */

	{

		sleep( 0.2 );                

		run( -hi_spd,-hi_spd );

			sleep( 1.3 );

		run( 0.0,0.0 );

		safety_1=1;

	}

	

	else if( signal()==2 & safety_2==0 )	/* outer left */

	{

			sleep( 0.2 );

		run( hi_spd,lo_spd );

			sleep( 0.4 );

		run( hi_spd,hi_spd );

			sleep( 0.4 );

		run( lo_spd,hi_spd );

			sleep( 0.4 );

		run( 0.0,0.0 );

		safety_2=1;

	}

	

	else if( signal()==3 & safety_3==0 )	/* outer right */

	{

			sleep( 0.2 );

		run( lo_spd,hi_spd );

			sleep( 0.4 );

		run( hi_spd,hi_spd );

			sleep( 0.3 );

		run( hi_spd,lo_spd );

			sleep( 0.4 );

		run( 0.0,0.0 );

		safety_3=1;

	}

	else if( signal()==4 & safety_4==0 & safety_1==1 )/* inner center */

	{

			sleep( 0.2 );

		run( -hi_spd,-hi_spd );

			sleep( 1.0 );

		run( 0.0,0.0 );

		safety_4=1;

	}

}


[src8.c]


/************************************************************************/

/*                                                                      */

/*      ----- Manual Mode -----         No.1    Date    1996/08/29      */

/*                                      No.2    Date    1996/10/06      */

/*                                      No.3    Date    1996/10/25      */

/*                                                                      */

/*                                      Written by Satoshi Ohzora       */

/*                                                                      */

/************************************************************************/



int flag_rev;



void manual()

{

	int     fb,lr;

	int     flag_fb,flag_lr;

	float   fb_p,lr_p,turn_p;

	float   CENTER = 112.0;

	float   MAX = 186.0;

	float   MIN = 36.0;

	float   dir_p;

	float   dir_m;

	float   t;



	kill_process(pid1);

	kill_process(pid3);



	dir_p = CENTER - MIN;

	dir_m = MAX - CENTER;



	fb = analog(6);

	lr = analog(7);



	printf("\nMANUAL");



	if(fb < 100)

	{       fb_p = ((CENTER-(float)fb)/dir_p)*100.0;

		flag_fb = 1;}           /* front */

	else if(fb >= 100 && fb <= 124)

	{       fb_p = 0.0;

		flag_fb = 0;}           /* stop */

	else if(fb > 124)

	{       fb_p = -(((float)fb-CENTER)/dir_m)*100.0;

		flag_fb = -1;}          /* back */



	if(lr < 100)

	{       lr_p = ((CENTER-(float)lr)/dir_p)*100.0;

		flag_lr = 1;}           /* right */

	else if(lr >= 100 && lr <= 124)

	{       lr_p = 0.0;

		flag_lr = 0;}           /* stop */

	else if(lr > 124)

	{       lr_p = -(((float)lr-CENTER)/dir_m)*100.0;

		flag_lr = -1;}          /* left */



	turn_p = lr_p;



	if(flag_fb == 1 && flag_lr == 1)

	{       motor(0,fb_p);

		motor(1,fb_p*(1.0-(lr_p*0.01)));}

	else if(flag_fb == 1 && flag_lr == 0)

	{       motor(0,fb_p);

		motor(1,fb_p);}

	else if(flag_fb == 1 && flag_lr == -1)

	{       motor(0,fb_p*(1.0-(-lr_p*0.01)));

		motor(1,fb_p);}



	else if(flag_fb == 0 && flag_lr == 1)

	{       if(flag_rev == -1){turn_p = -lr_p;}

		else{turn_p = lr_p;}

		motor(0,turn_p*0.5);

		motor(1,-turn_p*0.5);}

	else if(flag_fb == 0 && flag_lr == 0)

	{       motor(0,0.0);

		motor(1,0.0);

		flag_rev = 0;}                  /*reverse turn off*/

	else if(flag_fb == 0 && flag_lr == -1)

	{       if(flag_rev == 1){turn_p = -lr_p;}

		else{turn_p = lr_p;}

		motor(0,turn_p*0.5);

		motor(1,-turn_p*0.5);}



	else if(flag_fb == -1 && flag_lr == 1)

	{       motor(0,fb_p);

		motor(1,fb_p*(1.0-(lr_p*0.01)));

		flag_rev = -1;}                  /*reverse turn on(left->right)*/

	else if(flag_fb == -1 && flag_lr == 0)

	{       motor(0,fb_p);

		motor(1,fb_p);}

	else if(flag_fb == -1 && flag_lr == -1)

	{       motor(0,fb_p*(1.0-(-lr_p*0.01)));

		motor(1,fb_p);

		flag_rev = 1;}                  /*reverse turn on(right->left)*/

		

	run_away();

}


[src9.c]


void end()

{

	motor(0,0.0);

	motor(1,0.0);

	printf("\nE N D!");

}


[src10.c]


int	i;

int	pid3;



void lost()

{

	float   wait1 = 0.3;

	float   wait2 = 0.9;

	float   speed1 = 100.0;



	kill_process(pid1);

	kill_process(pid2);



	if(i == 0) { pid3 = start_process(hotaru()); }

	if(i < 3)

	{

		motor(0,speed1);

		motor(1,0.0);

		sleep(wait1);

	}

	else if(i >= 3 && i < 6)

	{

		motor(0,0.0);

		motor(1,speed1);

		sleep(wait1);

	}

	else if(i >= 6 && i < 13)

	{

		if(i%2 == 0)

		{

			motor(0,speed1);

			motor(1,0.0);

			sleep(wait1);

		}

		else if(i%2 == 1)

		{

			motor(0,0.0);

			motor(1,speed1);

			sleep(wait1);

		}

	}

	else if(i >= 13 && i < 16)

	{

		motor(0,-speed1);

		motor(1,0.0);

		sleep(wait1);

	}

	else if(i >= 16 && i < 19)

	{

		motor(0,0.0);

		motor(1,-speed1);

		sleep(wait1);

	}

	else if(i >= 19 && i < 26)

	{

		if(i%2 == 1)

		{

			motor(0,-speed1);

			motor(1,0.0);

			sleep(wait1);

		}

		else if(i%2 == 0)

		{

			motor(0,0.0);

			motor(1,-speed1);

			sleep(wait1);

		}

	}

	else if(i >= 26 && i < 45)

	{

		if(i%2 == 0)

		{

			motor(0,speed1);

			motor(1,speed1);

			sleep(wait1);

		}

		else if(i%2 == 1)

		{

			motor(0,-speed1);

			motor(1,-speed1);

			sleep(wait1);

		}

	}

	motor(0,0.0);

	motor(1,0.0);

	if(i==2 || i==5 || i==12 || i==15 || i==18 || i==25)

		sleep(wait2);

	else if(i >= 26 && i < 45){}

	else if(i == 45) { kill_process(pid3); }

	else    sleep(wait1);



	i++;

}


[src11.c]


int	pid1;

int	n;



void win()

{

	float	st_v = 80.0;

	float	rt_v = 70.0;

	float	rt_v2 = 20.0;

	float	rt_v3 = 60.0;

	float	rt_v4 = 10.0;

	float	stop1 = 0.5;

	float	stop2 = 1.5;



	if(n == 0)

	{	kill_process(pid2);

		kill_process(pid3);

		pid1 = start_process(satoshi());

		motor(0,-rt_v); motor(1,rt_v);

		sleep(stop1);

	}

	else if((n >= 1 && n < 4) || (n >= 5 && n < 8) 

	     || (n >= 14 && n < 17) || (n >= 19 && n < 22))

	{	motor(0,st_v); motor(1,st_v);

		sleep(stop1-0.1);

		motor(0,0.0); motor(1,0.0);

		sleep(0.1);

	}

	else if(n == 4 || n == 17)

	{	motor(0,rt_v); motor(1,-rt_v);

		sleep(stop1);

	}

	else if(n == 8 || n == 22)

	{	motor(0,-(rt_v-10.0)); motor(1,rt_v-10.0);}



	else if((n >= 9 && n < 11) || (n >= 23 && n < 25))

	{	sleep(stop1);

		motor(0,rt_v); motor(1,rt_v2);

		sleep(stop1);

		motor(0,rt_v2); motor(1,rt_v);

	}

	else if(n >= 11 && n < 13)

	{	motor(0,-rt_v2); motor(1,-rt_v);

		sleep(stop1);

		if(n == 11)

		{	motor(0,-rt_v); motor(1,-rt_v2);

			sleep(stop1);

		}

	}

	else if(n == 13)

	{	motor(0,-rt_v); motor(1,rt_v);

		sleep(stop1);

	}

	else if(n == 25)

	{	motor(0,rt_v3); motor(1,rt_v4);

		sleep(stop2);

	}

	else if(n == 26)

	{	motor(0,0.0); motor(1,0.0);

		kill_process(pid1);

	}

	n++;



}


[xmas.c]


void fanfare()

{

	char    x_mas[] = "U4e4e6e2r 4e4e6e2r 4e4gD6c2d14e2r 4f4f6f2f 4f4e4e4e 4e4d4d4e8d8g 4e4e6e2r 4e4e6e2r 4e4gD6c2d14e2r 4f4f6f2f 4f4e4e4e 4g4g4f4d12c";



	tempo = 10;

	play(x_mas); 

}


[om.c]


void satoshi()

{

	char	 yohey[] = "U6e2d6c2b6c2d6c2r D6e2f6g2a6g2e6g2r 6c2d6e2r6e2r6e2d6c2d6e2r6d2r6d2r 6e2d6c2b6c2d6c2r D6e2f6g2a6g2e6g2r 6c2d6e2r6g2r6g2e6c2d6e2r6d2r6c2r";



	tempo = 8;

	play(yohey);

}


[hotaru3.c]


void hotaru()

{

	char	hotaru[] = "4a 6d2d4d4#f 6e2d4e4#f 4d4d4#f4a 12b4b 6a2#f4#f4d 6e2d4e4#f 6d2b4b4a 12dU4b 6a2#f4#f4d 6e2d4eU4b 6a2#f4#f4a 12b4b 6a2#f4#f4d 6e2d4e4#f 6d2b4b4a 16d";



	tempo = 16;

	play(hotaru);

}


[music1.c]


int tempo = 12;

long time,newtime;

int music_current_command= 'o';

int music_next_command= 0;



void play(char song[])

{

    int i, duration, accidental, delta, note, rest;

    int notes[]= {0,2,3,5,7,8,10};

    int old_note= 30;

    play_reset();



    i= 0;

    while (song[i]) {

        while (1) {

            while (song[i] == ' ') ++i;

            if (song[i] == 'X') {++i; music_next_command= song[i]; ++i;}

            else break;

        }

	if (!song[i]) break;

	while (song[i] == 'D') {

	    old_note -= 12;

	    ++i;}

	while (song[i] == 'U') {

	    old_note += 12;

	    ++i;}

        if ('0' <= song[i] && song[i] <= '9') {

            duration= 0;

            while ('0' <= song[i] && song[i] <= '9') {

                duration = duration * 10 + song[i]-'0';

                ++i;

        }}

	if (song[i] == '#') {

	    accidental= 1;

	    ++i;

	} else if (song[i] == '&') {

	    accidental= -1;

	    ++i;

	} else {

	    accidental= 0;

	}

	if (song[i] == 'r') rest= 1;

	else {

            if (song[i] < 'a' || song[i] > 'g') {

                printf("\nBad note:%c\n", song[i]);

                beep();

                beep();

                beep();

                sleep(5.0);

                return;

            }

	    note= notes[song[i]-'a'] + accidental;

	    rest= 0;

	}

	i++;

	if (rest) {

	    play_note(0, duration);

	} else {

	    delta= note - (old_note % 12);

	    old_note += delta;

	    if (delta > 5) old_note -= 12;

	    if (delta < -5) old_note += 12;



	    play_note(old_note, duration);

    }}

    play_note(0, 1);

    music_command('o');

}



void music_command(int c)

{ music_current_command= c; }



void play_reset()

{   time= mseconds();

    newtime= time+100L;

}



void play_note(int note, int duration)

{

   play_note_2(note, duration*7);

   play_note_2(0, duration);

}



void play_note_2(int note, int duration)

{

    float freq;

    int   period;



    if (note) {	freq= 55.0 * (2. ^ (((float) note) / 12.)); }

    while (mseconds() < newtime);

    if (note) {

        set_beeper_pitch(freq);

        beeper_on();

    }

    else { beeper_off(); }

    if (music_next_command &&

        music_current_command != music_next_command){

	music_command(music_next_command);

	music_next_command= 0;

    }

    newtime += (long)(duration * tempo);

}


The music1.c was refered to the music.c. (writtern by M.I.T)

Go to Top