Raspberry Pi: Taster an Input-Pin einlesen

Im folgenden Beispielprojekt soll das Betätigen eines Tasters über die GPIO des Raspberry Pi eingelesen werden und in der Terminal-Anwendung ausgegeben werden. Dazu wird der entsprechende Pin als Input-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.

Schaltbild Verkabelung Taster mit GPIO

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

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

//den Pin festlegen, auf welchem es Blinken soll
//P1_15 entspricht dem GPIO-Pin22
#define PIN RPI_GPIO_P1_15

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(PIN, BCM2835_GPIO_FSEL_INPT);
    //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(PIN, BCM2835_GPIO_PUD_DOWN);

    //Dauer-Schleife durchlaufen um ständig Tasterzustand abzufragen
    while(1)
    {       
        //PIN-Eingang einlesen und ein Variablen zuweisen
        uint8_t value = bcm2835_gpio_lev(PIN);
        //Variable auswerten: 1 = Taster gedrückt;
        char string1[] = "Taster betätigt";
        char string2[] = "Taster nicht betätigt";
        if (value == 1)
            //Text über Tasterzustand ausgeben  
            printf("%s: %d\n", string1, value);
        else
            printf("%s: %d\n", string2, value);

        //ein wenig warten
        delay(300);
    }

    bcm2835_close();
    return 0;   
}

Nun folgt das Kompilieren des Quellcodes:

gcc -o buttoninput buttoninput.c -l bcm2835

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

sudo ./buttoninput

Foto Verkabelung des Tasters mit Raspberry Pi

In einem nachfolgenden Beispielprojekt soll über den Taster-Befehl eine LED zur Erleuchtung gebracht werden.

[Datum: 21.08.2016]