20141120 【 Arduino - 电平时间测量(pulseIn) 】 用pulseIn函数测量按键时电平高低时间

来源:互联网 发布:php 二进制打印出来 编辑:程序博客网 时间:2024/05/16 07:39

利用 Arduino 自带函数 pulseIn() 测量按键按下时,

维持高电平的时间。(模拟引脚只有0和1两种值,抖动怎么办?我也不知道它怎么处理抖动的。。。)



线路图可以参考下图。



测了一下,最短维持时间小于 40ms(我的手速)。



也就是以后监控按键时,两次检测时间必须小于 40ms。

【10ms应该没问题,但是间隔太长。。】

【1ms的话,又不知道抖动时间有没有可能大于它,以后再测吧!!!】




介绍一下pulseIn()函数
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)







#define ulunsigned longconst int pin = 7;const ul MAXHT = 3*1000*1000;ul ht;void setup(){pinMode(pin, INPUT);Serial.begin( 9600 );}void loop(){Serial.print("\n\n START:\t");ul ht = pulseIn(pin, HIGH, MAXHT);show_smu( ht );}void show_smu(ul t){int us = t%1000;t /= 1000;int ms = t%1000;t /= 1000;Serial.print( t );Serial.print("s ");Serial.print( ms );Serial.print("ms ");Serial.print( us );Serial.print("us\n");}


0 0