第八课--脉冲计时(看你按住开关有多久)/zh

来自Microduino Wikipedia
跳转至: 导航搜索
Language English

目的

第三课讲了按键的使用,其中注意了按键防抖的问题,解决方案是加一个延时,延时时间要根据具体情况而定,因为每个人按的按键时间不一样。这堂课将介绍如何获取按下一个按钮的时间,方案采用脉冲计时来计算。 今天还将简单介绍arduino的串口通讯,通过串口监视数据。

设备


Lesson8All.jpg

脉冲

脉冲是一个物理量在短时间或者是持续时间内突变后迅速回到其初始状态的过程,在Microduino中的脉冲其实就是一个高低变化的数字信号,一般具有周期性。脉冲计时常常用在光电码盘、霍尔元件等测速上。

原理图

Lesson8-schematic.jpg

采用内部上拉,另外接104瓷片电容防抖。

程序

int pin = 2;  //定义引脚为D2
float time1,time2;  //定义变量为浮点数
 
void setup()
{
  Serial.begin(115200);  //串口波特率
  pinMode(pin,  INPUT_PULLUP); //设置引脚为内部上拉输入模式
}
 
void loop()
{
    //读取引脚上的低电平脉冲,最大脉冲时间间隔为60秒,并且把结果赋值给time1变量
  time1= pulseIn(pin, LOW,60000000)/1000;//将读取的时间转换成ms
  Serial.print(time1); //通过串口输出time1变量
  Serial.print("ms  ");
  time2= pulseIn(pin, LOW,60000000)/1000.0;//将读取的时间转换成ms
  Serial.print(time2); //通过串口输出time1变量
  Serial.println("ms");//通过串口打印出单位并换行准备输出下一个值
}

串口监视

打开串口监视器

  • 点击串口监视监视器按钮,弹出串口监视界面。
Lesson8-serialmonitor.jpg
Lesson8-serialwindow.jpg
  • 注意:
    • 在setup()函数里加上Serial.begin(xxxx)语句才能使用串口,xxxx为波特率;
    • 用串口监视波特率要一致。波特率是对信号传输速率的一种度量。波特率没匹配好,很容易乱码。
  • 单位转换时需要注意数据类型,看似一样的计算,结果却不一样:
Lesson-calculate.jpg

PulseIn()函数

  • 功能:用来读取一个引脚的脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。返回脉冲的长度,单位毫秒。计时范围从10微秒至3分钟。(1秒=1000毫秒=1000000微秒)
  • 语法:
    • pulseIn(pin, value)
    • pulseIn(pin, value, timeout)
  • 参数:
    • pin:你要进行脉冲计时的引脚号(int)
    • value:要读取的脉冲类型,HIGH或LOW(int)
    • timeout (可选):指定脉冲计数的等待时间,单位为微秒,默认值是1秒(unsigned long)

结果

为了防抖,在按键信号变化端口加了一个104瓷片,可以更好的看到效果。

Lesson8-capacitance.jpg
Lesson8Result.jpg

视频

http://v.youku.com/v_show/id_XNzEwMDA0Njgw.html