Google Chat: zj734465502@gmail.com
+86-0755-88291180
sales@spotpear.com
dragon_manager@163.com
tech-support@spotpear.com
zhoujie@spotpear.com
WhatsApp:13246739196
Using a external button to do some control is so cool a thing but knowledge of event interruption is often required in such case. This section gives some examples under different libraries.
#include <bcm2835.h>
#include <stdio.h>
#define KEY 20
int main(int argc, char **argv)
{
if (!bcm2835_init())return 1;
// Sets the pin as input.
bcm2835_gpio_fsel(KEY, BCM2835_GPIO_FSEL_INPT);
// Sets the Pull-up mode for the pin.
bcm2835_gpio_set_pud(KEY, BCM2835_GPIO_PUD_UP);
printf("Key Test Program!!!!\n");
while (1)
{
// Reads the current level on the specified pin and returns either HIGH or LOW (0 or 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;
}
Save the file as "key.c" and then compile it. Run the program and give a low level to the pin, the terminal will prompt "KEY PRESS". Hit Ctrl + C to terminate the process.
gcc -Wall key.c -o key -lbcm2835 sudo ./key
gpio readall#include <stdio.h>
#include <wiringPi.h>
char KEY = 29;
int main()
{
if (wiringPiSetup() < 0)return 1 ;
// Sets the pin as input.
pinMode(KEY,INPUT);
// Sets the Pull-up mode for the pin.
pullUpDnControl(KEY, PUD_UP);
printf("Key Test Program!!!\n");
while(1)
{
if (digitalRead(KEY) == 0)
{
printf ("KEY PRESS\n") ;
// Returns the value read at the given pin. It will be HIGH or LOW (0 or 1).
while(digitalRead(KEY) == 0)
delay(100);
}
delay(100);
}
}
Save the file as "key.c" and then compile it. Run the program and give a low level to the pin, the terminal will prompt "KEY PRESS". Hit Ctrl + C to terminate the process.
gcc -Wall key.c -o key -wiringPi sudo ./key
gpio readall#include <stdio.h>
#include <wiringPi.h>
#define button 29
char flag = 0;
// The function will be called when the interrupt triggers.
void myInterrupt()
{
flag ++;
}
int main()
{
// This initialises the wiringPi system
// and assumes that the calling program is going to be using the wiringPi pin numbering scheme.
if(wiringPiSetup() < 0)return 1;
// This function registers a function to received interrupts on the specified pin.
if(wiringPiISR(button, INT_EDGE_FALLING, &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;
}
}
}
Save the file as "Interrupt.c" and then compile and execute it. Hit Ctrl + C to terminate the process.
gcc -Wall Interrupt.c -o key -wiringPi sudo ./Interrupt
gpio readall#!/usr/bin/python
# -*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import time
KEY = 26
# pin numbers are interpreted as BCM pin numbers.
GPIO.setmode(GPIO.BCM)
# Sets the pin as input and sets Pull-up mode for the pin.
GPIO.setup(KEY,GPIO.IN,GPIO.PUD_UP)
while True:
time.sleep(0.05)
# Returns the value read at the given pin. It will be HIGH or LOW (0 or 1).
if GPIO.input(KEY) == 0:
print("KEY PRESS")
while GPIO.input(KEY) == 0:
time.sleep(0.01)
Run the program and then give a low level to the pin, the terminal will prompt "KEY PRESS", Hit Ctrl + C to terminate the process.
sudo python key.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import time
KEY = 26
# The function will be called when the interrupt triggers.
def MyInterrupt(KEY):
print("KEY PRESS")
# pin numbers are interpreted as BCM pin numbers.
GPIO.setmode(GPIO.BCM)
GPIO.setup(KEY, GPIO.IN, GPIO.PUD_UP)
# add falling edge detection on a channel (i.e. KEY)
# ignoring further edges for 200ms for switch bounce handling.
GPIO.add_event_detect(KEY, GPIO.FALLING, MyInterrupt, 200)
while True:
time.sleep(1)