OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2336|回复: 8

红外遥控应用

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-8-18
在线时间
2 小时
发表于 2018-8-18 11:21:51 | 显示全部楼层 |阅读模式
1金钱
江湖告急:
大佬们帮帮忙,
我想用红外遥控器给我的main函数加一个暂停键,怎么加?
就是main中运行其他命令,当检测到5被按下,停止,再次按下5继续回到main函数原来位置继续运行。
main函数就好像看电影一样,咱遥控器按个暂停键他就停止了,咱再按暂停键他又开始在原来停止的地方播放了。
这个怎么编呢?


最佳答案

查看完整内容[请看2#楼]

额逗比了,没有仔细阅读,只关注到怎么暂停主函数上去了。 @a496298685 说得对。 按键的检测本身可以参照正点原子的例程,不过问题是,主函数在执行另外一个任务时,如何才能够及时地检测出红外遥控器按下的按键就是5?原子的例程中是在主循环中一直不停地检测的,而且主循环也可以说只有这一项任务(更新LED状态那个可以不算了。。。基本不耗时),所以能够及时响应。由于使用的是定时器输入捕获功能实现的遥控器数据接收, ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 11:21:52 | 显示全部楼层
额逗比了,没有仔细阅读,只关注到怎么暂停主函数上去了。

@a496298685 说得对。

按键的检测本身可以参照正点原子的例程,不过问题是,主函数在执行另外一个任务时,如何才能够及时地检测出红外遥控器按下的按键就是5?原子的例程中是在主循环中一直不停地检测的,而且主循环也可以说只有这一项任务(更新LED状态那个可以不算了。。。基本不耗时),所以能够及时响应。由于使用的是定时器输入捕获功能实现的遥控器数据接收,所以有个想法就是在这个定时器输入捕获的中断函数中,当最后确认完成了一个按键的红外码的接收之后,判断是否是5,如果是的话就死循环原地等待,一直占用CPU,给人以main函数“停止”了一样;但问题是,这个时候定时器输入捕获的中断函数也被这个死循环锁死了,没法继续接收接下来的红外数据了。

鄙人不才,有个非常笨的想法是利用外部中断。由于STM32本身在不使用操作系统的时候没法实现软件中断,所以只好将用不到的两个引脚相连接,一个设置为输出,另外一个设置为外部中断,并且这个外部中断的抢占式优先级要设得比定时器中断的要低,保证定时器中断可以打断外部中断的运行。这样当定时器输入捕获函数完成了一个按键的红外码的接收之后判断是否是接收到按键5,如果是检查当前是否是“主函数暂停”状态,如果不是那么就给这个引脚输出一个高电平或者低电平产生上升沿或者下降沿,触发外部中断;由于外部中断抢占式优先级低于定时器,所以外部中断不会打断定时器中断的执行;然后定时器中断退出,准备进行后续的红外键码的捕获;而此时由于外部中断还在排队等着呢,所以会进入外部中断的服务程序,此时使外部中断处于一个循环中,不断检测当前是否有接收到红外键码5;如果接收不到,外部中断的服务程序就会一直占用CPU循环,给人以“主函数运行暂停”的感觉(实际上也确实是暂停了);但是由于外部中断的抢占式优先级比定时器中断低,所以关于红外码的接收部分依旧可以正常进行。当定时器捕获中断完成了红外键码的数据接收时,依旧执行上面的判断,但是此时可以通过标志位等手段知道“主函数暂停”,所以不进行对那个引脚的输出操作,直接退出定时器中断即可;退出后继续执行外部中断程序,此时这里就可以检测到5被按下,恢复刚才那个输出引脚的电平,恢复相关的“主函数暂停”标志,break循环就可以退出外部中断函数,返回到刚刚被打断的主函数中,给人的感觉就是“主函数又继续运行了”(实际上也是这样)。

还有更好的电子希望各路大神前来补充~
十六进制带我飞。
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-18 11:36:25 | 显示全部楼层
直接用原子例程的红外遥控实验代码就可以实现。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-8-18 14:00:19 | 显示全部楼层
检测到按键按下,执行一个死循环,再次按下按键,退出死循环。
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 14:31:16 | 显示全部楼层
3楼正解
回复

使用道具 举报

20

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
605
金钱
605
注册时间
2017-7-14
在线时间
116 小时
发表于 2018-8-18 16:11:19 | 显示全部楼层
3楼正解。
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-8-18 16:19:47 | 显示全部楼层
HXYDJ 发表于 2018-8-18 14:00
检测到按键按下,执行一个死循环,再次按下按键,退出死循环。

检测到按键按下才是有难度的部分哎,你就居然用七个字概括了
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-18 18:10:26 | 显示全部楼层
a496298685 发表于 2018-8-18 16:19
检测到按键按下才是有难度的部分哎,你就居然用七个字概括了

终于来了一个明白人,
3、4、5楼都是猴子请来的救兵。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-8-18 18:58:20 | 显示全部楼层
warship 发表于 2018-8-18 18:10
终于来了一个明白人,
3、4、5楼都是猴子请来的救兵。

三楼是猴子,四楼五楼是救兵
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 03:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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