Arduino & Adafruit Capacitive Sensor
Revision as of 12:04, 13 January 2023 by Annasa (talk | contribs) (Annasa moved page Adafruit Cap 1188 Capacitive Sensor to Arduino & Adafruit Capacitive Sensor)
/***************************************************
This is a library for the CAP1188 I2C/SPI 8-chan Capacitive Sensor
Designed specifically to work with the CAP1188 sensor from Adafruit
----> https://www.adafruit.com/products/1602
These sensors use I2C/SPI to communicate, 2+ pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_CAP1188.h>
// Reset Pin is used for I2C or SPI
#define CAP1188_RESET 9
// CS pin is used for software or hardware SPI
//#define CAP1188_CS 10
// These are defined for software SPI, for hardware SPI, check your
// board's SPI pins in the Arduino documentation
//#define CAP1188_MOSI 11
//#define CAP1188_MISO 12
//#define CAP1188_CLK 13
#define CAP1188_SENSITIVITY 0x1F
// For I2C, connect SDA to your Arduino's SDA pin, SCL to SCL pin
// On UNO/Duemilanove/etc, SDA == Analog 4, SCL == Analog 5
// On Leonardo/Micro, SDA == Digital 2, SCL == Digital 3
// On Mega/ADK/Due, SDA == Digital 20, SCL == Digital 21
// Use I2C, no reset pin!
Adafruit_CAP1188 cap = Adafruit_CAP1188();
// Or...Use I2C, with reset pin
//Adafruit_CAP1188 cap = Adafruit_CAP1188(CAP1188_RESET);
// Or... Hardware SPI, CS pin & reset pin
// Adafruit_CAP1188 cap = Adafruit_CAP1188(CAP1188_CS, CAP1188_RESET);
// Or.. Software SPI: clock, miso, mosi, cs, reset
//Adafruit_CAP1188 cap = Adafruit_CAP1188(CAP1188_CLK, CAP1188_MISO, CAP1188_MOSI, CAP1188_CS, CAP1188_RESET);
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo/Micro only
}
Serial.println("CAP1188 test!");
// Initialize the sensor, if using i2c you can pass in the i2c address
// if (!cap.begin(0x28)) {
if (!cap.begin()) {
Serial.println("CAP1188 not found");
while (1);
}
Serial.println("CAP1188 found!");
//Decrease sensitivity a little - default is 0x2F (32x) per datasheet
//cap.writeRegister(CAP1188_SENSITIVITY, 0x3F); // 16x sensitivity
//cap.writeRegister(CAP1188_SENSITIVITY, 0x4F); // 8x sensitivity
//cap.writeRegister(CAP1188_SENSITIVITY, 0x5F); // 4x sensitivity
cap.writeRegister(CAP1188_SENSITIVITY, 0x6F); // 2x sensitivity THIS SEEMS TO WORK THE BEST FOR 3.5" plate sensors
//cap.writeRegister(CAP1188_SENSITIVITY, 0x7F); // 1x sensitivity
//Serial.print("Sensitivity: 0x");
//Serial.println(cap.readRegister(CAP1188_SENSITIVITY), HEX);
}
void loop() {
uint8_t touched = cap.touched();
if (touched == 0) {
// No touch detected
return;
}
for (uint8_t i=0; i<8; i++) { // Check each bit, each bit represents 1 sensor
if (touched & (1 << i)) {
Serial.print("C"); Serial.print(i+1); Serial.print("\t");
}
}
Serial.println();
delay(50);
}