arduino|超声波测距仪实验(Arduino边做边学:从点亮Led到物联网)( 二 )



小知识:
声音的传播需要物质 , 物理学中把这样的物质叫做介质 。
声音在不同的介质中的传播速度:
真空 0m/s(也就是不能传播)
空气(15℃) 340m/s
空气(25℃) 346m/s
软木 500m/s
煤油(25℃) 1324m/s
蒸馏水(25℃) 1497m/s
海水(25℃) 1531m/s
铜(棒) 3750m/s
大理石 3810m/s
铝(棒) 5000m/s
铁(棒) 5200m/s
声音在不同的物质中的传播速度不同 。
2.3.2 共阴四位数码管
数码管是一种半导体发光器件 , 数码管可分为七段数码管和八段数码管 , 区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimal point) , 其基本单元是发光二极管 。
共阴四位数码管是一种数字显示屏 , 由4个八段数码管组成 , 能够显示4个数字 , 支持显示小数点和时间格式 。

数码管是一种半导体发光器件 , 其基本单元是发光二极管 。 因此也需要串联电阻 , 以防电流过大 。


2.3.2.1 引脚说明
如下图所示:abcdefgh 为数码管LED引脚 , 每个数字由7条线(LED)组成 , 用a-g控制 , h控制小数点;同时通过1-4引脚控制当前设置的四个数字中的哪一个 。


3 电路设计3.1 电路图

根据我们的项目需求 , 设计电路图如下:


3.2 电路原理
由于四位数码管基本上用掉了所有数字口 , 除了0、1之外 , 由于0、1这两个引脚是UNO连接电脑的串口 , 为了方便通过串口打印调试信息 , 一般尽量少占用 , 所以超声波测距模块在这里使用了模拟口A4和A5 。


知识点:
Arduino UNO电路板的数字口有13个 , 但有的项目我们可能需要更多的数字口 , 当我们数字端口不够用时 , 该怎么办呢?当然 , 您可以购买性能更为强大的Arduino电路板 , 如MEGA 2560 , 但有没有其它办法呢?
其实Arduino电路板的模拟输入口可以很方便的当数字口用 , 以UNO为例 , 对应的GPIO:A0=14、A1=15、A2=16......以此类推 , 使用方法和使用数字端口一样 。
4 程序设计4.2 主程序设计

/* *名称:超声波测距仪 *功能: *作者:YXK *时间:2018.6.5 */ const int trigPin = 18; //定义超声波测距模块trig引脚 A4const int echoPin = 19; //定义超声波测距echo引脚 A5const int led[8
 = {23456789;  //定义数码管的LED引脚const int com[4
 = {13121110;      //定义数码管的数字位引脚float checkDistance(int trig int echo); //超声波测距函数int firstBitsecondBitthirdBitfourthBit; //定义四位数码管每位要显示的值 , 依次是第1、2、3、4位float distFloat; //声明一个浮点型距离变量int distInt;     //声明一个整形距离变量int eyeDelay=500;   //视觉延迟时间 , 单位微秒//数码管0-F .码值表unsigned char num[17
[8
 ={ //a  b  c  d  e  f  g  h   {1 1 1 1 1 1 0 0     //0  {0 1 1 0 0 0 0 0     //1  {1 1 0 1 1 0 1 0     //2  {1 1 1 1 0 0 1 0     //3  {0 1 1 0 0 1 1 0     //4  {1 0 1 1 0 1 1 0     //5  {1 0 1 1 1 1 1 0     //6  {1 1 1 0 0 0 0 0     //7  {1 1 1 1 1 1 1 0     //8  {1 1 1 1 0 1 1 0     //9  {1 1 1 0 1 1 1 1     //A  {1 1 1 1 1 1 1 1     //B  {1 0 0 1 1 1 0 1     //C  {1 1 1 1 1 1 0 1     //D  {1 0 0 1 1 1 1 1     //E  {1 0 0 0 1 1 1 1     //F  {0 0 0 0 0 0 0 1     //.;void setup(){  for(int i=0;i<8;i++)    pinMode(led[i