三路红外arduino循迹小车(两驱-----黑线循迹)

2023-10-29

原理:红外传感器检测到黑线,红外光被吸收,其对于的led将不亮。反之无黑线,红外光被反射接收,点亮led。

源代码是我借鉴他人加以修改的,代码也很简单,缺点就是跑不快,一旦快了容易冲出巡线轨迹。

#define STOP 0
#define FORWARD 1
#define BACKWARD 2
#define TURNLEFT 3
#define TURNRIGHT 4

const int L298pin1 = 5; // 控制左右两个电机
const int L298pin2 = 6;
const int L298pin3 = 9;
const int L298pin4 = 10;

const int ENA = 3;//控制PWM
const int ENB = 11;

const int sensor1 = 4;//四路传感器
const int sensor2 = 7;
const int sensor3 = 8;

//
int sl;
int sm;
int sr;


void setup() 
{ 
    Serial.begin(9600); 
    pinMode(L298pin1,OUTPUT);
    pinMode(L298pin2,OUTPUT);
    pinMode(L298pin3,OUTPUT);
    pinMode(L298pin4,OUTPUT);
    
    pinMode(ENA,OUTPUT);
    pinMode(ENB,OUTPUT);
    
    pinMode(sensor1,INPUT);
    pinMode(sensor2,INPUT);
    pinMode(sensor3,INPUT);
   
} 

void loop()
{
  tracing();
  //motorRun(FORWARD,40);    
}
void motorRun(int cmd,int value)//定义函,两个形。cmd控制方,value是速度值
{
analogWrite(ENA, value); //设置PWM输出,即设置速度
analogWrite(ENB, value);
switch(cmd){
case FORWARD:
  digitalWrite(L298pin1,HIGH);
  digitalWrite(L298pin2,LOW);
  digitalWrite(L298pin3,HIGH);
  digitalWrite(L298pin4,LOW);
break;
case BACKWARD:
  digitalWrite(L298pin1,LOW);
  digitalWrite(L298pin2,HIGH);
  digitalWrite(L298pin3,LOW);
  digitalWrite(L298pin4,HIGH);
break;
case TURNLEFT:
  digitalWrite(L298pin1,LOW);
  digitalWrite(L298pin2,HIGH);
  digitalWrite(L298pin3,HIGH);
  digitalWrite(L298pin4,LOW);
break;
case TURNRIGHT:
  digitalWrite(L298pin1,HIGH);
  digitalWrite(L298pin2,LOW);
  digitalWrite(L298pin3,LOW);
  digitalWrite(L298pin4,HIGH);
break;
default:
  digitalWrite(L298pin1,LOW);
  digitalWrite(L298pin2,LOW);
  digitalWrite(L298pin3,LOW);
  digitalWrite(L298pin4,LOW);
}
}

