利用 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 ul unsigned long
const 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");
}