Bemerkung
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 [hier] und treten Sie heute bei!
2.24 MPR121-Modul
Überblick
In dieser Lektion lernen Sie, wie Sie MPR121 verwenden. Dies ist eine gute Option, wenn Sie Ihrem Projekt viele Berührungsschalter hinzufügen möchten. Die Elektrode des MPR121 kann mit einem Leiter verlängert werden. Wenn Sie einen Draht mit einer Banane verbinden, können Sie die Banane in einen Berührungsschalter verwandeln und so Projekte wie ein Fruchtklavier realisieren.
Erforderliche Komponenten
Fritzing-Schaltung
In diesem Beispiel setzen wir MPR121 in das Steckbrett ein. Verbinden Sie GND von MPR121 mit GND, 3,3 V mit 3 V3, IRQ mit dem digitalen Pin 2, SCL mit Pin SCL (21) und SDA mit Pin SDA (20). Es gibt 12 Elektroden für die Berührungserkennung. Hinweis: Der MPR121 wird mit 3.3V versorgt, nicht mit 5V.
Schematische Darstellung
Code
Bemerkung
Sie können die Datei
2.24_mpr121.ino
unter dem Pfadsunfounder_vincent_kit_for_arduino\code\2.24_mpr121
direkt öffnen.Oder kopieren Sie diesen Code in Arduino IDE.
Die Bibliothek
Adafruit MPR121
wird hier verwendet. Sie können sie über den Library Manager installieren.
Nach dem Hochladen der Codes auf die Mega2560-Platine wird der Berührungszustand der Pins von MPR121 「1」 und 「0」 in einem booleschen 12-Bit-Array aufgezeichnet, das auf dem seriellen Monitor gedruckt wird.
Code-Analyse
Dieser Code ermöglicht die Kommunikation und den Betrieb des MPR121-Touchsensors. Er kann den Status von Berührungselektroden erkennen und Informationen über berührte oder freigegebene Elektroden an der seriellen Schnittstelle ausgeben. Falls detaillierte Sensordaten erforderlich sind, kann der entsprechende Code auskommentiert werden.
Hier eine Analyse des Codes:
Bibliotheken importieren:
#include <Wire.h> #include "Adafruit_MPR121.h"
Wire.h
: Wird für die I2C-Kommunikation verwendet.Adafruit_MPR121.h
: Adafruits MPR121-Bibliothek zum Betreiben des MPR121-Touchsensors.
Das
_BV
Makro definieren:#ifndef _BV #define _BV(bit) (1 << (bit)) #endif
_BV(bit)
definiert ein Makro, das ein gegebenes Bit in den entsprechenden Binärwert umwandelt, ähnlich 1 << bit.Instanz der Klasse
Adafruit_MPR121
initialisieren:Adafruit_MPR121 cap = Adafruit_MPR121();
Eine Instanz der Klasse
Adafruit_MPR121
namenscap
erstellen. Das Objektcap
wird verwendet, um mit dem MPR121-Touchsensor zu kommunizieren und ihn zu betreiben.Funktion
setup()
:Serielle Kommunikation mit einer Baudrate von 9600 initialisieren. Anschließend den MPR121-Touchsensor mit der Standard-I2C-Adresse 0x5A initialisieren. Falls die Initialisierung fehlschlägt, eine Fehlermeldung ausgeben und eine Endlosschleife starten.
void setup() { Serial.begin(9600); while (!Serial) { delay(10); } Serial.println("Adafruit MPR121 Capacitive Touch sensor test"); if (!cap.begin(0x5A)) { Serial.println("MPR121 nicht gefunden, Verkabelung überprüfen?"); while (1); } Serial.println("MPR121 gefunden!");
Funktion
loop()
:Den aktuellen Berührungsstatus abrufen, der als 16-Bit-Integer zurückgegeben wird.
currtouched = cap.touched();
Durch den Status von 12 Elektroden iterieren (nummeriert von 0 bis 11).
for (uint8_t i=0; i<12; i++) { if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) { Serial.print(i); Serial.println(" berührt"); } if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) { Serial.print(i); Serial.println(" freigegeben"); } }
Wenn eine Elektrode berührt wird und vorher nicht berührt wurde,
x touched
ausgeben, wobei x die Elektrodennummer ist.Wenn eine Elektrode zuvor berührt wurde, aber jetzt nicht mehr berührt wird,
x released
ausgeben.
lasttouched
aktualisieren, um den aktuellen Berührungsstatus für den Vergleich in der nächsten Iteration zu speichern.lasttouched = currtouched;
Debug-Informationen (Optional):
Serial.print("\t\t\t\t\t\t\t\t\t\t\t\t\t 0x"); Serial.println(cap.touched(), HEX); Serial.print("Filt: "); for (uint8_t i=0; i<12; i++) { Serial.print(cap.filteredData(i)); Serial.print("\t"); } Serial.println(); Serial.print("Base: "); for (uint8_t i=0; i<12; i++) { Serial.print(cap.baselineData(i)); Serial.print("\t"); } Serial.println(); // Verzögerung einfügen, um nicht zu überwältigen delay(100);