.. 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 Button ================= Einführung ----------------- In dieser Lektion lernen wir, wie Sie die LED mit einer Taste ein- oder ausschalten. Komponenten --------------- .. image:: media/list_2.1.1_Button.png Prinzip ------------- **Taste** Die Taste ist eine übliche Komponente zur Steuerung elektronischer Geräte. Es wird normalerweise als Schalter zum Anschließen oder Unterbrechen von Stromkreisen verwendet. Obwohl die Tasten in verschiedenen Größen und Formen erhältlich sind, wird hier ein 6-mm-Miniknopf verwendet, wie in den folgenden Bildern gezeigt. Zwei Pins auf der linken Seite sind verbunden, und der eine auf der rechten Seite ähnelt dem linken, der unten gezeigt wird: .. image:: media/image148.png :width: 400 :align: center Das unten gezeigte Symbol wird normalerweise verwendet, um eine Schaltfläche in Schaltkreisen darzustellen. .. image:: media/image301.png :width: 400 :align: center Wenn die Taste gedrückt wird, werden die 4 Pins verbunden, wodurch der Stromkreis geschlossen wird. Schematische Darstellung --------------------------------- Verwenden Sie eine normalerweise geöffnete Taste als Eingang für Raspberry Pi. Die Verbindung ist in der folgenden schematischen Darstellung dargestellt. Wenn die Taste gedrückt wird, wird der GPIO18 auf einen niedrigen Niveau (0V) eingestellt. Wir können den Zustand des GPIO18 durch Programmierung erkennen. Das heißt, wenn der GPIO18 auf einen niedrigen Niveau wechselt, bedeutet dies, dass die Taste gedrückt wird. Sie können den entsprechenden Kode ausführen, wenn die Taste 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:: media/image302.png :width: 600 :align: center .. image:: media/image303.png :width: 400 :align: center Experimentelle Verfahren --------------------------- Schritt 1: Bauen Sie die Schaltung auf. .. image:: media/image152.png :width: 800 Für Benutzer in C-Sprache ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Schritt 2: Öffnen Sie die Kodedatei. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/2.1.1/ .. note:: Wechseln Sie in diesem Experiment in den Pfad der Kode mit ``cd``. 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 die Taste, die LED leuchtet auf; andernfalls erlischt. **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:: #define LedPin 0 Der Pin GPIO17 in der T_Extension-Karte entspricht dem GPIO0 im wiringPi. .. code-block:: #define ButtonPin 1 ButtonPin ist mit GPIO1 verbunden. .. code-block:: pinMode(LedPin, OUTPUT); Stellen Sie LedPin als Ausgabe ein, um ihm einen Wert zuzuweisen. .. code-block:: pinMode(ButtonPin, INPUT); Legen Sie ButtonPin als Eingabe 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 die Taste gedrückt wurde. Führen Sie ``digitalWrite(LedPin, LOW)`` aus, wenn die Taste gedrückt wird, um die LED zu leuchten. Für Python-Sprachbenutzer ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Schritt 2: Öffnen Sie die Kodedatei. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python Schritt 3: Führen Sie die Kode aus. .. raw:: html .. code-block:: sudo python3 2.1.1_Button.py Drücken Sie nun die Taste und die LED leuchtet auf. Drücken Sie die Taste erneut und die LED erlischt. Gleichzeitig wird der Status der LED auf dem Bildschirm gedruckt. **Code** .. note:: Sie können den folgenden Code **Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen** . Zuvor müssen Sie jedoch zu einem Quellcodepfad wie ``davinci-kit-for-raspberry-pi/python`` gehen. .. raw:: html .. code-block:: python import RPi.GPIO as GPIO import time LedPin = 17 # Set GPIO17 as LED pin BtnPin = 18 # Set GPIO18 as button pin Led_status = True # Set Led status to True(OFF) # Define a setup function for some setup def setup(): # Set the GPIO modes to BCM Numbering GPIO.setmode(GPIO.BCM) GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH) # Set LedPin's mode to output, and initial level to high (3.3v) GPIO.setup(BtnPin, GPIO.IN) # Set BtnPin's mode to input. # Define a callback function for button callback def swLed(ev=None): global Led_status # Switch led status(on-->off; off-->on) Led_status = not Led_status GPIO.output(LedPin, Led_status) if Led_status: print ('LED OFF...') else: print ('...LED ON') # Define a main function for main process def main(): # Set up a falling detect on BtnPin, # and callback function to swLed GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=swLed) while True: # Don't do anything. time.sleep(1) # Define a destroy function for clean up everything after # the script finished def destroy(): # Turn off LED GPIO.output(LedPin, GPIO.HIGH) # Release resource GPIO.cleanup() # If run this script directly, do: if __name__ == '__main__': setup() try: main() # When 'Ctrl+C' is pressed, the program # destroy() will be executed. except KeyboardInterrupt: destroy() **Code Erklärung** .. code-block:: python LedPin = 17 Stellen Sie GPIO17 als LED-Pin ein. .. code-block:: python BtnPin = 18 Stellen Sie GPIO18 als Tasten Pin ein. .. code-block:: python GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=swLed) Richten Sie eine Fallerkennung für ``BtnPin`` ein. Wenn sich der Wert von ``BtnPin`` von einem hohen auf einen niedrigen Wert ändert, bedeutet dies, dass die Taste gedrückt wird. Der nächste Schritt ist das Aufrufen der Funktion ``swled`` . .. code-block:: python def swLed(ev=None): global Led_status # Switch led status(on-->off; off-->on) Led_status = not Led_status GPIO.output(LedPin, Led_status) Definieren Sie eine Rückruffunktion als Tastenrückruf. Wenn die Taste beim ersten Mal gedrückt wird und die Bedingung, nicht Led_status, falsch ist, wird die Funktion ``GPIO.output()`` aufgerufen, um die LED zu beleuchten. Wenn die Taste erneut gedrückt wird, wird der Status der LED von falsch in wahr umgewandelt, sodass die LED erlischt. Phänomen Bild ------------------------ .. image:: media/image153.jpeg