⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 走白线.cpp

📁 C语言编写的
💻 CPP
字号:
///////////小车走白线的程序,包括前进和后退/////////////


////bit flag=1;             //标志位用来数白线,当第一次接触时count++ 以后则不加 
///bit label;              //标志位用来应付走出白线的情况




/***********************************小车向前走*********************************/
void forward(void)             //小车直走白线
{ //uchar i;
                                                          
   
   LMF=0,LMB=1;                      //两电机向前转
   RMF=0,RMB=1;  
   LastWLL=LastWLR=0;
 
     if (WLL==1&&WLM==0&&WLR==1)    //小车走直线时,两电机均向前转
               {pwm(200,200);
                flag=1;
				
               }    
     else if (WLL==0&&WLM==0&&WLR==1)    //小车向右偏时,左电机减速,右电机加速 左转
               {pwm(190,210);
                flag=1;
                label=1;  //标志位label=1表示右偏
				
               }
     else if  (WLL==1&&WLM==0&&WLR==0)   //小车向左偏时,右电机减速,左电机加速 右转
               {pwm(210,190);
                flag=1;
                label=0;                  //标志位label=0表示左偏
				}
     else if (WLL==0&&WLM==1&&WLR==1)    //小车向右偏得较多时,左电机减速,右电机加速 左转
               {pwm(180,220);
                flag=1;
                label=1;                  //标志位label=1表示右偏
				LastWLR=WLR;
               }
     else if (WLL==1&&WLM==1&&WLR==0)    //小车向左偏得较多时,右电机减速,左电机加速 右转
               {pwm(220,180);
                flag=1;
                label=0;                  //标志位label=0表示左偏
				LastWLL=WLL;
				}
     else if(WLL==1&&WLM==1&&WLR==1)     //小车越线,需要根据上次结果进行判断。
			if(	LastWLL=0)               //小车在白线右边
				{pwm(180,220);
                flag=1;
                label=1;                  //标志位label=1表示右偏
				}
			else if(LastWLR=0)
				{pwm(220,180);
                flag=1;
                label=0;                  //标志位label=0表示左偏

				}

				

				
			   
			   
			   
			   /* else if (WLL==0&&WLM==0&&WLR==0)    //小车越过白线 count++
               {pwm(200,200);
                if(flag)
                  {count++;               //当第一次接触时count++       
                   flag=0;                //标志置零以免重复在一条直线上count++
                  }
               }
      else     {flag=1;
              
	            if(label) pwm(100,140);
				else      pwm(140,100);
                
			   }
                                                      //   小车走出直线倒车
                                                            //现在暂时没有用
}







/************************************小车后退程序**********************/
void backward(void)             //小车直走白线
{ 
                                                          
   
   LMF=1,LMB=0;                      //两电机向前转
   RMF=1,RMB=0;
   LastWLL=LastWLR=0;
 
           if (WLL==1&&WLM==0&&WLR==1)    //小车走直线时,两电机均向前转
               {pwm(180,180);
                flag=1;
               }    
      else if (WLL==0&&WLM==0&&WLR==1)    //小车向右偏时,右电机减速,左电机加速 右后转
               {pwm(190,170);
                flag=1;
                label=1;                  //标志位label=1表示右偏
               }
      else if  (WLL==1&&WLM==0&&WLR==0)   //小车向左偏时,左电机减速,右电机加速 左后转
               {pwm(170,190);
                flag=1;
                label=0;                  //标志位label=0表示左偏
               }
      else if (WLL==0&&WLM==1&&WLR==1)    //小车向右偏得较多时,右电机减速,左电机加速 右后转
               {pwm(200,160);
                flag=1;
                label=1;                  //标志位label=1表示右偏
				LastWLR=WLR;
               }
      else if (WLL==1&&WLM==1&&WLR==0)    //小车向左偏得较多时,左电机减速,右电机加速 左后转
               {pwm(160,200);
                flag=1;
                label=0;                  //标志位label=0表示左偏
				LastWLL=WLL;
               }
      
	  else if(WLL==1&&WLM==1&&WLR==1)     //小车越线,需要根据上次结果进行判断。
			if(	LastWLL=0)               //小车在白线右边
				{pwm(220,180);
                flag=1;
                label=1;                  //标志位label=1表示右偏
				}
			else if(LastWLR=0)
				{pwm(180,220);
                flag=1;
                label=0;                  //标志位label=0表示左偏

				}
 
			   /*else if (WLL==0&&WLM==0&&WLR==0)    //小车越过白线 count--
               {pwm(180,180);
                if(flag)
                  {count--;               //当第一次接触时count--     
                   flag=0;                //标志置零以免重复在一条直线上count--
                  }
               }
      else     {flag=1;
	                                       //if(label) pwm(140,110);        //右偏右后转弯,左电机加速,右电机减速

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -