.. note::
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
- **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!
.. _2.1.1_c:
2.1.1 Knopf
==================
Einführung
-----------------
In diesem Projekt lernen wir, wie wir eine LED mit einem Knopf ein- oder ausschalten können.
Benötigte Komponenten
------------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten.
.. image:: ../img/list_2.1.1_Button.png
Es ist definitiv praktisch, ein gesamtes Set zu kaufen, hier ist der Link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Name
- ARTIKEL IN DIESEM KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Sie können sie auch einzeln über die untenstehenden Links kaufen.
.. list-table::
:widths: 30 20
:header-rows: 1
* - KOMPONENTENVORSTELLUNG
- KAUF-LINK
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_led`
- |link_led_buy|
* - :ref:`cpn_button`
- |link_button_buy|
Schaltplan
---------------------
Verwenden Sie einen normalerweise offenen Knopf als Eingang für den Raspberry Pi. Die Verbindung ist im folgenden Schaltplan dargestellt. Wenn der Knopf gedrückt wird, wechselt GPIO18 auf ein niedriges Niveau (0V). Über die Programmierung können wir den Zustand von GPIO18 erkennen. Das bedeutet, wenn GPIO18 auf ein niedriges Niveau wechselt, wurde der Knopf gedrückt. Sie können den entsprechenden Code ausführen, wenn der Knopf gedrückt wird, und dann leuchtet die LED auf.
.. note::
Der längere Pin der LED ist die Anode und der kürzere ist die Kathode.
.. image:: ../img/image302.png
.. image:: ../img/image303.png
Experimentelle Verfahren
---------------------------
**Schritt 1**: Bauen Sie den Schaltkreis.
.. image:: ../img/image152.png
**Schritt 2**: Öffnen Sie die Code-Datei.
.. raw:: html
.. code-block::
cd ~/raphael-kit/c/2.1.1/
.. note::
Wechseln Sie mit **cd** zum Pfad des Codes in diesem Experiment.
**Schritt 3**: Kompilieren Sie den Code.
.. raw:: html
.. code-block::
gcc 2.1.1_Button.c -lwiringPi
**Schritt 4**: Führen Sie die ausführbare Datei aus.
.. raw:: html
.. code-block::
sudo ./a.out
Nachdem der Code ausgeführt wurde, drücken Sie den Knopf, die LED leuchtet auf; andernfalls schaltet sie sich aus.
.. note::
Wenn es nach dem Start nicht funktioniert oder eine Fehlermeldung erscheint: \"wiringPi.h: Datei oder Verzeichnis nicht gefunden\", ziehen Sie bitte :ref:`install_wiringpi` zu Rate.
**Code**
.. code-block:: c
#include
#include
#define LedPin 0
#define ButtonPin 1
int main(void){
// When initialize wiring failed, print message to screen
if(wiringPiSetup() == -1){
printf("setup wiringPi failed !");
return 1;
}
pinMode(LedPin, OUTPUT);
pinMode(ButtonPin, INPUT);
digitalWrite(LedPin, HIGH);
while(1){
// Indicate that button has pressed down
if(digitalRead(ButtonPin) == 0){
// Led on
digitalWrite(LedPin, LOW);
// printf("...LED on\n");
}
else{
// Led off
digitalWrite(LedPin, HIGH);
// printf("LED off...\n");
}
}
return 0;
}
**Code-Erklärung**
.. code-block:: c
#define LedPin 0
Pin GPIO17 auf dem T_Extension Board entspricht dem GPIO0 in der
wiringPi.
.. code-block:: c
#define ButtonPin 1
ButtonPin ist mit GPIO1 verbunden.
.. code-block:: c
pinMode(LedPin, OUTPUT);
Legen Sie LedPin als Ausgang fest, um ihm einen Wert zuzuweisen.
.. code-block:: c
pinMode(ButtonPin, INPUT);
Legen Sie ButtonPin als Eingang fest, um den Wert von ButtonPin zu lesen.
.. code-block:: C
while(1){
// Indicate that button has pressed down
if(digitalRead(ButtonPin) == 0){
// Led on
digitalWrite(LedPin, LOW);
// printf("...LED on\n");
}
else{
// Led off
digitalWrite(LedPin, HIGH);
// printf("LED off...\n");
}
}
``if (digitalRead (ButtonPin) == 0)`` : Überprüfen Sie, ob der Knopf
gedrückt wurde. Führen Sie ``digitalWrite(LedPin, LOW)`` aus, wenn der
Knopf gedrückt ist, um die LED einzuschalten.
Die Funktion ``digitalRead()`` dient zum Lesen von HIGH (Hochpegel) oder LOW
(Tiefpegel) des Eingabeparameterpins. Sie gibt 1 zurück, wenn der Pin HIGH ist
und gibt 0 zurück, wenn der Pin LOW ist.
Die Funktion ``digitalWrite()`` dient dazu, HIGH (Hochpegel) oder LOW
(Tiefpegel) an den Eingabeparameterpin zu schreiben.
Phänomen-Bild
--------------------
.. image:: ../img/image153.jpeg