#include

#define STOP 0

#define FORWARD 1

#define BACKWARD 2

#define TURNLEFT 3

#define TURNRIGHT 4

int leftMotor1 = 16;

int leftMotor2 = 17;

int rightMotor1 = 18;

int rightMotor2 = 19;

int trac1 = 10; //从车头方向的最右边开始排序

int trac2 = 11;

int trac3 = 12;

int trac4 = 13;

int leftPWM = 5;

int rightPWM = 6;

Servo myServo; //舵机

int inputPin=7; // 定义超声波信号接收接口

int outputPin=8; // 定义超声波信号发出接口

void setup() {

// put your setup code here, to run once:

//串口初始化

Serial.begin(9600);

//舵机引脚初始化

myServo.attach(9);

//测速引脚初始化

pinMode(leftMotor1, OUTPUT);

pinMode(leftMotor2, OUTPUT);

pinMode(rightMotor1, OUTPUT);

pinMode(rightMotor2, OUTPUT);

pinMode(leftPWM, OUTPUT);

pinMode(rightPWM, OUTPUT);

//寻迹模块D0引脚初始化

pinMode(trac1, INPUT);

pinMode(trac2, INPUT);

pinMode(trac3, INPUT);

pinMode(trac4, INPUT);

}

void loop() {

// put your main code here, to run repeatedly:

tracing();

}

void motorRun(int cmd,int value)

{

analogWrite(leftPWM, value); //设置PWM输出,即设置速度

analogWrite(rightPWM, value);

switch(cmd){

case FORWARD:

Serial.println("FORWARD"); //输出状态

digitalWrite(leftMotor1, HIGH);

digitalWrite(leftMotor2, LOW);

digitalWrite(rightMotor1, HIGH);

digitalWrite(rightMotor2, LOW);

break;

case BACKWARD:

Serial.println("BACKWARD"); //输出状态

digitalWrite(leftMotor1, LOW);

digitalWrite(leftMotor2, HIGH);

digitalWrite(rightMotor1, LOW);

digitalWrite(rightMotor2, HIGH);

break;

case TURNLEFT:

Serial.println("TURN LEFT"); //输出状态

digitalWrite(leftMotor1, HIGH);

digitalWrite(leftMotor2, LOW);

digitalWrite(rightMotor1, LOW);

digitalWrite(rightMotor2, HIGH);

break;

case TURNRIGHT:

Serial.println("TURN RIGHT"); //输出状态

digitalWrite(leftMotor1, LOW);

digitalWrite(leftMotor2, HIGH);

digitalWrite(rightMotor1, HIGH);

digitalWrite(rightMotor2, LOW);

break;

default:

Serial.println("STOP"); //输出状态

digitalWrite(leftMotor1, LOW);

digitalWrite(leftMotor2, LOW);

digitalWrite(rightMotor1, LOW);

digitalWrite(rightMotor2, LOW);

}

}

void tracing()

{

int data[4];

data[0] = digitalRead(10);

data[1] = digitalRead(11);

data[2] = digitalRead(12);

data[3] = digitalRead(13);

if(!data[0] && !data[1] && !data[2] && !data[3]) //左右都没有检测到黑线

{

motorRun(FORWARD, 200);

}

if(data[0] || data[1]) //右边检测到黑线

{

motorRun(TURNRIGHT, 150);

}

if(data[2] || data[3]) //左边检测到黑线

{

motorRun(TURNLEFT, 150);

}

if(data[0] && data[3]) //左右都检测到黑线是停止

{

motorRun(STOP, 0);

while(1);

}

Serial.print(data[0]);

Serial.print("---");

Serial.print(data[1]);

Serial.print("---");

Serial.print(data[2]);

Serial.print("---");

Serial.println(data[3]);

}

