红外传感器测速,输出1个高低电平变化,但是Arduino读取多个

tanghui0102 2020-08-06 12:24:48
大家好,新手求教。
想着arduino 红外避障模块识别白色贴纸,实现测速功能。
代码如下:
int LED = 13; // Use the onboard Uno
volatile float n = 0;
float dt;
float Speed;
float begin_time;
const byte interruptPin = 2; //用2号引脚作为中断触发引脚


void setup() {
pinMode(LED, OUTPUT);
pinMode(interruptPin, INPUT);

/*
* 参数1
interrupt —— 中断源。0对应2号引脚;1对应3号引脚,依次类推。这里我们写的 0 ,即外部中断接数字引脚2号引脚。

参数2
function —— 中断处理函数。即发生中断时,去做什么。这里我们让它发生中断时,做 n+=1。用来计数脉冲,电平变化的次数。

参数3
mode —— 触发模式。触发模式有四种类型:LOW(低电平触发)、CHANGE(电平变化时触发)、RISING(低电平变为高电平时触发)、FALLING(高电平变为低电平时触发)。
这里我们选择CHANGE(电平变化时触发),红外传感器敏感车轮上的白色反光条,车轮一圈均匀贴有6条反光条。车轮转一圈,传感器输出会有6次电平变化
*/
attachInterrupt(digitalPinToInterrupt(interruptPin),count_pulse,FALLING);
begin_time=millis();
Serial.begin(9600);
}

void count_pulse(){
Serial.println("I am being called");
n += 1;
}

void loop() {
dt=millis()-begin_time;
/*每隔500ms输出一次转速,并重新开始计算下一个500ms的转速 */
if(dt > 1000.0 ){
//每一圈有6个脉冲,下面返回的值为rpm
//delayMicroseconds(50);
Serial.print("脉冲个数:");
Serial.println(n);
Serial.print("dt: ");
Serial.println(dt);
Serial.print("转速:");
Speed = (n/6) / (dt/60000);
Serial.println(Speed);
n = 0;
begin_time = millis();
Serial.flush(); // 确定都已经打印出去

}
}


0:08:40.398 -> dt: 1001.00
10:08:40.398 -> 转速:0.00
10:08:41.358 -> 脉冲个数:0.00
10:08:41.398 -> dt: 1001.00
10:08:41.398 -> 转速:0.00
10:08:41.518 -> I am being called
10:08:41.518 -> I am being called
10:08:41.558 -> I am being called
10:08:41.558 -> I am being called
10:08:41.598 -> I am being called
10:08:41.638 -> I am being called
10:08:41.678 -> I am being called
10:08:41.678 -> I am being called
10:08:41.718 -> I am being called
10:08:41.718 -> I am being called
10:08:41.758 -> I am being called
10:08:41.758 -> I am being called
10:08:41.877 -> I am being called
10:08:41.917 -> I am being called
10:08:41.917 -> I am being called
10:08:41.957 -> I am being called
10:08:41.957 -> I am being called
10:08:42.198 -> I am being called
10:08:42.198 -> I am being called
10:08:42.198 -> I am being called
10:08:42.238 -> I am being called
10:08:42.238 -> I am being called
10:08:42.358 -> I am being called
10:08:42.398 -> I am being called
10:08:42.478 -> 脉冲个数:24.00
10:08:42.478 -> dt: 1001.00
10:08:42.518 -> 转速:239.76
10:08:42.557 -> I am being called
10:08:42.557 -> I am being called
10:08:42.597 -> I am being called
10:08:42.597 -> I am being called
10:08:42.637 -> I am being called
10:08:42.637 -> I am being called
10:08:42.677 -> I am being called
10:08:42.677 -> I am being called
10:08:42.717 -> I am being called
10:08:43.118 -> I am being called
10:08:43.158 -> I am being called
10:08:43.158 -> I am being called
10:08:43.198 -> I am being called
10:08:43.198 -> I am being called
10:08:43.238 -> I am being called
10:08:43.238 -> I am being called
10:08:43.278 -> I am being called
10:08:43.358 -> I am being called
10:08:43.398 -> I am being called
10:08:43.398 -> I am being called
10:08:43.438 -> I am being called
10:08:43.438 -> I am being called
10:08:43.478 -> I am being called
10:08:43.478 -> I am being called
10:08:43.518 -> I am being called
10:08:43.598 -> 脉冲个数:25.00
10:08:43.638 -> dt: 1001.00
10:08:43.638 -> 转速:249.75
10:08:43.678 -> I am being called
10:08:43.678 -> I am being called
10:08:43.718 -> I am being called
10:08:43.718 -> I am being called
10:08:43.758 -> I am being called
10:08:44.638 -> 脉冲个数:5.00
10:08:44.638 -> dt: 1001.00
10:08:44.678 -> 转速:49.95
10:08:45.638 -> 脉冲个数:0.00
10:08:45.678 -> dt: 1001.00
10:08:45.678 -> 转速:0.00
10:08:46.638 -> 脉冲个数:0.00

输出的脉冲数明显不对,且识别白色贴纸时,持续输出脉冲。
但是通过数据采集卡查看的波形,在车轮旋转一周识别的6个白色纸贴,正好输出6个脉冲。而arduino输出的脉冲个数如上所示,并不是高低电平变化而加1
请求大神指教,不胜感激!
...全文
153 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,617

社区成员

发帖
与我相关
我的任务
社区描述
智能硬件,智能手表,可穿戴设备,智能电视,谷歌眼镜,Google Glass 相关讨论。
社区管理员
  • 智能硬件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