3回答

0收藏

[求助] 使用按鍵控制程序的啓動

Raspberry Pi Raspberry Pi 3826 人阅读 | 3 人回复 | 2016-05-12

現在想用一個按鍵來控制程序的啓動與關閉。



按鍵接的是Raspberry的GPIO6.
當按鍵按一下的時候,GPIO接地,程序開始運行。
當再按一次的時候,程序停止。

現在的問題是,如果按一次按鍵的話,GPIO僅僅接地一瞬間后就又被拉高了。程序衹執行了一次就停止了,不能繼續循環下去。
int main(){
        ADC_Init();
        while(true){
                if(digitalRead(KEY) == 0){                  //GPIO6 接地,按鍵按下
                        ADC();                                        //開始讀數據
                        printf("%d", voltage);
                }
        }
}

并且根本實現不了再按一次程序停止。無奈了。。。。。

請問如何可以達到這樣的要求?

謝謝!






分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

yerun

发表于 2016-5-13 10:56:13 | 只看该作者

大概整理一下我跟大神讨论的过程:
1.需要额外一个变量  每次检测到按下  就翻转 的一个变量(所以这个代码需要再定义一行,然后用来检测判断,这个程序就只是一个过程,所以只运行一次)
2.if(digitalread(key)==0)  按下过=1;
if(按下过==1){
ADC( )......
}、
3.实际上  还可以稍微扩展一下,做成  第一次按下 就开始,再按一次,又停止。当然 这个  按下过 变量  要在 while 之前,初始化成 0 .
4.话说这个框架不是很好,缺点是  如果 是在 adc执行的时候按下 或 在 printf 执行的时候按下,会木有响应。
5.其实还有其他问题。 比如   你那个 按键检测的函数。是否做了防抖,是否做了  释放检测 。是否有 长按  短按  的区分。因此 这类的设计 通常需要某种并行机制来解决。比如 ADC的 dma方式。比如 按键的中断方式。才能让两者相互不影响。
板凳

yerun

发表于 2016-5-13 10:56:58 | 只看该作者

还有个大神让你先点LED灯,从基础的开始
地板

bajonetty

发表于 2016-5-18 13:54:31 | 只看该作者

yerun 发表于 2016-5-13 10:56
大概整理一下我跟大神讨论的过程:
1.需要额外一个变量  每次检测到按下  就翻转 的一个变量(所以这个代码 ...

多謝解答,

我這幾天已經開始按您的方法來繼續加工了一下。

我在程序前也加了防抖測試,但是現在按下后還是有點小問題。稍後我把代碼貼出來。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条