一起玩儿物联网人工智能小车(ESP32)——48. 利用循迹模块实现循迹小车(三)

摘要:本文介绍循迹小车的接线方法及类的基础知识

在开发之前,还是先将循迹传感器与ESP32扩展板连接好,VCC和GND的连接在这里就不再描述了,找到合适的排针接上就可以了,主要关注一下哪个循迹传感器连接到了哪个GPIO引脚,这个涉及到了后边程序开发中的代码编写。ESP32扩展板与L298N的连接方法与之前的项目相同,具体连接如下所示:

模块

引脚

连接对象

L298N模块

IN1

ESP32的P18

IN2

ESP32的P23

IN3

ESP32的P32

IN4

ESP32的P33

OUT1、OUT2

右前轮TT电动机

OUT3、OUT4

左前轮TT电动机

+12V

电池的正极

GND

电池的负极和ESP32的GND(分别连接)

+5V

ESP32的+5V(开发时不需要连接,运行时连接)

左一循迹模块

DO输出

ESP32的P27

+5V

ESP32的+5V

GND

ESP32的GND

左二循迹模块

DO输出

ESP32的P26

+5V

ESP32的+5V

GND

ESP32的GND

右一循迹模块

DO输出

ESP32的P21

+5V

ESP32的+5V

GND

ESP32的GND

右二循迹模块

DO输出

ESP32的P4

+5V

ESP32的+5V

GND

ESP32的GND

在上面的连接表中可以看到,小车的L298N电机驱动模块的连接与之前的几个实验的连接方法完全相同,而小车在运行过程中,所左的各种行驶动作也是基本相同的,基本包括了,向前行驶,左转,右转,停止等等常规操作。看来还需要把原来的代码再拷贝过来一份了?不,这次我们变一个写法,先把与小车相关的操作封装成一个Car类,让这些相关的动作和配置信息形成一个独立的相互关联的有机整体,这样以后在使用的时候就会方便很多了,就向之前使用并且详细介绍过的Servo类和Wire类一样。

在C++中,类是指对现实世界中一切事物的抽象,有些编程语言也称之为“对象”。在编程开发中,可以将具有相似点的不同事物抽象为“类”,找到这些不同事物之间的共同点。例如生活中的自行车、摩托车和小轿车,可以将它们都定义成“类”。

类本质上是属于用户自定义的数据类型,该数据类型除了拥有一些描述自身特性的属性数据外,还具有一定的行为能力,也就是类中的方法。通常来说,一个类的定义包含两部分的内容,一是该类的属性,另一部分是它所拥有的方法。以前边提到的自行车为例,长度、高度、重量等等,可以称之为自行车的属性。而响铃、车轮转动则可以称之为自行车的一种行为,可以抽象为类中的方法。

前边提到的自行车、摩托车和小轿车都是一种交通工具,因此可以将交通工具定义为“基类”,而自行车、摩托车和小轿车都是基于交通工具的子类,或者说是一种特殊的交通工具。它们除了具备交通工具的基础特征之外,还有一些个性化的属性或者行为。这就是类之间的继承关系。

好了,关于类的基本知识就介绍到这里了,下面来了解一下类的基本定义。

在C++中,使用关键字class来定义类,其基本的形式如下:

class 类名

{

    public:

         //公共的行为或属性

    protected:

         //受保护的行为或属性

    private:

         //私有的行为或属性

};

类名:必须要遵循一般的命名规则。这与之前介绍的函数和变量的命名规则基本一致。

public:共有的。用来定义公开的属性和方法。不管是类的内部,还是类实例的拥有者,都可以访问。通常情况下,属性都不定义成public类型,外界必须通过给定的方法来修改或者得到相应的属性值。相比于外部直接访问属性,通过方法来操作属性有以下几个好处:

  1. 可以在方法中加入安全验证机制,避免谁都能访问或者谁都能修改。
  2. 可以在方法中加入合法性验证机制,避免使用者有意或者无意将其变为非法数据,而影响功能的实现。
  3. 有些属性的值是与自身状态相关的,使用方法来获取属性的值,可以进行相应的状态检查,避免获得无效的属性值。

protected:受保护的。这里面定义的属性或者方法,只能在类内部或者子类的方法中调用或者访问。其他的类是无法直接访问受保护的方法或者属性的。

private:私有的。用来定义私有的属性和方法。定义为私有的属性和方法,不能被外界所调用或者访问,只有类内部的方法才能调用和访问。

下面再来介绍一下一类特殊的方法——构造函数。构造函数的作用是在创建类的对象实例时进行类的初始化。

在C++中,每个类都有且必须有构造函数。如果开发者没有自行编写构造函数,则C++会自动提供一个无参数的构造函数,称为默认构造函数。这个默认构造函数不做任何初始化工作。一旦用户编写了构造函数,则这个无参数的默认构造函数就消失了。如果用户还希望能有一个无参数的构造函数,就必须自行编写。构造函数的特征是其名字必须与类名保持一致,并且不需要定义返回值。因为调用这个方法后返回的是这个类的实例,这是不能改变的。

下一篇将具体介绍Car类的定义和实现的方法。

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起玩儿科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值