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.
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
In einem nachfolgenden Beispielprojekt soll über den Taster-Befehl eine LED zur Erleuchtung gebracht werden.
[Datum: 21.08.2016]