Raspberry Pi: LED mit Taster schalten

Im folgenden Beispielprojekt soll das Betätigen eines Tasters dazu führen, dass eine LED ein- bzw. ausgeschaltet wird. Über die GPIO des Raspberry Pi erfolgt einerseits der Input des Tasters sowie der Output für die LED. Dazu werden die entsprechende Pins als Input- bzw. Output-Pin im Quellcode definiert. Die Beschaltung erfolgt entsprechend nachfolgendem Schaltbild, wobei hier, wie man auf dem Foto unten erkennen kann auf Pulldown- bzw. Pullup-Widerstand verzichtet wurde, da der Raspberry Pi eine interne Pullup-/Pulldown Widerstände hat, die man über den Quellcode festlegen kann. Ebenfalls wurde auf den Vorwiderstand der LED verzichtet (nicht die feine Art).

Wie man nur eine LED zum Leuchten bringt oder einen einzelnen Taster einliest wurde bereits in zwei anderen Beispielprojekten beschrieben.

Schaltbild Verkabelung LED und Taster mit GPIO

Die Programmierung erfolgt in der Programmiersprache C unter Verwendung der bcm2835-Library. Die Datei heißt ledbutton.c und wurde in Geany geschrieben.

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

//den Pin festlegen, auf welchem es Blinken soll
//P1_15 entspricht dem GPIO-Pin22
//P1_11 entspricht dem GPIO-Pin17
#define PIN1 RPI_GPIO_P1_15
#define PIN2 RPI_GPIO_P1_11

int main(int argc, char **argv)
{
    //GPIO initiieren und wenn dies fehlschlägt Programm verlassen
    if(!bcm2835_init())
        return 1;

    //den PIN als Eingangs-PIN konfigurieren
    bcm2835_gpio_fsel(PIN1, BCM2835_GPIO_FSEL_INPT);
    //den PIN als Ausgangs-PIN konfigurieren
    bcm2835_gpio_fsel(PIN2, BCM2835_GPIO_FSEL_OUTP);
    //Pull Up-Down-Mode setzen (pud): Legt fest, ob der interne Pull-Up
    //oder Pull-Down-Widerstand zu verwenden ist; hier wird Pull-Down
    //verwendet, weil der Taster ein Schließer ist und im Grundzustand
    //am Input-Pin ein Low-Signal anliegen soll
    bcm2835_gpio_set_pud(PIN1, BCM2835_GPIO_PUD_DOWN);

    bool is_on;

    //Dauer-Schleife durchlaufen für Tasterabfrage und LED
    while(1)
    {   
        //Texte zur weiteren Verwendung definieren  
        char string1[] = "Taster betätigt: LED ein";
        char string2[] = "Taster betätigt: LED aus";
        //PIN-Eingang einlesen und ein Variablen zuweisen
        uint8_t value = bcm2835_gpio_lev(PIN1);
        //Variable auswerten: 1 = Taster gedrückt;
        if (value == 1)
        {
            is_on = !is_on;
            if(is_on)
                printf("%s\n", string1);
            else
                printf("%s\n", string2);
        }

        if (is_on)
            //LED einschalten
            bcm2835_gpio_write(PIN2, HIGH);
        else
            //LED ausschalten
            bcm2835_gpio_write(PIN2, LOW);

        //ein wenig warten (200ms)
        delay(200);
    }

    bcm2835_close();
    return 0;   
}

Nun folgt das Kompilieren des Quellcodes:

gcc -o ledbutton ledbutton.c -l bcm2835

Das Ausführen erfordert Admin-Rechte, sonst kommt es zu Speicherzugriffsfehlern:

sudo ./ledbutton

Foto Raspberry Pi Verkabelung LED und Taster

[Datum: 21.08.2016]