Nota
Ciao, benvenuto nella community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Esplora più a fondo Raspberry Pi, Arduino ed ESP32 con altri appassionati.
Perché unirsi a noi?
Supporto esperto: Risolvi problemi post-vendita e sfide tecniche grazie al supporto della nostra community e del nostro team.
Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni l’accesso anticipato a nuovi annunci di prodotto e anteprime.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e omaggi: Partecipa a giveaway e promozioni durante le festività.
👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!
2.24 Modulo MPR121
Panoramica
In questa lezione imparerai a utilizzare il modulo MPR121. È un’ottima opzione quando vuoi aggiungere molti interruttori touch al tuo progetto. Gli elettrodi del MPR121 possono essere estesi con un conduttore. Ad esempio, collegando un filo a una banana, puoi trasformare la banana in un interruttore touch, permettendo la realizzazione di progetti come il pianoforte di frutta.
Componenti necessari
Circuito Fritzing
In questo esempio, inseriamo il MPR121 nella breadboard. Colleghiamo il GND del MPR121 al GND, 3.3V al pin 3V3, IRQ al pin digitale 2, SCL al pin SCL (21) e SDA al pin SDA (20). Ci sono 12 elettrodi per il rilevamento touch. Nota: il MPR121 è alimentato da 3.3V, non da 5V.
Schema elettrico
Codice
Nota
Puoi aprire direttamente il file
2.24_mpr121.inonella cartellasunfounder_vincent_kit_for_arduino\code\2.24_mpr121.La libreria
Adafruit MPR121viene utilizzata qui; puoi installarla dal Library Manager.
Dopo aver caricato il codice sulla scheda Mega2560, lo stato touch dei pin del MPR121, rappresentato dai valori 「1」e「0」, verrà registrato in un array booleano a 12 bit e stampato sul monitor seriale.
Analisi del codice
Questo codice facilita la comunicazione e l’operatività del sensore touch MPR121. È in grado di rilevare lo stato degli elettrodi touch e stampare informazioni sugli elettrodi toccati o rilasciati nell’interfaccia seriale. Se sono richiesti dati dettagliati del sensore, è possibile sbloccare il relativo codice.
Ecco un’analisi del codice:
Importa librerie:
#include <Wire.h> #include "Adafruit_MPR121.h"
Wire.h: Utilizzata per la comunicazione I2C.Adafruit_MPR121.h: Libreria Adafruit per operare con il sensore touch MPR121.
Definisce la macro
_BV:#ifndef _BV #define _BV(bit) (1 << (bit)) #endif
_BV(bit)converte un dato bit nel corrispondente valore binario.Inizializza un’istanza della classe
Adafruit_MPR121:Adafruit_MPR121 cap = Adafruit_MPR121();
Crea un’istanza della classe Adafruit_MPR121 denominata cap. L’oggetto cap verrà utilizzato per comunicare e operare con il sensore touch MPR121.
Funzione
setup():Inizializza la comunicazione seriale a un baud rate di 9600, quindi inizializza il sensore touch MPR121 con l’indirizzo I2C predefinito di 0x5A. Se l’inizializzazione fallisce, stampa un messaggio di errore e entra in un ciclo infinito.
void setup() { Serial.begin(9600); while (!Serial) { // necessario per evitare che leonardo/micro partano troppo velocemente! delay(10); } Serial.println("Test sensore touch capacitivo Adafruit MPR121"); // L'indirizzo predefinito è 0x5A; se collegato a 3.3V diventa 0x5B // Se collegato a SDA diventa 0x5C e a SCL diventa 0x5D if (!cap.begin(0x5A)) { Serial.println("MPR121 not found, check wiring?"); while (1); } Serial.println("MPR121 found!"); }
Funzione
loop():Ottieni lo stato corrente del touch, restituito come un intero a 16 bit.
currtouched = cap.touched();
Itera lo stato dei 12 elettrodi (numerati da 0 a 11).
for (uint8_t i=0; i<12; i++) { // se è stato toccato e non lo era prima, avvisa! if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) { Serial.print(i); Serial.println(" touched"); } // se era toccato e ora non lo è più, avvisa! if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) { Serial.print(i); Serial.println(" released"); } }
Se un elettrodo è toccato e non lo era prima, stampa «x toccato», dove x è il numero dell’elettrodo.
Se un elettrodo era toccato prima ma ora non lo è, stampa «x rilasciato».
Aggiorna
lasttouchedper memorizzare lo stato touch corrente e confrontarlo nella prossima iterazione.lasttouched = currtouched;
Informazioni di debug (sezione opzionale):
// informazioni di debug 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(); // aggiungi un ritardo per evitare sovraccarichi delay(100);
Immagine del risultato