久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2242|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

從其它地方找的arduino循跡小車源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:338448 發(fā)表于 2018-5-25 22:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
int led1=0,led2=0,led3=0,led4=0,led5=0,led6=0,led7=0;          //電壓7.8V ;led1~7 分別用來接收七個探頭檢測回來的值
int in1=9,in2=3,in3=10,in4=11;                                 //數(shù)字IO9,3,10,11用來控制電機
int sum=0;
void setup()
{
  pinMode(0,INPUT);pinMode(7,INPUT);
  pinMode(1,INPUT);pinMode(8,INPUT);
  pinMode(2,INPUT);pinMode(3,OUTPUT);
  pinMode(6,INPUT);pinMode(9,OUTPUT);
  pinMode(4,INPUT);pinMode(10,OUTPUT);
  pinMode(13,INPUT);pinMode(11,OUTPUT);
  pinMode(12,INPUT);pinMode(5,INPUT);
  digitalWrite(in2,LOW);digitalWrite(in4,LOW);
}
void motor(char pwmpin,char pin,int val)              //給電機兩個輸入口賦PWM
{   
   pinMode(pin, OUTPUT);   
   analogWrite(pwmpin,val);
   digitalWrite(pin,LOW);
}
void turn_led1_0()                                    //in120in2給低電平
{                                                     //in3250in4給低電平
  motor(in1,in2,20);                                  //PWM滿值255,差值決定轉(zhuǎn)角度,大小決定速度
  motor(in3,in4,250);
}
void turn_led1_1()
{
  motor(in1,in2,20);
  motor(in3,in4,250);
}
void turn_led2_0()
{
   motor(in1,in2,70);
   motor(in3,in4,250);
}
void turn_led2_1()
{
  motor(in1,in2,130);
  motor(in3,in4,250);
}
void turn_led3_0()
{
  motor(in1,in2,180);
  motor(in3,in4,250);
}
void turn_led3_1()
{
  motor(in1,in2,250);
  motor(in3,in4,250);
}
void turn_led4_0()
{
  motor(in1,in2,250);
  motor(in3,in4,250);
}
void turn_led4_1()
{
  motor(in1,in2,250);
  motor(in3,in4,250);
}
void turn_led5_0()
{
  motor(in1,in2,250);
  motor(in3,in4,180);
}
void turn_led5_1()
{
  motor(in1,in2,250);
  motor(in3,in4,130);
}
void turn_led6_0()
{
  motor(in1,in2,250);
  motor(in3,in4,70);
}
void turn_led6_1()
{
  motor(in1,in2,250);
  motor(in3,in4,20);
}
void turn_led7_0()
{
   motor(in1,in2,250);
   motor(in3,in4,20);
}
void turn_stop()
{
  motor(in1,in2,0);
  motor(in1,in2,0);
}
void test()                              //檢測光電管探頭。是黑線返回高電平(1),白線返回低電平(0),這與實際電路相關(guān)
{                                        //0,1,2,6,4,7,8是數(shù)字IO口,讀取檢測值
  led1=digitalRead(0);
  led2=digitalRead(1);
  led3=digitalRead(2);
  led4=digitalRead(6);
  led5=digitalRead(4);
  led6=digitalRead(7);
  led7=digitalRead(8);
}
int deal()                            //對每個探頭賦值:從左往右-6-4-2,0,2,4,6 記錄檢測到黑線的探頭個數(shù)并將值相加
    {
      int a=0,b=0,c=0,d=0,e=0,f=0,g=0;
      int i=0,value=0;
      test();
      if(led1==1)
      {
         a=-6;
         i++;
       }
      if(led2==1)
     {
       b=-4;
       i++;
     }
      if(led3==1)
      {
        c=-2;
        i++;
      }
      if(led4==1)
      {
        d=0;
        i++;
      }
      if(led5==1)
     {
       e=2;
       i++;
     }
      if(led6==1)
     {
       f=4;
       i++;
     }
      if(led7==1)
      {
        g=6;
        i++;
      }
      sum=a+b+c+d+e+f+g;                  //求平均值,較精確的確定黑線位置               
      if(i==0) value=8;                   //分母不能為0,沖出跑道均沒檢測到的特殊情況,讓小車保持上一次的狀態(tài)
      else if(i<3) value=sum/i;           //一般的情況:1個或2個檢測到黑線
      else
      {
        if(sum<0) value=-6;                //特殊情況:左急彎,右急彎,直道
        else if(sum>0) value=6;
        else value=0;
      }
      return value;
    }
void loop()
{
  static char a[5],j=0;                  //數(shù)組記錄上次值
  if(j==5) j=0;
  if(deal()==8)
  {
    if(j==0) a[j]=a[4];
    else   a[j]=a[j-1];
  }
  switch(a[j])                            //對各種返回值的響應(yīng)速度和轉(zhuǎn)彎角度
  {
    case -6:turn_led1_0();break;
    case -5:turn_led1_1();break;
    case -4:turn_led2_0();break;
    case -3:turn_led2_1();break;
    case -2:turn_led3_0();break;
    case -1:turn_led3_1();break;
    case  0:turn_led4_0();break;
    case  1:turn_led4_1();break;
    case  2:turn_led5_0();break;
    case  3:turn_led5_1();break;
    case  4:turn_led6_0();break;
    case  5:turn_led6_1();break;
    case  6:turn_led7_0();break;
    default:turn_led4_0();break;
  }
  j++;
}
/*相比較于數(shù)字信號的話,這個處理程序應(yīng)該比較好了。PWM值,角度,速度與實際情況有較大聯(lián)系,車的配置,摩擦,電壓,車重量,電機轉(zhuǎn)速,輪子大小等,所以各位下載后還需細(xì)調(diào)。不過,這個程序就在于很好調(diào),你只要改變上面的PWM值就可實現(xiàn)轉(zhuǎn)彎與速度的實際搭配*/

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久高清 | 色网站入口 | 亚洲精品黄色 | 国产成都精品91一区二区三 | 久久久久国产一区二区三区 | 日韩精品久久一区二区三区 | 国产高清视频 | 国产性生活一级片 | 三级成人在线 | 日本a v在线播放 | 国产成人影院 | 久久91精品国产一区二区三区 | 日日噜噜噜夜夜爽爽狠狠视频97 | 日韩三级一区 | 成人免费在线视频 | 男人的天堂中文字幕 | av免费在线观看网站 | 亚洲一区二区三区四区五区午夜 | 99精品久久久久久中文字幕 | 亚洲 欧美 日韩在线 | 欧美在线视频一区二区 | 国产一级在线 | 欧美aⅴ | 免费在线日韩 | 91人人视频在线观看 | 精品久久一区 | 欧美激情精品久久久久久 | 羞羞的视频免费观看 | 91精品入口蜜桃 | 国产精品一区二区久久 | 日韩美女一区二区三区在线观看 | 在线伊人网 | 干干天天 | 国产成年人视频 | 中文字幕精品一区二区三区精品 | 影音先锋中文字幕在线观看 | 天天色官网 | 成人午夜视频在线观看 | 精品福利一区二区三区 | 亚洲a在线观看 | 国产精品99精品久久免费 |