写了两种关于霍尔元件的转速程序
本帖最后由 wasdpkj 于 2012-12-2 20:17 编辑针对44E,
本人很菜,写了两种,后面一种尝试了多取样;
用串口监视,感觉后一种刷新率跟不上;另外总感觉这么计时不靠谱,希望高手指点。
int zdpin=0; //中断0,对应引脚UNO的D2
#define zt 1
int time=0;
int num;
int rpm;
void setup ()
{
attachInterrupt(zdpin,light,FALLING); //中断
Serial.begin(57600);
}
void loop()
{
if(num!=0)
{
time++;
}
if(time>=1000) //定时
{
rpm=num*60;
time=0;
num=0;
}
delayMicroseconds(100);
Serial.println(rpm);
}
void light()
{
num++;
}
第二种:
int zdpin=0; //中断0,对应引脚UNO的D2
#define zt 1
int time=0;
int num;
int rpm;
int sta=0;
int a;
int b;
int c;
int d;
int e;
int f;
void setup ()
{
attachInterrupt(zdpin,light,FALLING); //中断
Serial.begin(57600);
}
void loop()
{
switch(sta) //6个周期取样赋值
{
case 0:a=num;break;
case 1:b=num;break;
case 2:c=num;break;
case 3:d=num;break;
case 4:e=num;break;
case 5:f=num;break;
}
sta++;
time++;
if(sta>=5) //6个周期取样赋值
{
sta=0;
}
if(time>=1000) //定时
{
rpm=10*(a+b+c+d+e+f);
time=0;
num=0;
}
delayMicroseconds(100);
Serial.println(rpm);
Serial.println("");
}
void light()
{
num++;
}
听了1989的意见,用millis又写了一个函数
#define zdpin 0
int num;
int rpm;
long jishi=0;
void setup ()
{
attachInterrupt(zdpin,light,FALLING); //?ж?
Serial.begin(57600);
}
void loop()
{
if(millis()-jishi>=1000)
{
rpm=60*num;
num=0;
jishi=millis();
}
Serial.println(rpm);
Serial.println("");
}
void light()
{
num++;
}
这个样子真的不真么靠谱。读取管脚的时间就要100ms,还有每个语句需要耗费的时间。建议使用millis(),这样子应该要靠谱一些 hp198969 发表于 2012-12-2 10:36 static/image/common/back.gif
这个样子真的不真么靠谱。读取管脚的时间就要100ms,还有每个语句需要耗费的时间。建议使用millis(),这样 ...
是100微秒,用了中断,这样也会有很大影响吗?
millis()不是很了解,我去看看
页:
[1]