1,617
社区成员
发帖
与我相关
我的任务
分享
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