void tracing()
{

    sl = digitalRead(sensor1);//读取传感器值,黑线不亮,值为1。
    sm = digitalRead(sensor2);//
    sr = digitalRead(sensor3);


    if(sl==0 && sr==0 && sm==1) //左右无,直行
    {
      motorRun(FORWARD,60);
      Serial.println("F1");
    }
    else if(sl==0 && sr==1 && sm==1) //左无,中右间有
    {
      motorRun(FORWARD,60);
      Serial.println("F2");
    }
    else if(sl==1 && sr==0 && sm==1) //右无,中左间有
    {
      motorRun(FORWARD,60);
      Serial.println("F3");
    }

    else if(sl==0 && sr==1 &&sm==0) //右边检测到黑线,右转
    {
      motorRun(TURNRIGHT,80);
      Serial.println("R");
        
    }

    else if(sl==1 && sr==0 && sm==0) //左边检测到黑线,左转
    {
      motorRun(TURNLEFT,80);
      Serial.println("L");
    
    }
    else if(sl==0 && sr==0 && sm==0) //没有检测到,直行
    {
      motorRun(FORWARD,50);
      Serial.println("f1");  
    }
    else if(sl==1 && sr==1 && sm==1) //都检测到,直行
    {
      motorRun(FORWARD,50);
      Serial.println("f2");  
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三路红外arduino循迹小车(两驱-----黑线循迹) 的相关文章

  • 即使我没有#include ,为什么仍然可以使用 std::max 和 std::min ?

    include
  • 将数据集导出到 EXCEL

    我使用以下代码将数据库表中的字段导出到 Excel 中 我想要做的是能够编写一条 SQL 语句从多个表中检索字段并将其导出到 Excel 中 这段代码只允许我导出一张表 另外 如何显示保存提示对话框 示例代码将不胜感激 非常感谢 prote
  • VBA 中的 VSTO:AddIn.Object 有时不返回任何内容 (null)

    Given VSTO 插件 An override object RequestComAddInAutomationService 它返回一个名为的类的实例Facade在我的场景中 Excel 2007 中的 VBA 宏可访问AddIn O
  • Reflection.Emit 中的短格式操作码错误

    我正在制作一种与以下非常相似的小语言hlsl但仅支持像素着色器 该语言使用reflection emit构建实现相同功能的 NET 程序集 我目前正在测试分支指令的实现if在我的一个单元测试中 一个大的if与内if elses 失败并显示以
  • 在 C 程序中追踪数组越界访问/写入的推荐方法

    考虑用 C 语言编写一些不太明显的算法的实现 例如 让它成为递归快速排序 我在 K N King 的 C 编程 现代方法 第二版 书中找到了它 可以从here http knking com books c2 programs qsort
  • 使用 C 创建立体声正弦波

    我正在尝试用 C 创建立体声正弦 WAV 并且可能有不同的 可能是空白的 左声道和右声道 使用此函数为每个通道生成一个音调 int16 t create tone float frequency float amplitude float
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序
  • Boost async_write问题

    我将展示一些代码 void wh const boost system error code ec std size t bytes transferred std cout lt lt test int main int argc cha
  • 使用 cryptoapi CryptImportKey 导入公钥时出错

    我想将公钥 blob 导入到 CSP 但发生了错误 BYTE pbData 0xEB 0x2A 0x38 0x56 0x86 0x61 0x88 0x7F 0xA1 0x80 0xBD 0xDB 0x5C 0xAB 0xD5 0xF2 0x
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Xamarin.Mac 中执行终端命令并读入其输出

    我们正在编写一个 Xamarin Mac 应用程序 我们需要执行像 uptime 这样的命令 并将其输出读取到应用程序中进行解析 这可以做到吗 在 Swift 和 Objective C 中都有 NTask 但我似乎无法在 C 中找到任何示
  • 如何带参数调用外部程序?

    我想在我的代码中调用一个 Windows 程序 并使用代码本身确定的参数 我不想调用外部函数或方法 而是调用 WinXP 环境中的实际 exe 或批处理 脚本文件 C 或 C 将是首选语言 但如果使用任何其他语言更容易完成此操作 请告诉我
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • 什么是多重重继承?

    我将以下称为 多重重新继承 直接继承一个类一次 并通过继承其一个或多个后代来间接继承一次或多次 通过继承一个类的两个或多个后代来间接继承一个类两次或多次 我想知道它是否存在以及如何明确访问嵌入的子对象 1 Professional C 2n
  • 组合框由于某种原因被链接

    我有以下代码来填充 3 个组合框 private void PopulateDDLs SqlConnection connection SqlCommand command SqlDataReader reader DataTable dt
  • 当另一个进程使用 std::fstream 写入文件时从文件读取[重复]

    这个问题在这里已经有答案了 我需要从文件中逐行读取 它是由 std getline 完成的 另一个进程的问题是一直向其附加数据 然后我需要读取新行 例如 文件一开始包含10行 我的程序读取了10行 那么我的程序应该等待 过了一会儿 另一个进
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He
  • 如何在Asp.Net Core中自定义开发者异常页面?

    这常见于ConfigureStartup cs 文件的方法具有如下所示的代码 if env IsDevelopment app UseDeveloperExceptionPage new DeveloperExceptionPageOpti
  • 你将如何开始自动化我的工作? - 第2部分

    后续这个问题 https stackoverflow com questions 2796128 how would you start automating my job 在经历了第一波进货 9 小时的复制 粘贴 后 我现在相信我已经满足
  • C++20 范围太多 |运营商?

    我在这段代码中使用 g 10 2 有谁知道为什么我最后收到编译器错误std views reverse on results3 include

随机推荐

  • 三极管使用详解

    扣扣技术交流群 460189483 PNP型的三极管使用方法 常见的三极管为9012 s8550 9013 s8050 单片机应用电路中三极管主要的作用就是开关作用 其中9012与8550为pnp型三极管 可以通用 其中9013与8050为
  • Ubuntu需要运行networkmanager的解决方法

    问题 在使用ubuntu时无法联网 打开网络设置发现如下情况 解决方法 打开终端 输入su 获取管理员权限 然后输入systemctl start NetworkManager service 完成后即可正常联网了 新问题 每次开机后都需要
  • 元器选型攻略之 电感

    电子元器件领域电阻 电容 电感被称为 三剑客 其中电感又被称为 渣男 什么是电感 提到电感 离不开电感线圈这个名词 即用绝缘导线绕制而成的电磁感应元件 要理解电感 首先了解几个名词 感生 变化 改变 让我们回到高中课本 1 当一个导体相对磁
  • 论文笔记:Deep Representation Learning for Trajectory Similarity Computation

    ICDE 2018 1 intro 1 1 背景 用于计算轨迹相似性的成对点匹配方法 DTW LCSS EDR ERP 的问题 轨迹的采样率不均匀 如果两个轨迹表示相同的基本路径 但是以不同的采样率生成 那么这些方法很难将它们识别为相似的轨
  • Qt 之 QSS(样式表语法)

    简述 Qt样式表 以下统称QSS 的术语和语法规则几乎和CSS相同 如果你熟悉CSS 可以快速浏览以下内容 样式规则 QSS包含了一个样式规则序列 一个样式规则由一个选择器和声明组成 选择器指定哪些部件由规则影响 声明指定哪些属性应该在部件
  • 以XML形式访问远程接口获得数据

    JDK提供了供我们访问url获得数据的类 核心类主要是URL URLConnection等 详见JDK API 下面以XML形式实现两者通信 Servlet端发送信息 Java代码 protected void doGet HttpServ
  • Unity3D官方教程——Survival Shooter学习记录

    unity 官方教程Survival Shooter 学习笔记 1 准备工作 新建项目并导入官方商店的Survival Shooter资源 在Assets下新建文件夹 Scence并在新文件夹内保存当前新场景命名为Main 2 背景和背景音
  • allegro设置禁止铺铜区的方法

    allegro设置禁止铺铜区的方法 Cadence Allegro 16 6 关于shape分割的一种方法 Allegro 铺铜设置 使用Shape Keepout设置禁止铺铜区 操作方法是Setup Areas Shape Keepout
  • 数据可视化python,绘制饼图,代码和解析

    饼图样式 使用matplotlib pyplot pie绘制 代码描述 import matplotlib pyplot as plt import pandas as pd 定义饼状图的标签 标签是列表 timeData pd read
  • Leetcode刷题(14. 最长公共前缀)

    Leetcode刷题 14 最长公共前缀 一 题目 二 代码 C 三 提交记录 四 备注 一 题目 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出
  • 延长线段ab到c的画法有几种_垂直与平行的画法

    点击蓝字关注我们 垂直与平行的画法 现在中考对作图要求越来越高 作图是对我们应用数学基本定理 性质以及动手能力的一种考察 问题的关键在于学生平时忽视了定理 性质的重要性 甚至初三念完了书还是新的 通过作图 对定理和性质进行理解记忆 问题1
  • 使用Python爬取不同类别的豆瓣电影简介

    使用Python爬取不同类别的豆瓣电影简介 之前做过一点文本分类的工作 从豆瓣上爬取了不同类别的数千条电影的简介 爬取目标 我们爬取的目标是 豆瓣影视 打开豆瓣网 随便点击一部电影 即可看到电影的介绍 评论等信息 我们需要爬取的是电影的简介
  • sed与awk读书笔记[sed篇]

    简介 个人基础及笔记重点 sed基础 常用参数包括 寻址包括 常用命令包括 标志flags 正则表达式 sed高级这一章要详细讲解要不迷惑性太大举例 N命令 D命令 跳转命令aba 跳转命令ata hHgGx利用保持空间的命令 熟悉例子 最
  • Idea工具的使用

    文章目录 一 IDEA的使用 二 IDEA工具的快捷键以及一些简单的设置 1 字体设置 2 快速生成main方法 psvm 3 快速生成System out println sout 4 注意 IEDA是自动保存 不需要ctrl s 5 删
  • Python+Opencv 提取图片中某种颜色组成的图形

    主要目标识别图中红色的裂缝 尝试了几种不同的方法 最后发现比较每一点的RGB差值可以很好的解决这个问题 也就是提取图片中的红色相关信息 处理结果如下 实现的代码如下 注意opencv读入的图片通道顺序是bgr import cv2 impo
  • AWG线规对照表

    AWG American Wire Gauge 是美国电线标准的简称 AWG值是导线直径 以英寸计 的单位 其中 4 0表示0000 3 0表示000 2 0表示00 1 0表示0 例如 常用的电话线直径为26AWG 约为0 4mm 下表是
  • 停更一次博客

    明天微机原理复习 下周补两次博客
  • scala 的模式匹配与类型系统

    主要内容 1 scala模式匹配 2 scala类型系统 scala模式匹配 scala中的模式匹配与java中的switch case很类似 但是不同的是java中switch case只能匹配值 而scala模式匹配更强大 还可以对类型
  • execjs._exceptions.ProcessExitedWithNonZeroStatus

    报错如下图 提示我292的换行符有问题 刚开始我以为是我服务器的nodejs环境没有配好 就忽略了换行错误 后面发现nodejs已经配置好了 才转过来正视这个问题 在gitlab的textview里发现了端倪 在pycharm里面根本发现不
  • 三路红外arduino循迹小车(两驱-----黑线循迹)

    原理 红外传感器检测到黑线 红外光被吸收 其对于的led将不亮 反之无黑线 红外光被反射接收 点亮led 源代码是我借鉴他人加以修改的 代码也很简单 缺点就是跑不快 一旦快了容易冲出巡线轨迹 define STOP 0 define FOR