完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本人关于定时器有一个问题比较纠结,希望大神门帮忙解答:
# include # define led 4 # define dq 5 //红外避障模块,当检测到物体时输出低电平 const long interval=2000; //2S void ggyy() { digitalWrite(led,0); MsTimer2::stop(); } int a_s=1; void setup() { pinMode(dq,INPUT); pinMode(led,OUTPUT); MsTimer2::set(interval, ggyy); } void loop() { int a; a = digitalRead(dq); a_s = a; if(a==0) { if (a_s == 0){ return ; } else { digitalWrite(led,1); MsTimer2::start(); } } } 这是一段程序,想当红外避障模块检测到物体时,LED灯亮两秒。现在这段程序当检测到物体时亮两秒,但物体拿走时还会亮两秒。请问大神帮忙看看,指出其中的问题。真的非常感谢! |
|
相关推荐
5个回答
|
|
没有时间看程序,大致意思是:你在物体移开时的需要加延时来防止抖动造成的误触发,此外当LED两秒亮之后再移走物体也会亮,说明电路设计或软件处理上有问题,解决的方法是,只有红外检测到物体产生上[或下]沿触发一次的方案+延时。试试吧
|
|
|
|
这是你程序设计上的错误。当模块第一次触发后,程序应该关闭【检测端口】。这样即使再有触发信号过来Arduino也不会处理了。
|
|
|
|
zh***1 发表于 2017-6-6 22:20 我是ardduino小白,对您说的还是不怎么理解。不过还是谢谢您!我自己再试试! |
|
|
|
请问关闭检测端口 if(a==0) { if (a_s == 0){ return ; } else { digitalWrite(led,1); MsTimer2::start(); } } 是在 if(a==0) { 这边加上digitalWrite(led,0);吗? 如果不是还请大神帮忙指出! 真的非常感谢。 |
|
|
|
在MsTimer2::start();或MsTimer2::stop();
之后加一句:a=1; 逻辑为:LED点亮之后或结束,将啊的值还原,如果还按着键,a会变为0 ,此时为真按键,如果不为0,则程序无反应了。看看是吗? |
|
|
|
只有小组成员才能发言,加入小组>>
WIO Terminal +MCP2515 实现车辆OBD的速度监控
10379 浏览 0 评论
60659 浏览 77 评论
5967 浏览 3 评论
一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)
36176 浏览 219 评论
10030 浏览 0 评论
496浏览 1评论
请教:esp32中用u8g2显示shtc3传感器数据到i2c液晶屏,显示不稳定的问题
1264浏览 1评论
1404浏览 1评论
612浏览 0评论
731浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 05:18 , Processed in 0.662722 second(s), Total 90, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号