Arudio项目实战——003 TracKingTheCar(循迹小车)

2023-11-17

Arudio项目实战——003 TracKingTheCar(循迹小车)

Cblock源码

在这里插入图片描述

Cblock转Arduino源代码

#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

#include <MeMCore.h>

MeDCMotor motor_9(9);
MeDCMotor motor_10(10);		

void move(int direction, int speed)
{
      int leftSpeed = 0;
      int rightSpeed = 0;
      if(direction == 1){
        	leftSpeed = speed;
        	rightSpeed = speed;
      }else if(direction == 2){
        	leftSpeed = -speed;
        	rightSpeed = -speed;
      }else if(direction == 3){
        	leftSpeed = -speed;
        	rightSpeed = speed;
      }else if(direction == 4){
        	leftSpeed = speed;
        	rightSpeed = -speed;
      }
      motor_9.run((9)==M1?-(leftSpeed):(leftSpeed));
      motor_10.run((10)==M1?-(rightSpeed):(rightSpeed));
}
				
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
double speed;
double temp;
MeLineFollower linefollower_2(2);



void setup(){
    pinMode(A7,INPUT);
    while(!((0^(analogRead(A7)>10?0:1))))
    {
        _loop();
    }
    speed = 90;
    
}

void loop(){
    
    temp = linefollower_2.readSensors();
    if(((temp)==(0))){
        move(2,speed);
    }else{
        if(((temp)==(1))){
            move(4,speed);
        }else{
            if(((temp)==(2))){
                move(3,speed);
            }else{
                move(1,speed);
            }
        }
    }
    
    _loop();
}

void _delay(float seconds){
    long endTime = millis() + seconds * 1000;
    while(millis() < endTime)_loop();
}

void _loop(){
    
}

代码解释

这段代码是使用 Me-motor 线跟踪模块来控制电机的代码。

#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MeMCore.h>

这几行是包含了常用库的头文件,Arduino.h 为核心库,Wire.h 和 SoftwareSerial.h 为通信库,MeMCore.h 是 Me-motor 模块的库。

MeDCMotor motor_9(9);
MeDCMotor motor_10(10);

这两行代码定义了 MeDCMotor 类对象 motor_9 和 motor_10 ,分别代表编号为 9 和 10 的直流电机

void move(int direction, int speed)
{
      int leftSpeed = 0;
      int rightSpeed = 0;
      if(direction == 1){
        	leftSpeed = speed;
        	rightSpeed = speed;
      }else if(direction == 2){
        	leftSpeed = -speed;
        	rightSpeed = -speed;
      }else if(direction == 3){
        	leftSpeed = -speed;
        	rightSpeed = speed;
      }else if(direction == 4){
        	leftSpeed = speed;
        	rightSpeed = -speed;
      }
      motor_9.run((9)==M1?-(leftSpeed):(leftSpeed));
      motor_10.run((10)==M1?-(rightSpeed):(rightSpeed));
}

这段代码是定义了一个函数 move() ,用来控制两个电机的运动。参数 direction 是移动方向,取值为 1 2 3 4,分别表示前进,后退,左转,右转。参数 speed 是运动速度,取值范围是 -255 ~ 255。

double speed;
double temp;
MeLineFollower linefollower_2(2);

这三行代码定义了 speed 、 temp 变量和线跟踪模块对象 linefollower_2

pinMode(A7,INPUT);
while(!((0^(analogRead(A7)>10?0:1))))
{
    _loop();
}
speed = 90;

这段代码是在setup函数里的,其中 pinMode(A7, INPUT) 用来设置 A7 口为输入模式,while(!((0^(analogRead(A7)>10?0:1)))) 循环判断A7口读取到的电压值是否大于10,如果是则继续循环,如果不是退出循环。 然后通过设置speed变量来设置电机的运动速度。

temp = linefollower_2.readSensors();
if(((temp)==(0))){
  move(2,speed);
}else{
    if(((temp)==(1))){
        move(4,speed);
    }else{
        if(((temp)==(2))){
            move(3,speed);
        }else{
            move(1,speed);
        }
    }
}

