自己模仿论坛上的前辈写的一个测速的程序,但是串口监视器读不了
#include <MsTimer2.h>float v=0;
int n=0;
void flash()
{
v=2.2*n;
Serial.println(v);
n=0;
}
void setup()
{
Serial.begin(9600);
attachInterrupt(0,Count, FALLING);
MsTimer2::set(1000,flash); // 中断设置函数,每 1s 进入一次中断
MsTimer2::start();
}
void loop()
{
}
void Count()
{n++;
} 求指导啊啊啊啊啊啊啊 zd94niu 发表于 2014-7-5 14:39 static/image/common/back.gif
求指导啊啊啊啊啊啊啊
void loop()
{
}主程序是空的,楼主检查下。 是啊,主程序里面不用操作 本帖最后由 xiaoliumonitor 于 2014-7-5 15:49 编辑
你的外部中断很快吗?
如果低于一秒,那么n就被清零了。
刚才试了一下你的那个程序 初始化时需加入pinMode(2,INPUT_PULLUP);
如果2脚中断(中断0)是用插针之类的触碰,那么结果会不准确,需要加入防抖
如果是接入霍尔开关测转速,那么就没关系了
#include <MsTimer2.h>
float v=0;
int n=0;
void flash()
{
//v=2.2*n;
Serial.println(n);//-----显示一秒的转数
n=0;
}
void setup()
{
Serial.begin(9600);
pinMode(2,INPUT);//接 霍尔传感器--有磁铁靠近时为低电平
attachInterrupt(0,Count, FALLING);
MsTimer2::set(1000,flash); // 中断设置函数,每 1s 进入一次中断
MsTimer2::start();
}
void loop()
{
}
void Count()
{n++;
}
嗯,非常感谢几位的回答。后来发现原因是我用的是MEGA2560的板子,好像要把MsTimer2改成Flexitimer2就可以了。
但是我的测量结果还是不准确,可能是没有加入防抖,我用的是光电码盘,可能没有霍尔元件好,我再去试试,谢谢啦! 我用的U型测速模块,和楼主一样的程序,发现将白纸插入U型槽和抽离的时候,计数器都有增加,明明设置的是FALLING触发。而且还有一个问题是,插入白纸和抽离的时候,计数器增量不是1,而是十几或几十,这样用码盘测出来不是会比实际值大很多么,困惑中。
页:
[1]