转: https://baijiahao.baidu.com/s?id=1727007635730431747&wfr=spider&for=pc
14个数字信号引脚:数字信号引脚从图上可以看到总共有14个(0~13号),0号和1号引脚属于串口通信用的,一般我们不去占用;
tx和rx是串口通信的引脚,usb是通用串行总线的协议,现在电脑上多数只有usb口,一般不会有串口,而arduino使用的是avr芯片,单片机默认都会提供串口通信,所以arduino为了解决电脑没有串口的问题,使用usb转串口的适配器把usb数据转成串口,然后再接到arduino的tx和rx口上,usb和rx、tx上的数据是一样的,只是使用的协议不一样而已。
Serial.read读的是rx引脚对应寄存器的数据,Serial.read运行在主芯片上,读不到usb的数据,只能读转换后的数据。
同理Serial.print 是往tx引脚对应寄存器上写的。
从2号引脚到13号引脚是我们可随意使用的数字信号引脚,数字信号引脚可以读取数字信号,也可以输出数字信号。而在2到13号引脚中带有“~”符号的引脚代表它不仅可以输出高电平和低电平信号,也可以输出调制的模拟信号(PWM),不带“~”符号的引脚就只能输出5V高电平或者0V低电平。
就是通过在一段时间内来回切换高低电平从而控制这段时间内高低电平出现的时间比例。高电平出现的时间比例越多,那么输出电压就越接近5V;低电平出现的时间比例越多,输出电压就越接近0V。而这个所谓的时间比例就是所谓的“占空比”,就是通过在一段时间内来回切换高低电平从而控制这段时间内高低电平出现的时间比例。高电平出现的时间比例越多,那么输出电压就越接近5V;低电平出现的时间比例越多,输出电压就越接近0V。而这个所谓的时间比例就是所谓的“占空比”,0%的占空比就意味着在一段时间内全是低电平输出,这个时候输出当然就是0V;而100%的占空比就是说这段时间内全是高电平输出,输出当然就是5V;而50%占空比意味着这段时间内一半时间是高电平一半时间是低电平,由于高电平的出现时间占到了50%,所以叫50%占空比。那么这个时候输出是多少V呢?我们高中学过一个概念叫等效值,我们说占空比50%的时候输出的电压就是它的等效电压,没记错的话应该是二分之一,为2.5V。也就是说占空比50%的一段信号包含的能量等于在同样时间段内不间断输出2.5V电压所包含的能量,所以你看多妙,通过这种方法我们只通过输出5V和0V就可以得到其他值的电压了。
6个模拟信号引脚:Arduino下方A0,A1…,A5这几个带A的引脚就是模拟信号引脚。需要点出一下的是模拟信号引脚只能读取不能输出模拟量(其实也可以输出,不过只能输出5V和0V,并且模拟接口输出的是CMOS信号而非数字接口那种TTL信号),总之呢我们基本上是用模拟信号引脚接收传感器信号就对了。
一个模拟信号是怎么通过模拟信号引脚传入单片机的呢?单片机只认0和1这种数字信号,它怎么认得模拟信号?其实这里面用的是一个“映射”的方式来实现模数转换的。模拟接口里面的模数转换器用的是一个10位二进制空间,所以按照二进制的计算方法我们可以知道这个10位二进制空间总共可以计量29+28+…+21+20=1023个数字。按照十进制的表述就是说我们总共可以用这个计数器获得0,1,2…,1023这些个数字标签,接下来需要做的就是把这些数字标签一一对应上外部传入的模拟信号值,这就叫映射了。例如,我们输入一个5V的电平,那么模数转换器会自动把0对应0V,1023对应5V,然后我们可以算出5V/1023=0.0048V=4.8mV,所以1对应4.8mV,2对应9.6mV,以此类推一直到5V。可见这里面的分辨率是4.8mV,也就是说我们通过这种方法可以辨认出0V到5V之间的电平,例如2.5V就会对应到512这个数字上,然后将512这个数字传入单片机,单片机就知道原来输入了一个2.5V电压。此外还需要讲一点,Arduino模拟新号引脚可输入的电平最高就是5V,再高就会烧坏板子,所以在开发过程中需要确认传感器传入的电平高低,太高了就要降压。