matlab循迹小车,Arduino智能小车系列教程6——循迹小车相关推荐

  1. arduino 蓝牙 android 小车,arduino智能蓝牙小车

    大家好!这是小编第二次做小项目~ 小编目前专业是电气自动化的,不搞点硬件方面的东西,不学点控制技术,有点对不起自己所学的专业. 小编这次打算做arduino多功能智能小车~ 首先,为啥选择arduin ...

  2. python小车行走_[PYTHON系列教程]→控制小车

    上一节我们已经搭好了开发环境,接下来就可以写Python程序来控制小车了.首先用EV3主机.大型伺服马达和超声波传感器搭建一个小车:可以自由发挥,我的小车完成后长这样:下一步,我们用程序控制小车.首 ...

  3. Arduino智能小车——循迹篇

    Arduino智能小车--循迹篇 Arduino智能小车系列教程时空门: Arduino智能小车--拼装篇 点击跳转 Arduino智能小车--测试篇 点击跳转 Arduino智能小车--调速篇 点击 ...

  4. Arduino智能小车——蓝牙小车

    Arduino智能小车--蓝牙小车 Arduino智能小车系列教程时空门: Arduino智能小车--拼装篇 点击跳转 Arduino智能小车--测试篇 点击跳转 Arduino智能小车--调速篇 点 ...

  5. 【DIY】Arduino智能循迹避障小车

    文章目录 1.功能说明 2.硬件组成 3.软件安装 4.功能调试 小车展示: 1.功能说明 Arduino智能循迹停障小车是自动驾驶车辆的微型化,用几个简单的电子元器件实现循迹.停障.绕障等功能. 2 ...

  6. matlab智能小车避障,Arduino智能小车系列教程4——超声波避障

    Arduino智能小车系列教程4--超声波避障 Arduino智能小车系列教程 准备材料 超声波模块HC-SR04 舵机固定架 舵机安装 超声波接线 代码测试 代码详解 int getDistance ...

  7. 简单循迹小车实验心得_智能循迹小车总结 智能循迹小车报告.doc

    智能循迹小车总结 智能循迹小车报告 西京学院 自动化1002班 概要 本寻迹小车是以万能板为车架,STC12C5A60S2单片机为控制核心,将各传 感器的信号传至单片机分析处理,从而控制 L293D电 ...

  8. 51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随)

    **51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随+遥控+TFT液晶显示屏) 本人由于使用的液晶显示屏,程序大于8K,所以更换为STC12C5A60S2芯片,与51芯片兼容. 功能比较多 ...

  9. 51单片机之智能小车(避障、跟随、循迹)

    目录 基本概述 硬件组成 功能 关键字 模块介绍 电机模块L9110S 循迹模块(TCRT5000传感器) 红外避障模块 测速模块 小车 移动小车(控制电机转动,使小车前进.后退.左转.右转 ) 遥控 ...

最新文章

  1. Go 学习笔记(50)— Go 标准库之 net/url(查询转义、查询参数增/删/改/查、解析URL)
  2. WordPress数据库优化技巧
  3. 12306架构到底是不是国内最牛逼的架构
  4. Android实现炫酷的星空变幻效果
  5. VB中超长OLE数据库字段的操纵方法
  6. Android组件化专题-路由动态注入跳转参数以及获取其他模块的fragment
  7. kde菜单图标显示不全_大小仅 1M!在电脑菜单栏上自定义日历,规划时间更方便...
  8. Linux 命令之 nslookup 命令-查询域名 DNS 信息的工具
  9. array_combine()
  10. java-appium-527进阶-1 UiAutomator12区别和封装
  11. OkHttp和Volley对比
  12. symfony3 使用命令行工具生成Entity实体所踩的坑
  13. 1.GNUradio 的环境搭建
  14. 操作系统 第二部分 进程管理(二)
  15. UVA12545_Bits Equalizer
  16. MVG推出微型紧凑天线测量系统CR-M8
  17. 移动磁盘拒绝访问要如何办啊
  18. C1. Skyscrapers (从easy到hard)
  19. Learning and Meta-Learning of Stochastic Advection-Diffusion-Reaction Systems from Sparse Measuremen
  20. Linux系统中 chown和chmod 命令的区别:

热门文章

  1. android 人生日历,人生日历Android版 功能初体验
  2. Go语言if条件判断
  3. 移动开发中一些bug及解决方案
  4. 日期 计算器(代码打开)
  5. 计算机表格边框,高会《职称计算机》Word 2007:设置表格边框和底纹
  6. LeetCode每日一题——952. 按公因数计算最大组件大小
  7. 快排为什么一定要从右边开始?
  8. 【电力系统分析】同步发电机
  9. Py打包应用程序(zipapp打包.pyz文件、pyinstaller打包exe文件)
  10. 计算机之父冯·诺依曼