loop函数里的这段代码是线跟踪模块的核心代码,通过linefollower_2.readSensors()来读取线跟踪模块的状态。根据读取到的状态调用move函数来控制电机的移动方向和速度。

  • 如果读取到的状态为0,就调用move(2, speed)来使电机向后运动。
  • 如果读取到的状态为1,就调用move(4,speed)来使电机向左运动。
  • 如果读取到的状态为2,就调用move(3, speed)来使电机向右运动。
  • 如果读取到的状态为其他,就调用move(1, speed)来使电机向前运动。
    最后调用 _loop() 函数在循环中做一些其他事情。

代码优化

#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

#include <MeMCore.h>

MeDCMotor motor_9(9);
MeDCMotor motor_10(10);    

void move(int direction, int speed)
{
      int leftSpeed = 0;
      int rightSpeed = 0;
      if(direction == 1){
          leftSpeed = speed;
          rightSpeed = speed;
      }else if(direction == 2){
          leftSpeed = -speed;
          rightSpeed = -speed;
      }else if(direction == 3){
          leftSpeed = -speed;
          rightSpeed = speed;
      }else if(direction == 4){
          leftSpeed = speed;
          rightSpeed = -speed;
      }
      motor_9.run((9)==M1?-(leftSpeed):(leftSpeed));
      motor_10.run((10)==M1?-(rightSpeed):(rightSpeed));
}
        
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
double speed;
double temp;
MeLineFollower linefollower_2(2);



void setup(){
    pinMode(A7,INPUT);
    while(!((0^(analogRead(A7)>10?0:1))));
    speed = 90;
    
}

void loop(){
    
    temp = linefollower_2.readSensors();
    if(((temp)==(0))){
        move(2,speed);
    }else{
        if(((temp)==(1))){
            move(4,speed);
        }else{
            if(((temp)==(2))){
                move(3,speed);
            }else{
                move(1,speed);
            }
        }
    }
   
}


优化解释

首先,通过引用库文件来包含必要的驱动,这些库文件将为接下来的代码提供支持。具体地,代码中包含了Arduino.h,Wire.h,SoftwareSerial.h和MeMCore.h这四个库文件。

#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MeMCore.h>

定义两个电机的编号分别为9和10,通过MeDCMotor这个类定义这两个电机对象。

MeDCMotor motor_9(9);
MeDCMotor motor_10(10);    

定义一个函数,move() 函数用来控制电机的运动。

void move(int direction, int speed)
{
      int leftSpeed = 0;
      int rightSpeed = 0;
      if(direction == 1){
          leftSpeed = speed;
          rightSpeed = speed;
      }else if(direction == 2){
          leftSpeed = -speed;
          rightSpeed = -speed;
      }else if(direction == 3){
          leftSpeed = -speed;
          rightSpeed = speed;
      }else if(direction == 4){
          leftSpeed = speed;
          rightSpeed = -speed;
      }
      motor_9.run((9)==M1?-(leftSpeed):(leftSpeed));
      motor_10.run((10)==M1?-(rightSpeed):(rightSpeed));
}

其中 direction 是一个参数,用来指示电机移动的方向,speed 是另一个参数,用来指示电机移动的速度。

设置线缘传感器编号为2,用来读取传感器值,MeLineFollower是线缘传感器类

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

Arudio项目实战——003 TracKingTheCar(循迹小车) 的相关文章

