截个图看看,你完成的单个功能。 你这个需求由于有红外编码,对时序要求比较严,先把单个功能高质量完成才行,别一开始就搞组合功能,到时不能工作都不知道如何查起。 比如先做一个简单功能,把这个功能封装成函数,有了封装换一个不同的遥控器就不至于全部推倒重来。 别想着只用几行代码就能解决所有问题,要舍得多声明变量,多声明函数,思维要有层次,不要眉毛胡子一把抓,结果啥都没抓到。 我给你的代码有你所缺乏的编程思维,认真做一遍后,你目前的很多问题都可迎刃而解。 千万不要小瞧按键点灯程序,你试着完成下面需求: 1,单击按键在按下时马上点亮 2,单击按键在抬起后才点亮 3,双击点亮, 4,长按3秒点亮 5,连续按3次点亮 6,按住按键不放,1秒后,LED每秒钟闪烁3次,松开手后,LED熄灭 |
你上次不是提过类似问题么,我给的参考程序有没有敲一遍?首先在IO口加几个按键代替红外接收,把LED按照需求点亮, 然后再单独调通红外接收。 最后组合在一起。 别急,花点时间把这些吃透,以后就轻松了。 做项目其实都是大同小异。 你这个我以前玩过。 ![]() ![]() |
XTXB 发表于 2020-8-26 16:30 这个程序搞了好久,把各个功能模块分出来,然后再组合,对于我们初学者来说很难的,不知道从何入手 |
用个小状态机描述比较清晰: idle state : ledOff(); if (capture(Key4)) { shine(LED4); goto state 1; } if (capture(Key2)) { darken(LED2) goto state 2; } if (capture(Key3)) { brighten(LED2) goto state 3; } state 1、state2、state3: if (capture(anykey)) { goto state idle; } 伪代码,自己实现函数 |
你这个程序功能代码互相交叉,牵一发动全身,没有修改价值,先按照之前的按键控制LED的例子先做一遍,各功能模块要独立出来:LED显示,蜂鸣器驱动,键值解析,红外接收,单独封装成一个函数,先把这些一个个调试正常,然后一个个组合起来。另外,定时中断中再用delay很不妥。 |