找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3461|回复: 1
收起左侧

巡线小车 三路传感器单片机源码

[复制链接]
ID:303605 发表于 2018-4-8 12:27 | 显示全部楼层 |阅读模式
单片机源程序如下:
  1. int you=18;
  2. int zuo=14;
  3. int zhong=16;
  4. void setup()
  5. {
  6.   pinMode( you, INPUT);//youbian
  7.   pinMode( zhong, INPUT);//zhognjian
  8.   pinMode( zuo, INPUT);//zuobian  
  9.   pinMode( 10, OUTPUT);
  10.   pinMode( 6, OUTPUT);
  11.   pinMode( 5, OUTPUT);
  12.   pinMode( 9, OUTPUT);
  13. }

  14.          void loop()
  15.           {
  16.             tracing();
  17.           }

  18. void tracing()
  19. {
  20.     if (( !( digitalRead(zhong) ) && ( digitalRead(zuo) && digitalRead(you) ) ))
  21.     {go2();}
  22.     if (( digitalRead(zhong) && ( digitalRead(zuo) && digitalRead(you) ) ))
  23.     {go6();}
  24.     if (( !( digitalRead(zhong) ) && ( !( digitalRead(zuo) ) && !( digitalRead(you) ) ) ))
  25.     {go3();}
  26.     if (( digitalRead(zhong) && ( digitalRead(you) && !( digitalRead(zuo) ) ) ))
  27.     {left();}
  28.     if (( !( digitalRead(zhong) ) && ( !( digitalRead(zuo) ) && digitalRead(you) ) ))
  29.     {left2();}
  30.     if (( digitalRead(zhong) && ( digitalRead(zuo) && !( digitalRead(you) ) ) ))
  31.     {right();}   
  32.     if (( !( digitalRead(zhong) ) && ( digitalRead(zuo) && !( digitalRead(you) ) ) ))
  33.     {right2();}
  34. }

  35. void left()
  36. {
  37. int num2;
  38.    while(1){
  39.     num2=digitalRead(zhong);         //循环判断youbian传感器度数,
  40.     if(num2==1)
  41.     {  turnL();                    //如果num2==0说
  42.      delay(2);}
  43.      else
  44.      break;                      //检测到num2==0说明转过头了,跳出循环,检测三个传感器的状态再做出相应动作
  45.    }   
  46. }
  47. void turnL()
  48. {
  49.     analogWrite(5 , 150);
  50.     analogWrite(6 , 0);
  51.     analogWrite(9 , 0);
  52.     analogWrite(10 , 150);
  53. }
  54. void left2()
  55. {
  56.   int num2;
  57.    while(1){
  58.     num2=digitalRead(zuo);         //循环判断youbian传感器度数,
  59.     if(num2==0)
  60.     {  turnL2();                    //如果num2==0说
  61.      delay(2);}
  62.      else
  63.      break;                      //检测到num2==0说明转过头了,跳出循环,检测三个传感器的状态再做出相应动作
  64.    }
  65. }

  66. void turnL2()
  67. {
  68.     analogWrite(5 , 255);
  69.     analogWrite(6 , 0);
  70.     analogWrite(9 , 0);
  71.     analogWrite(10 , 255);
  72. }
  73. void right()
  74. {
  75.    int num2;
  76.    while(1){
  77.     num2=digitalRead(zhong);         //循环判断youbian传感器度数,
  78.     if(num2==1)
  79.     {  turnR2();                    //如果num2==0说
  80.      delay(2);}
  81.      else
  82.      break;                      //检测到num2==0说明转过头了,跳出循环,检测三个传感器的状态再做出相应动作
  83.    }   
  84. }
  85. void turnR2()
  86. {
  87.     analogWrite(5 , 0);
  88.     analogWrite(6 , 150);
  89.     analogWrite(9 , 150);
  90.     analogWrite(10 , 0);
  91. }

  92. void right2()
  93. {  int num2;
  94.    while(1){
  95.     num2=digitalRead(you);         //循环判断youbian传感器度数,
  96.     if(num2==0)
  97.     {  turnR();                    //如果num2==0说
  98.      delay(2);}
  99.      else
  100.      break;                      //检测到num2==0说明转过头了,跳出循环,检测三个传感器的状态再做出相应动作
  101.    }   
  102. }
  103. void turnR()
  104. {
  105.     analogWrite(5 , 255);
  106.     analogWrite(6 , 0);
  107.     analogWrite(9 , 255);
  108.     analogWrite(10 , 0);
  109. }

  110. void go2()
  111. {
  112.     analogWrite(5 , 255);
  113.     analogWrite(6 , 0);
  114.     analogWrite(9 , 255);
  115.     analogWrite(10 , 0);
  116. }

  117. void go3()
  118. {
  119.     analogWrite(5 , 255);
  120.     analogWrite(6 , 0);
  121.     analogWrite(9 , 255);
  122.     analogWrite(10 , 0);
  123. }

  124. void go6()
  125. {
  126.     analogWrite(5 , 240);
  127.     analogWrite(6 , 10);
  128.     analogWrite(9 , 250);
  129.     analogWrite(10 , 10);
  130. }


复制代码

回复

使用道具 举报

ID:366693 发表于 2018-7-10 17:55 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表