基于Arduino的巡线小车

简介: 巡线小车

本文是基于Ardino的两轮循迹小车源码。

由于学校的要求于是进行了相应的小车开发,由于结构过于简单,在此就不再赘述,直接附上当时比赛的源代码。

intLeft_motor_go=8;     //左电机前进(IN1)intLeft_motor_back=9;     //左电机后退(IN2)intRight_motor_go=10;    // 右电机前进(IN3)intRight_motor_back=11;    // 右电机后退(IN4)constintSensorRight1=6;     //右循迹红外传感器(P3.2 OUT1)constintSensorRight2=3;    //右循迹红外传感器constintSensorLeft1=4;       //左循迹红外传感器(P3.3 OUT2)constintSensorLeft2=5;       //左循迹红外传感器(P3.3 OUT2)intSL1;    //左循迹红外传感器状态 intSL2;    //左循迹红外传感器状态intSR1;    //右循迹红外传感器状态intSR2;    //右循迹红外传感器状态voidsetup()
{
//初始化电机驱动IO为输出方式pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)//  pinMode(key,INPUT);//定义按键接口为输入接口// pinMode(beep,OUTPUT);pinMode(SensorRight1, INPUT); //定义右循迹红外传感器为输入pinMode(SensorRight2, INPUT);
pinMode(SensorLeft1, INPUT); //定义左循迹红外传感器为输入pinMode(SensorLeft2, INPUT);
}
//=======================智能小车的基本动作=========================voidruns()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);     
analogWrite(Right_motor_go,100);//PWM比例0~255调速,左右轮差异略增减analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,LOW);  // 左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减analogWrite(Left_motor_back,100);
//delay(time * 100);   //执行时间,可以调整  }
voidrun()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);     
analogWrite(Right_motor_go,100);//PWM比例0~255调速,左右轮差异略增减analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,LOW);  // 左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减analogWrite(Left_motor_back,100);
//delay(time * 100);   //执行时间,可以调整  }
//void left(int time)         //左转(左轮不动,右轮前进)voidspin_left()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,90); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,HIGH);   //左轮后退digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go,75); 
analogWrite(Left_motor_back,0);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidspin_lefts()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,140.3); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,HIGH);   //左轮后退digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,140);//PWM比例0~255调速///delay(time * 100);  //执行时间,可以调整  }
//void right(int time)        //右转(右轮不动,左轮前进)voidspin_right()
{
digitalWrite(Right_motor_go,LOW);   //右电机后退digitalWrite(Right_motor_back,HIGH);
analogWrite(Right_motor_go,0); 
analogWrite(Right_motor_back,75);//PWM比例0~255调速digitalWrite(Left_motor_go,LOW);//左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,90);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidspin_rights()
{
digitalWrite(Right_motor_go,LOW);   //右电机后退digitalWrite(Right_motor_back,HIGH);
analogWrite(Right_motor_go,140); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,LOW);//左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,140.3);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidloop()
{ 
// keysacn();//调用按键扫描函数  while(1)
  {
//有信号为LOW  没有信号为HIGH   检测到黑线  输出高  检测到白色区域输出低SR1=digitalRead(SensorRight1);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭SR2=digitalRead(SensorRight2);
SL1=digitalRead(SensorLeft1);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭SL2=digitalRead(SensorLeft2);
if (SL1==LOW&&SL2==LOW&&SR1==LOW&&SR2==LOWorSL2==HIGH&&SL1==HIGH&&SR2==HIGH&&SR1==LOWorSL2==LOW&&SL1==HIGH&&SR2==HIGH&&SR1==HIGHorSL2==LOW&&SL1==HIGH&&SR2==HIGH&&SR1==LOW   )
run();   //调用前进函数elseif (SR1==LOW&&SL2==LOW&&SL1==HIGH&&SR2==LOW)
spin_right();
elseif (SL1==LOW&&SR2==LOW&&SL2==HIGH&&SR1==LOW)
spin_rights();
elseif (SL1==HIGH&&SL2==HIGH&&SR1==LOW&&SR2==LOW)
spin_rights();
elseif (SL1==LOW&&SR1==HIGH&&SR2==LOW&&SL2==LOW) 
spin_lefts();
elseif (SR1==LOW&&SR2==HIGH&&SL2==LOW&&SL1==LOW)
spin_left();
elseif (SL1==LOW&&SL2==LOW&&SR1==HIGH&&SR2==HIGH)
spin_lefts();
elseif (SL1==HIGH&&SL2==HIGH&&SR1==HIGH&&SR2==HIGHorSR1==HIGH&&SR2==LOW&&SL1==HIGH&&SL2==LOWorSL1==LOW&&SL2==HIGH&&SR1==LOW&&SR2==HIGH )
runs();
  }
  }
相关文章
|
XML Java 测试技术
springboot 整合 apache camel实现企业级数据集成和处理
springboot 整合 apache camel实现企业级数据集成和处理
4403 0
springboot 整合 apache camel实现企业级数据集成和处理
|
9月前
|
人工智能 JSON 自然语言处理
Jina Reader:一键将网页内容转为适合 LLM 处理的文本格式,自动抓取和清洗网页内容,支持多种输出格式
Jina Reader 是一款由 Jina AI 推出的开源工具,能够将网页内容快速转换为适合大型语言模型(LLMs)处理的纯文本格式,支持多种输出格式和动态内容处理。
1238 20
Jina Reader:一键将网页内容转为适合 LLM 处理的文本格式,自动抓取和清洗网页内容,支持多种输出格式
|
7月前
|
前端开发 JavaScript API
HarmonyOS:ArkTS 显式动画 animateTo 自学指南
本文深入解析了 ArkTS 中的 `animateTo` 全局显式动画接口,帮助开发者掌握其使用方法。文章从接口概述、参数详解到使用注意事项,结合实际示例代码,全面展示了如何通过配置 `AnimateParam` 对象实现流畅的动画效果。内容涵盖属性动画、布局变化及组件转场等场景,并强调不同版本的支持特性。适合初学者系统学习,也供进阶开发者参考优化动画体验。希望本文能助你快速上手 `animateTo`!
408 7
|
SQL 关系型数据库 MySQL
MySQL DDL(数据定义语言)深度解析
MySQL DDL(数据定义语言)深度解析
|
11月前
|
分布式计算 DataWorks 数据处理
"DataWorks高级技巧揭秘:手把手教你如何在PyODPS节点中将模型一键写入OSS,实现数据处理的完美闭环!"
【10月更文挑战第23天】DataWorks是企业级的云数据开发管理平台,支持强大的数据处理和分析功能。通过PyODPS节点,用户可以编写Python代码执行ODPS任务。本文介绍了如何在DataWorks中训练模型并将其保存到OSS的详细步骤和示例代码,包括初始化ODPS和OSS服务、读取数据、训练模型、保存模型到OSS等关键步骤。
561 3
|
Java 开发工具 Android开发
[√]windows java 版本管理
[√]windows java 版本管理
427 0
|
存储 Prometheus Cloud Native
[prometheus]基于influxdb2实现远端存储
[prometheus]基于influxdb2实现远端存储
462 2
|
JavaScript 前端开发
Playwright执行 JavaScript 脚本:探索浏览器自动化的新境界
在Web自动化中,Playwright提供`page.evaluate()`和`page.evaluate_handle()`来执行JavaScript脚本。`page.evaluate()`返回脚本执行结果,而`page.evaluate_handle()`返回JSHandle。示例展示了如何使用它们,如打印网页标题、操作元素及获取页面内容。通过这些方法,可以处理常规方法难以操作的网页元素。
|
存储 传感器 机器学习/深度学习
Java数组全套深入探究——进阶知识阶段6、三维数组以及更多维度数组的概念和用法
Java数组全套深入探究——进阶知识阶段6、三维数组以及更多维度数组的概念和用法
273 0