随机推荐

  • Thread.Sleep(0)的妙用

    https www cnblogs com JianGuoWan p 9139698 html Thread Sleep 0 表示挂起0毫秒 你可能觉得没作用 你要写Thread Sleep 1000 就有感觉了 似乎毫无意义 MSDN的说
  • VS2010配色方案

    找了很久的配色方案 绝对是精挑细选的 现在分享一下地址 http www hanselman com blog VisualStudioProgrammerThemesGallery aspx 个人喜欢的配色方案 Ragnarok 附图 忘
  • 添加数据设置某个列自增_流量物联卡这样设置,网速立马变快

    物联卡是什么 简单而言 物联卡跟手机卡的区别就是 不能打电话和发短信 物联卡有自己的流量池 共享流量 比如下图就是某个物联卡的套餐 移动APN设置 移动设置APN 安卓手机需要把设备的接入点改成CMIOT 具体步骤如下 A 找到设置移动网络
  • 本地主机连接阿里云数据库(自建数据库)排雷

    最近在阿里云上开了一台云主机 自己搭建了数据库作为数据库使用 正当我本地去连接云上mysql时 发现死活连接不上 我这边阿里云上安全组端口已经放开了 出方向和入方向都开了歪 但是依然连接不上 是不是数据库做了限制 此时的我恍然大悟 欻欻欻欻
  • 叉积的意义

    我们知道 向量的叉积可以帮助我们求出一个和已知两个向量构成的平面相互垂直的另一个向量 例如求法向量 而且一般来说 都是求三维空间的向量的叉积 下面我们要讨论的就是各种 为什么如此 考虑两个相互不平行的三维向量 它们的叉积 以行列式形式来表示
  • 用VRTK4.0如何实现与UI交互(保姆级别教程)

    1 导入Tilia UnityUI master包 点击下面的链接直接跳到这个界面studentutu Tilia UnityUI Tilia package for VRTK 4 featuring support for Unity U
  • Your python install is corrupted. Please fix the '/usr/bin/python' symlink.

    执行如下命令就ok了 sudo ln sf usr bin python2 7 usr bin python 如果还是不行 reinstall sudo apt get install reinstall python 参考地址 https
  • ‘open3d.open3d.geometry.PointCloud‘ object has no attribute ‘voxel_down_sample‘

    scene cloud open3d geometry PointCloud scene cloud points open3d utility Vector3dVector scene points scene cloud scene c
  • 第四讲 系统建模方法

    系统建模一般流程 实际系统的分析方法大致类似 但对于实际系统的模型实现方式则有多种 1 面向方程 图框 的因果建模 基于图框进行系统模型实现 的软件很多 如Simulink AMESim 应用于控制领域 等 2 面向对象 非因果 的物理建模
  • Ztree和eazyUi-tree的区别

    l 在页面中引入ztree相关的文件 1 1 使用简单json数据构造ztree 重点
  • 常用端口

    端口号码 层 名称 注释 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime
  • 使用father打包发布前端工具库

    father库说明 GitHub https github com umijs father 升级迁移 教程使用father v1 版本较老 可参考下面的教程升级 father 4升级教程 安装 yarn add father 项目配置 0
  • WebStorm、Idea编辑器中右侧的SVN下拉,提交标志不见了呢?--已解决

    新打开的窗口 没有SVN的下拉标志如何把他弄出来呢 首先你得安装了小乌龟软件 然后来到编辑器中 选择 1 VCS Enable Version Control Integretion 2 选择Subversion 点击OK ok 完成
  • logback打印日志不显示具体的信息,显示问号

    目录 表象 原因 日志打印的Appender是使用的ch qos logback classic AsyncAppender 正确配置 表象 配置
  • java21天打卡Day13-正则表达式

    原来正则表达式是这样用的
  • 前端实现文件在线预览

    需求 一个览pdf word xls ppt等文件需要在线预览功能 介绍 使用 XDOC文档预览云服务文档地址 基于HTTP的REST方式调用 只需要传入URL 支持pdf docx xlsx pptx rtf jpg png mp4等多种
  • DINO-DETR论文学习记录

    摘要 我们介绍了DINO 带有改进的去噪器box的DETR 一种最先进的端到端对象检测器 DINO 通过使用对比方式进行去噪训练 混合查询选择方法进行锚点初始化以及用于框预测的ook forward twice方案 在性能和效率方面比以前的
  • 使用WIFI模块AT指令进行HTTP交互

    超文本传输协议 HTTP HyperText Transfer Protocol 是互联网上应用最为广泛的一种网络协议 所有的WWW文件都必须遵守这个标准 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法 用户通过M0M1系
  • linux cd命令怎么用

    在Linux中 cd命令是用来改变当前工作目录的 具体使用方法如下 打开终端 输入cd命令 后面跟上要进入的目录的路径 例如 如果要进入home目录 可以输入cd home 按下回车键即可进入指定目录 如果要返回上一级目录 可以使用 cd
  • Arudio项目实战——003 TracKingTheCar(循迹小车)

    Arudio项目实战 003 TracKingTheCar 循迹小车 Cblock源码 Cblock转Arduino源代码 include