Browse Source

新增四个按钮测试源码

corvin 5 years ago
parent
commit
de1bc5a4d2

+ 30 - 0
example/python_btn_click.py

@@ -0,0 +1,30 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+
+import RPi.GPIO as GPIO
+import time
+
+#GPIO BOARD mode
+#BTN_PIN = 36
+
+#GPIO BCM mode
+BTN_PIN = 16
+
+number=0
+
+#GPIO.setmode(GPIO.BOARD)
+GPIO.setmode(GPIO.BCM)
+GPIO.setup(BTN_PIN, GPIO.IN, GPIO.PUD_UP)
+
+try:
+    while True:
+        time.sleep(0.1)
+        if GPIO.input(BTN_PIN) == 0:
+            print("Button Click:%s"%number)
+            number = number + 1
+except KeyboardInterrupt:
+    pass
+
+#GPIO资源清理
+GPIO.cleanup()
+

+ 36 - 0
example/python_btn_click_isr.py

@@ -0,0 +1,36 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+
+import RPi.GPIO as GPIO
+import time
+
+#GPIO BOARD mode
+BTN_PIN = 36
+
+#GPIO BCM mode
+#BTN_PIN = 16
+
+#统计按键次数
+number=0
+
+def btnInterrupt(BTN_PIN):
+    global number
+    print("Button Click:%s"%number)
+    number = number + 1
+
+GPIO.setmode(GPIO.BOARD)
+#GPIO.setmode(GPIO.BCM)
+GPIO.setup(BTN_PIN, GPIO.IN, GPIO.PUD_UP)
+
+GPIO.add_event_detect(BTN_PIN, GPIO.RISING, btnInterrupt, 400)
+
+try:
+    while True:
+        time.sleep(3)
+except KeyboardInterrupt:
+    pass
+
+#GPIO资源清理
+GPIO.remove_event_detect(BTN_PIN)
+GPIO.cleanup()
+

+ 39 - 0
example/wiringpi_btn_led.c

@@ -0,0 +1,39 @@
+#include <wiringPi.h>
+#include <stdio.h>
+
+#define LED_PIN  26
+#define BTN_PIN  27
+
+#define DELY_MS  100
+
+int main(void)
+{
+    wiringPiSetup();
+    pinMode(LED_PIN, OUTPUT);
+    pinMode(BTN_PIN, INPUT);
+
+    digitalWrite(LED_PIN, HIGH);
+    pullUpDnControl(BTN_PIN, PUD_UP);
+
+    while(1)
+    {
+        //检测按钮是否被按下
+        if(digitalRead(BTN_PIN) == 0)
+        {
+            //led GPIO引脚置低电平,灯亮
+            digitalWrite(LED_PIN, LOW);
+            printf("O\n");
+        }
+        else
+        {
+            //led GPIO引脚置高电平,灯灭
+            digitalWrite(LED_PIN, HIGH);
+            printf("X\n");
+        }
+
+        //增加延时函数,减少cpu消耗
+        delay(DELY_MS);
+    }
+
+    return 0;
+}

+ 45 - 0
example/wiringpi_btn_led_isr.c

@@ -0,0 +1,45 @@
+#include <wiringPi.h>
+#include <stdio.h>
+
+#define LED_PIN  26
+#define BTN_PIN  27
+#define DELY_MS  1000
+
+//在中断中要使用易失性变量
+volatile int cnt = 0;
+
+void btnInterrupt()
+{
+    if(cnt%2 == 0)
+    {
+        //led GPIO引脚置低电平,灯亮
+        digitalWrite(LED_PIN, LOW);
+    }
+    else
+    {
+        //led GPIO引脚置高电平,灯灭
+        digitalWrite(LED_PIN, HIGH);
+    }
+    cnt++;
+}
+
+int main(void)
+{
+    wiringPiSetup();
+    pinMode(LED_PIN, OUTPUT);
+    pinMode(BTN_PIN, INPUT);
+
+    digitalWrite(LED_PIN, HIGH);
+    pullUpDnControl(BTN_PIN, PUD_UP);
+
+    //配置按键的边沿触发方式和中断函数
+    wiringPiISR(BTN_PIN, INT_EDGE_RISING, &btnInterrupt);
+
+    while(1)
+    {
+        //主线程可以做其他事情
+        delay(DELY_MS);
+    }
+
+    return 0;
+}