入坑树莓派-03-按键控制

入坑树莓派-03-按键控制

按键指的是这几个:

分别对应这几个端口:

四个按键,四个灯,正好我们可以用按键控制灯。

python代码如下:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

BTN_1 = 6
BTN_2 = 13
BTN_3 = 19
BTN_4 = 26

LED_1 = 17
LED_2 = 27
LED_3 = 22
LED_4 = 5

GPIO.setup(BTN_1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(BTN_2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(BTN_3, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(BTN_4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

GPIO.setup(LED_1, GPIO.OUT)
GPIO.setup(LED_2, GPIO.OUT)
GPIO.setup(LED_3, GPIO.OUT)
GPIO.setup(LED_4, GPIO.OUT)

while True:
    if (GPIO.input(BTN_1) == GPIO.LOW):
        GPIO.output(LED_1, GPIO.HIGH)
    else:
        GPIO.output(LED_1, GPIO.LOW)

    if (GPIO.input(BTN_2) == GPIO.LOW):
        GPIO.output(LED_2, GPIO.HIGH)
    else:
        GPIO.output(LED_2, GPIO.LOW)

    if (GPIO.input(BTN_3) == GPIO.LOW):
        GPIO.output(LED_3, GPIO.HIGH)
    else:
        GPIO.output(LED_3, GPIO.LOW)

    if (GPIO.input(BTN_4) == GPIO.LOW):
        GPIO.output(LED_4, GPIO.HIGH)
    else:
        GPIO.output(LED_4, GPIO.LOW)

    time.sleep(0.01)

C代码如下:

#include <bcm2835.h>
#include <stdio.h>
#include <unistd.h>

// gcc -o button button.c -lbcm2835

#define KEY_1 6
#define KEY_2 13
#define KEY_3 19
#define KEY_4 26

#define PIN_R 17
#define PIN_Y 27
#define PIN_G 22
#define PIN_B 5

int main(int argc, char **argv)
{
    if (!bcm2835_init())
        return -1;

    bcm2835_gpio_fsel(KEY_1, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(KEY_2, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(KEY_3, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(KEY_4, BCM2835_GPIO_FSEL_INPT);

    bcm2835_gpio_set_pud(KEY_1, BCM2835_GPIO_PUD_UP);
    bcm2835_gpio_set_pud(KEY_2, BCM2835_GPIO_PUD_UP);
    bcm2835_gpio_set_pud(KEY_3, BCM2835_GPIO_PUD_UP);
    bcm2835_gpio_set_pud(KEY_4, BCM2835_GPIO_PUD_UP);

    bcm2835_gpio_fsel(PIN_R, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(PIN_Y, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(PIN_G, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(PIN_B, BCM2835_GPIO_FSEL_OUTP);

    bcm2835_gpio_write(PIN_R, LOW);
    bcm2835_gpio_write(PIN_Y, LOW);
    bcm2835_gpio_write(PIN_G, LOW);
    bcm2835_gpio_write(PIN_B, LOW);

    while (1)
    {
        if(bcm2835_gpio_lev(KEY_1) == 0)
        {
            bcm2835_gpio_write(PIN_R, HIGH);
            while(bcm2835_gpio_lev(KEY_1) == 0)
                bcm2835_delay(100);
            bcm2835_gpio_write(PIN_R, LOW);
        }
        if(bcm2835_gpio_lev(KEY_2) == 0)
        {
            bcm2835_gpio_write(PIN_Y, HIGH);
            while(bcm2835_gpio_lev(KEY_2) == 0)
                bcm2835_delay(100);
            bcm2835_gpio_write(PIN_Y, LOW);
        }
        if(bcm2835_gpio_lev(KEY_3) == 0)
        {
            bcm2835_gpio_write(PIN_G, HIGH);
            while(bcm2835_gpio_lev(KEY_3) == 0)
                bcm2835_delay(100);
            bcm2835_gpio_write(PIN_G, LOW);
        }
        if(bcm2835_gpio_lev(KEY_4) == 0)
        {
            bcm2835_gpio_write(PIN_B, HIGH);
            while(bcm2835_gpio_lev(KEY_4) == 0)
                bcm2835_delay(100);
            bcm2835_gpio_write(PIN_B, LOW);
        }
        bcm2835_delay(100);
    }
    bcm2835_close();

    return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注