}

            }

        }

    }

   

}

 

/*主程序的结构是一个大的循环用一些判断分割成数段,这样做的好处是避免了多次调用子程序引发的频繁的出栈入栈的时间损失,但程序整体的可读性较差,不便于维护*/

void task_0()      /*检测地面灰度*/

{

    wait( 1.000000 );   /*离开出发点*/ /*这句很关键,可以避免重复检测白线*/

    while(gi_2 < 5)                   

    {

        if(gi_2 == 1)    /*如果处于搜索房间的状态*/ /*起始加入一个判断,避免无谓的检                                                                                */

        {

            ma_1 =analogport(7);  /*检测地面灰度*/

            if(ma_1 < 170)        /*如果发现白线*/ /*此参数也应该根据自己的硬件条                                                                                 件和场地光照情况适当调整*/

            {

                while(ma_1 < 170)   /*当机器人在白线上的时候*/

                {

                    ma_1 =analogport(7);  /*检测地面灰度*/

                }

                gi_3 = gi_3 + 1;   /*一旦机器人离开白线,则计数一次*/

            }

        }else

        {

            if(gi_2 == 4)   /*如果处于回家的状态*/

            {

                ma_1 =analogport(7);  /*检测地面灰度*/

                if(ma_1 < 170)         /*如果发现白色*/

                {

                    tim_2 =seconds();  /*读取系统时间*/

                    gf_1 = tim_2 ;    /*记下发现白色的时刻*/

                    while(ma_1 < 170) /*当机器人在白色地面上的时候*/

                    {

                        ma_1 =analogport(7);  /*检测地面灰度*/

                        tim_2 =seconds();     /*读取系统时间*/

                    }

                    gf_2 = tim_2 - gf_1;    /*计算在白色地面上行走的时间*/

                    if(gf_2 > 0.300000)     /*发现出发点的白色正方形*/

                    {

                        stop();             /*机器人停止运动*/

                        gi_2 = 5 ;          /*跳出条件循环,程序结束*/

                    }

                }

            }