匿名
未登录
登录
丢石头百科
搜索
查看“树莓派系列教程:按键”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
树莓派系列教程:按键
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
上两章我们讲解了在树莓派上如何点亮一个LED灯,这一章我们讲解一下按键以及事件中断。 一、bcm2835 <syntaxhighlight lang="python"> #include <bcm2835.h> #include <stdio.h> #define KEY 20 int main(int argc, char **argv) { if (!bcm2835_init())return 1; bcm2835_gpio_fsel(KEY, BCM2835_GPIO_FSEL_INPT); bcm2835_gpio_set_pud(KEY, BCM2835_GPIO_PUD_UP); printf("Key Test Program!!!!\n"); while (1) { if(bcm2835_gpio_lev(KEY) == 0) { printf ("KEY PRESS\n") ; while(bcm2835_gpio_lev(KEY) == 0) bcm2835_delay(100); } bcm2835_delay(100); } bcm2835_close(); return 0; }</syntaxhighlight> 编译并执行,按下按键会看到窗口显示”KEY PRESS”,按Ctrl+C结束程序。 <syntaxhighlight lang="python"> gcc –Wall key.c –o key –lbcm2835 sudo ./key</syntaxhighlight> 注:(1)bcm2835_gpio_fsel(KEY, BCM2835_GPIO_FSEL_INPT);设置管脚为输入模式 (2)bcm2835_gpio_set_pud(KEY, BCM2835_GPIO_PUD_UP);设置为上拉模式 (3) bcm2835_gpio_lev(KEY);读取管脚状态 二、wiringPi <syntaxhighlight lang="python"> #include <stdio.h> #include <wiringpi.h> char KEY = 28; int main() { if (wiringPiSetup() < 0)return 1 ; pinMode (KEY,INPUT); pullUpDnControl(KEY, PUD_UP); printf("Key Test Program!!!\n"); while(1) { if (digitalRead(KEY) == 0) { printf ("KEY PRESS\n") ; while(digitalRead(KEY) == 0) delay(100); } delay(100); } }</syntaxhighlight> 编译并执行,按下按键会看到窗口显示”KEY PRESS”,按Ctrl+C结束程序。 <syntaxhighlight lang="python"> gcc –Wall key.c –o key –wiringPi sudo ./key</syntaxhighlight> 注:(1)pinMode (KEY,INPUT);设置管脚为输入模式 (2)pullUpDnControl(KEY, PUD_UP);设置为上拉模式 (3) <span lang="EN-US" mso-bidi-language:ar-sa="" mso-font-kerning:1.0pt="" style="font-size:9.0pt;font-family: " tahoma="">digitalRead(KEY);读取管脚状态 通过中断的方式编程 <syntaxhighlight lang="python"> /* Interrupt.c * you can build this like: * gcc -Wall Interrupt.c -o Interrupt -lwiringPi * sudo ./Interrupt */ #include <stdio.h> #include <wiringPi.h> #define button 28 char flag = 0; void myInterrupt() { flag ++; } int main() { if(wiringPiSetup() < 0)return 1; pinMode(button,INPUT); pullUpDnControl(button,PUD_UP); if(wiringPiISR(button,INT_EDGE_RISING,&myInterrupt) < 0) { printf("Unable to setup ISR \n"); } printf("Interrupt test program\n"); while(1) { if(flag) { while(digitalRead(button) ==0); printf("button press\n"); flag = 0; } } }</syntaxhighlight> <span style="font-size:9.0pt;font-family:宋体;mso-ascii-font-family: Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma;color:#555555; background:white">编译并执行 <syntaxhighlight lang="python"> gcc –Wall Interrupt.c –o Interrupt -lwirngPi sudo ./Interrupt</syntaxhighlight> 注:(1)wiringPiISR(button,INT_EDGE_FALLING,&myInterrupt);设置中断下降沿触发,myInterrupt为中断处理函数。 三、python <syntaxhighlight lang="python"> #!/usr/bin/python # -*- coding:utf-8 -*- import RPi.GPIO as GPIO import time KEY = 20 GPIO.setmode(GPIO.BCM) GPIO.setup(KEY,GPIO.IN,GPIO.PUD_UP) while True: time.sleep(0.05) if GPIO.input(KEY) == 0: print("KEY PRESS") while GPIO.input(KEY) == 0: time.sleep(0.01)</syntaxhighlight> 执行程序,按下按键会看到窗口显示”KEY PRESS”,按Ctrl+C结束程序。 <syntaxhighlight lang="python"> sudo python key.py</syntaxhighlight> 注:(1)GPIO.setup(KEY,GPIO.IN,GPIO.PUD_UP) 设置管脚为上拉输入模式 (2)GPIO.input(KEY) 读取管脚值 通过中断模式编程 <syntaxhighlight lang="python"> #!/usr/bin/python # -*- coding:utf-8 -*- import RPi.GPIO as GPIO import time KEY = 20 def MyInterrupt(KEY): print("KEY PRESS") GPIO.setmode(GPIO.BCM) GPIO.setup(KEY,GPIO.IN,GPIO.PUD_UP) GPIO.add_event_detect(KEY,GPIO.FALLING,MyInterrupt,200) while True: time.sleep(1)</syntaxhighlight> 注:(1)def MyInterrupt(KEY): 定义中断处理函数 (2) GPIO.add_event_detect(KEY,GPIO.FALLING,MyInterrupt,200) 增加事件检测,下降沿触发,忽略由于开关抖动引起的小于200ms的边缘操作。 关于树莓派事件中断编程请参考: http://www.guokr.com/post/480073/focus/1797650173/
该页面使用的模板:
模板:Raspberry Pi Study
(
查看源代码
)
返回至
树莓派系列教程:按键
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志