极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10721|回复: 8

自己模仿论坛上的前辈写的一个测速的程序,但是串口监视器读不了

[复制链接]
发表于 2014-7-5 14:39:13 | 显示全部楼层 |阅读模式
#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++;
}
回复

使用道具 举报

 楼主| 发表于 2014-7-5 14:39:44 | 显示全部楼层
求指导啊啊啊啊啊啊啊
回复 支持 反对

使用道具 举报

发表于 2014-7-5 15:17:00 | 显示全部楼层
zd94niu 发表于 2014-7-5 14:39
求指导啊啊啊啊啊啊啊
  1. void loop()
  2. {  
  3. }
复制代码
主程序是空的,楼主检查下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-5 15:17:59 | 显示全部楼层
是啊,主程序里面不用操作
回复 支持 反对

使用道具 举报

发表于 2014-7-5 15:35:40 | 显示全部楼层
本帖最后由 xiaoliumonitor 于 2014-7-5 15:49 编辑

你的外部中断很快吗?
如果低于一秒,那么n就被清零了。
回复 支持 反对

使用道具 举报

发表于 2014-7-5 15:47:52 | 显示全部楼层
刚才试了一下你的那个程序   初始化时需加入pinMode(2,INPUT_PULLUP);
如果2脚中断(中断0)是用插针之类的触碰,那么结果会不准确,需要加入防抖
如果是接入霍尔开关测转速,那么就没关系了

回复 支持 反对

使用道具 举报

发表于 2014-7-5 23:27:22 | 显示全部楼层
#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++;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-9 22:11:32 | 显示全部楼层
嗯,非常感谢几位的回答。后来发现原因是我用的是MEGA2560的板子,好像要把MsTimer2改成Flexitimer2就可以了。
但是我的测量结果还是不准确,可能是没有加入防抖,我用的是光电码盘,可能没有霍尔元件好,我再去试试,谢谢啦!
回复 支持 反对

使用道具 举报

发表于 2014-10-7 22:02:42 | 显示全部楼层
我用的U型测速模块,和楼主一样的程序,发现将白纸插入U型槽和抽离的时候,计数器都有增加,明明设置的是FALLING触发。而且还有一个问题是,插入白纸和抽离的时候,计数器增量不是1,而是十几或几十,这样用码盘测出来不是会比实际值大很多么,困惑中。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 13:35 , Processed in 0.071574 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表