找回密码
 立即注册

QQ登录

只需一步,快速开始

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

Arduino智能车循迹程序

[复制链接]
ID:654550 发表于 2019-12-2 19:21 | 显示全部楼层 |阅读模式
使用arduino 控制
红外循迹
可以自己设定参数调节速度
  1. #define STOP      0
  2. #define FORWARD   1
  3. #define BACKWARD  2
  4. #define TURNLEFT  3
  5. #define TURNRIGHT 4

  6. int leftMotor1 = 7;
  7. int leftMotor2 = 8;
  8. int rightMotor1 = 9;
  9. int rightMotor2 = 10;

  10. const int LeftPin1=A1;
  11. const int LeftPin2=A2;
  12. const int RightPin1=A3;
  13. const int RightPin2=A4;

  14. int leftPWM = 5;  //PWM
  15. int rightPWM = 6;  //PWM

  16. void setup() {
  17. //寻迹模块引脚初始化
  18. pinMode(LeftPin1,INPUT);
  19. pinMode(LeftPin2,INPUT);
  20. pinMode(RightPin1,INPUT);
  21. pinMode(RightPin2,INPUT);
  22. pinMode(leftMotor1, OUTPUT);
  23. pinMode(leftMotor2, OUTPUT);
  24. pinMode(rightMotor1, OUTPUT);
  25. pinMode(rightMotor2, OUTPUT);
  26. pinMode(leftPWM, OUTPUT);
  27. pinMode(rightPWM, OUTPUT);
  28. }
  29. void loop() {
  30.   // put your main code here, to run repeatedly:
  31.   tracing();
  32. }

  33. void motorRun(int cmd,int value){
  34.    analogWrite(leftPWM, value);  //设置PWM输出,即设置速度
  35.   analogWrite(rightPWM, value);
  36.   switch(cmd){
  37.     case FORWARD:
  38.       digitalWrite(leftMotor1, HIGH);
  39.       digitalWrite(leftMotor2, LOW);
  40.       digitalWrite(rightMotor1, HIGH);
  41.       digitalWrite(rightMotor2, LOW);
  42.       break;
  43.      case BACKWARD:
  44.       digitalWrite(leftMotor1, LOW);
  45.       digitalWrite(leftMotor2, HIGH);
  46.       digitalWrite(rightMotor1, LOW);
  47.       digitalWrite(rightMotor2, HIGH);
  48.       break;
  49.      case TURNLEFT:
  50.       digitalWrite(leftMotor1, HIGH);
  51.       digitalWrite(leftMotor2, LOW);
  52.       digitalWrite(rightMotor1, LOW);
  53.       digitalWrite(rightMotor2, HIGH);
  54.       break;
  55.      case TURNRIGHT:
  56.       digitalWrite(leftMotor1, LOW);
  57.       digitalWrite(leftMotor2, HIGH);
  58.       digitalWrite(rightMotor1, HIGH);
  59.       digitalWrite(rightMotor2, LOW);
  60.       break;
  61.      default:
  62.       digitalWrite(leftMotor1, LOW);
  63.       digitalWrite(leftMotor2, LOW);
  64.       digitalWrite(rightMotor1, LOW);
  65.       digitalWrite(rightMotor2, LOW);
  66.   }
  67. }

  68. void tracing(){
  69.   int data[4];               
  70.   data[0] = digitalRead(A4);
  71.   data[1] = digitalRead(A3);
  72.   data[2] = digitalRead(A2);
  73.   data[3] = digitalRead(A1);

  74. if(!data[0]&&data[1]&&data[2]&&!data[3]){    //中间检测到黑线
  75. motorRun(FORWARD, 400);
  76.   }
  77. if(data[0]&&!data[3])  //右边检测到黑线
  78.   {
  79.     motorRun(TURNRIGHT, 150);
  80.   }

  81.   if(!data[0] || data[3])  //左边检测到黑线
  82.   {
  83.     motorRun(TURNLEFT, 150);
  84.   }
  85. if(!data[0] && !data[1] && !data[2] && !data[3])  //左右都没有检测到黑线
  86.   {
  87.     motorRun(BACKWARD, 100);
  88.   }

  89.   if(data[0] && data[3])  //左右都检测到黑线是停止
  90.   {
  91.     motorRun(STOP, 0);
  92.     while(1);      //需要根据情况更改
  93.   }
  94. }
复制代码


回复

使用道具 举报

ID:688644 发表于 2020-1-29 18:09 | 显示全部楼层
下载学习,谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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