use mbed os

Dependents:   Seeed_Grove_I2C_Touch_Example

Fork of MPR121 by Sam Grove

Committer:
Nathan Yonkee
Date:
Sun Jul 02 14:51:09 2017 -0600
Revision:
23:32fa21a5686d
Parent:
19:eaa64138290b
Child:
25:534ca7bbccf1
take out address from constructor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathan Yonkee 19:eaa64138290b 1 /**
Nathan Yonkee 19:eaa64138290b 2 * @file MPR121.h
Nathan Yonkee 19:eaa64138290b 3 * @brief Device driver - MPR121 capactiive touch IC
Nathan Yonkee 19:eaa64138290b 4 * @author sam grove
Nathan Yonkee 19:eaa64138290b 5 * @version 1.0
Nathan Yonkee 19:eaa64138290b 6 * @see http://cache.freescale.com/files/sensors/doc/data_sheet/MPR121.pdf
Nathan Yonkee 19:eaa64138290b 7 *
Nathan Yonkee 19:eaa64138290b 8 * Copyright (c) 2013
Nathan Yonkee 19:eaa64138290b 9 *
Nathan Yonkee 19:eaa64138290b 10 * Licensed under the Apache License, Version 2.0 (the "License");
Nathan Yonkee 19:eaa64138290b 11 * you may not use this file except in compliance with the License.
Nathan Yonkee 19:eaa64138290b 12 * You may obtain a copy of the License at
Nathan Yonkee 19:eaa64138290b 13 *
Nathan Yonkee 19:eaa64138290b 14 * http://www.apache.org/licenses/LICENSE-2.0
Nathan Yonkee 19:eaa64138290b 15 *
Nathan Yonkee 19:eaa64138290b 16 * Unless required by applicable law or agreed to in writing, software
Nathan Yonkee 19:eaa64138290b 17 * distributed under the License is distributed on an "AS IS" BASIS,
Nathan Yonkee 19:eaa64138290b 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Nathan Yonkee 19:eaa64138290b 19 * See the License for the specific language governing permissions and
Nathan Yonkee 19:eaa64138290b 20 * limitations under the License.
Nathan Yonkee 19:eaa64138290b 21 */
Nathan Yonkee 19:eaa64138290b 22
Nathan Yonkee 19:eaa64138290b 23 #ifndef MPR121_H
Nathan Yonkee 19:eaa64138290b 24 #define MPR121_H
Nathan Yonkee 19:eaa64138290b 25
Nathan Yonkee 19:eaa64138290b 26 #include "mbed.h"
Nathan Yonkee 19:eaa64138290b 27 /* #include "rtos.h"
Nathan Yonkee 19:eaa64138290b 28 */
Nathan Yonkee 19:eaa64138290b 29
Nathan Yonkee 19:eaa64138290b 30 /** Using the Sparkfun SEN-10250 BoB
Nathan Yonkee 19:eaa64138290b 31 *
Nathan Yonkee 19:eaa64138290b 32 * Example:
Nathan Yonkee 19:eaa64138290b 33 * @code
Nathan Yonkee 19:eaa64138290b 34 * #include "mbed.h"
Nathan Yonkee 19:eaa64138290b 35 * #include "MPR121.h"
Nathan Yonkee 19:eaa64138290b 36 *
Nathan Yonkee 19:eaa64138290b 37 * Serial pc(USBTX, USBRX);
Nathan Yonkee 19:eaa64138290b 38 * DigitalOut myled(LED1);
Nathan Yonkee 19:eaa64138290b 39 *
Nathan Yonkee 19:eaa64138290b 40 * #if defined TARGET_LPC1768 || TARGET_LPC11U24
Nathan Yonkee 19:eaa64138290b 41 * I2C i2c(p28, p27);
Nathan Yonkee 19:eaa64138290b 42 * InterruptIn irq(p26);
Nathan Yonkee 19:eaa64138290b 43 * MPR121 touch_pad(i2c, irq, MPR121::ADDR_VSS);
Nathan Yonkee 19:eaa64138290b 44 *
Nathan Yonkee 19:eaa64138290b 45 * #elif defined TARGET_KL25Z
Nathan Yonkee 19:eaa64138290b 46 * I2C i2c(PTC9, PTC8);
Nathan Yonkee 19:eaa64138290b 47 * InterruptIn irq(PTA5);
Nathan Yonkee 19:eaa64138290b 48 * MPR121 touch_pad(i2c, irq, MPR121::ADDR_VSS);
Nathan Yonkee 19:eaa64138290b 49 *
Nathan Yonkee 19:eaa64138290b 50 * #else
Nathan Yonkee 19:eaa64138290b 51 * #error TARGET NOT TESTED
Nathan Yonkee 19:eaa64138290b 52 * #endif
Nathan Yonkee 19:eaa64138290b 53 *
Nathan Yonkee 19:eaa64138290b 54 * int main()
Nathan Yonkee 19:eaa64138290b 55 * {
Nathan Yonkee 19:eaa64138290b 56 * touch_pad.init();
Nathan Yonkee 19:eaa64138290b 57 * touch_pad.enable();
Nathan Yonkee 19:eaa64138290b 58 *
Nathan Yonkee 19:eaa64138290b 59 * while(1)
Nathan Yonkee 19:eaa64138290b 60 * {
Nathan Yonkee 19:eaa64138290b 61 * if(touch_pad.isPressed())
Nathan Yonkee 19:eaa64138290b 62 * {
Nathan Yonkee 19:eaa64138290b 63 * uint16_t button_val = touch_pad.buttonPressed();
Nathan Yonkee 19:eaa64138290b 64 * printf("button = 0x%04x\n", button_val);
Nathan Yonkee 19:eaa64138290b 65 * myled = (button_val>0) ? 1 : 0;
Nathan Yonkee 19:eaa64138290b 66 * }
Nathan Yonkee 19:eaa64138290b 67 * }
Nathan Yonkee 19:eaa64138290b 68 * }
Nathan Yonkee 19:eaa64138290b 69 * @endcode
Nathan Yonkee 19:eaa64138290b 70 */
Nathan Yonkee 19:eaa64138290b 71
Nathan Yonkee 19:eaa64138290b 72 /**
Nathan Yonkee 19:eaa64138290b 73 * @class MPR121
Nathan Yonkee 19:eaa64138290b 74 * @brief API for the MPR121 capacitive touch IC
Nathan Yonkee 19:eaa64138290b 75 */
Nathan Yonkee 19:eaa64138290b 76 class MPR121
Nathan Yonkee 19:eaa64138290b 77 {
Nathan Yonkee 19:eaa64138290b 78 private:
Nathan Yonkee 19:eaa64138290b 79
Nathan Yonkee 19:eaa64138290b 80 I2C *_i2c;
Nathan Yonkee 19:eaa64138290b 81 InterruptIn *_irq;
Nathan Yonkee 19:eaa64138290b 82 uint8_t _i2c_addr;
Nathan Yonkee 19:eaa64138290b 83 volatile uint16_t _button;
Nathan Yonkee 19:eaa64138290b 84 volatile uint32_t _button_has_changed;
Nathan Yonkee 19:eaa64138290b 85
Nathan Yonkee 19:eaa64138290b 86 /** The interrupt handler for the IRQ pin
Nathan Yonkee 19:eaa64138290b 87 */
Nathan Yonkee 19:eaa64138290b 88 void handler(void);
Nathan Yonkee 19:eaa64138290b 89
Nathan Yonkee 19:eaa64138290b 90 public:
Nathan Yonkee 19:eaa64138290b 91
Nathan Yonkee 19:eaa64138290b 92 /**
Nathan Yonkee 19:eaa64138290b 93 * @enum MPR121_ADDR
Nathan Yonkee 19:eaa64138290b 94 * @brief Possible terminations for the ADDR pin
Nathan Yonkee 19:eaa64138290b 95 */
Nathan Yonkee 19:eaa64138290b 96 enum MPR121_ADDR
Nathan Yonkee 19:eaa64138290b 97 {
Nathan Yonkee 19:eaa64138290b 98 ADDR_VSS = 0x1B, /*!< ADDR connected to VSS */
Nathan Yonkee 19:eaa64138290b 99 ADDR_VDD, /*!< ADDR connected to VDD */
Nathan Yonkee 19:eaa64138290b 100 ADDR_SCL, /*!< ADDR connected to SDA */
Nathan Yonkee 19:eaa64138290b 101 ADDR_SDA /*!< ADDR connected to SCL */
Nathan Yonkee 19:eaa64138290b 102 };
Nathan Yonkee 19:eaa64138290b 103
Nathan Yonkee 19:eaa64138290b 104 /**
Nathan Yonkee 19:eaa64138290b 105 * @enum MPR121_REGISTER
Nathan Yonkee 19:eaa64138290b 106 * @brief The device register map
Nathan Yonkee 19:eaa64138290b 107 */
Nathan Yonkee 19:eaa64138290b 108 enum MPR121_REGISTER
Nathan Yonkee 19:eaa64138290b 109 {
Nathan Yonkee 19:eaa64138290b 110 ELE0_7_STAT = 0x00,
Nathan Yonkee 19:eaa64138290b 111 ELE8_11_STAT, ELE0_7_OOR_STAT, ELE8_11_OOR_STAT, EFD0LB, EFD0HB,
Nathan Yonkee 19:eaa64138290b 112 EFD1LB, EFD1HB, EFD2LB, EFD2HB, EFD3LB, EFD3HB, EFD4LB, EFD4HB, EFD5LB, EFD5HB,
Nathan Yonkee 19:eaa64138290b 113
Nathan Yonkee 19:eaa64138290b 114 EFD6LB = 0x10,
Nathan Yonkee 19:eaa64138290b 115 EFD6HB, EFD7LB, EFD7HB, EFD8LB, EFD8HB, EFD9LB, EFD9HB, EFD10LB,
Nathan Yonkee 19:eaa64138290b 116 EFD10HB, EFD11LB, EFD11HB, EFDPROXLB, EFDPROXHB, E0BV, E1BV,
Nathan Yonkee 19:eaa64138290b 117
Nathan Yonkee 19:eaa64138290b 118 E2BV = 0x20,
Nathan Yonkee 19:eaa64138290b 119 E3BV, E4BV, E5BV, E6BV, E7BV, E8BV, E9BV, E10BV, E11BV, EPROXBV,
Nathan Yonkee 19:eaa64138290b 120 MHDR, NHDR, NCLR, FDLR, MHDF,
Nathan Yonkee 19:eaa64138290b 121
Nathan Yonkee 19:eaa64138290b 122 NHDF = 0x30,
Nathan Yonkee 19:eaa64138290b 123 NCLF, FDLF, NHDT, NCLT, FDLT, MHDPROXR, NHDPROXR, NCLPROXR,
Nathan Yonkee 19:eaa64138290b 124 FDLPROXR, MHDPROXF, NHDPROXF, NCLPROXF, FDLPROXF, NHDPROXT, NCLPROXT,
Nathan Yonkee 19:eaa64138290b 125
Nathan Yonkee 19:eaa64138290b 126 FDLPROXT = 0x40,
Nathan Yonkee 19:eaa64138290b 127 E0TTH, E0RTH, E1TTH, E1RTH, E2TTH, E2RTH, E3TTH, E3RTH,
Nathan Yonkee 19:eaa64138290b 128 E4TTH, E4RTH, E5TTH, E5RTH, E6TTH, E6RTH, E7TTH,
Nathan Yonkee 19:eaa64138290b 129
Nathan Yonkee 19:eaa64138290b 130 E7RTH = 0x50,
Nathan Yonkee 19:eaa64138290b 131 E8TTH, E8RTH, E9TTH, E9RTH, E10TTH, E10RTH, E11TTH, E11RTH,
Nathan Yonkee 19:eaa64138290b 132 EPROXTTH, EPROXRTH, DT_DR, CDC_CONFIG, CDT_CONFIG, ECR, CDC0,
Nathan Yonkee 19:eaa64138290b 133
Nathan Yonkee 19:eaa64138290b 134 CDC1 = 0x60,
Nathan Yonkee 19:eaa64138290b 135 CDC2, CDC3, CDC4, CDC5, CDC6, CDC7, CDC8, CDC9, CDC10, CDC11, CDCPROX, CDT0_CDT1,
Nathan Yonkee 19:eaa64138290b 136 CDT2_CDT3, CDT4_CDT5, CDT6_CDT7,
Nathan Yonkee 19:eaa64138290b 137
Nathan Yonkee 19:eaa64138290b 138 CDT8_CDT9 = 0x70,
Nathan Yonkee 19:eaa64138290b 139 CDT10_CDT11, CDTPROX, GPIO_CTRL0, GPIO_CTRL1, GPIO_DATA, GPIO_DIR, GPIO_EN, GPIO_SET,
Nathan Yonkee 19:eaa64138290b 140 GPIO_CLR, GPIO_TOGGLE, AUTO_CFG0, AUTO_CFG1, USL, LSL, TL,
Nathan Yonkee 19:eaa64138290b 141
Nathan Yonkee 19:eaa64138290b 142 SRST = 0x80
Nathan Yonkee 19:eaa64138290b 143 };
Nathan Yonkee 19:eaa64138290b 144
Nathan Yonkee 19:eaa64138290b 145 /** Create the MPR121 object
Nathan Yonkee 19:eaa64138290b 146 * @param i2c - A defined I2C object
Nathan Yonkee 19:eaa64138290b 147 * @param pin - A defined InterruptIn object
Nathan Yonkee 19:eaa64138290b 148 * @param i2c_addr - Connection of the address line
Nathan Yonkee 19:eaa64138290b 149 */
Nathan Yonkee 19:eaa64138290b 150 MPR121(I2C &i2c, InterruptIn &pin, MPR121_ADDR i2c_addr);
Nathan Yonkee 19:eaa64138290b 151
Nathan Yonkee 19:eaa64138290b 152 /** Create the MPR121 object
Nathan Yonkee 19:eaa64138290b 153 * @param i2c - A defined I2C object
Nathan Yonkee 19:eaa64138290b 154 * @param i2c_addr - Connection of the address line
Nathan Yonkee 19:eaa64138290b 155 */
Nathan Yonkee 23:32fa21a5686d 156 MPR121(I2C &i2c);
Nathan Yonkee 19:eaa64138290b 157
Nathan Yonkee 19:eaa64138290b 158 /** Clear state variables and initilize the dependant objects
Nathan Yonkee 19:eaa64138290b 159 */
Nathan Yonkee 19:eaa64138290b 160 void init(void);
Nathan Yonkee 19:eaa64138290b 161
Nathan Yonkee 19:eaa64138290b 162 /** Allow the IC to run and collect user input
Nathan Yonkee 19:eaa64138290b 163 */
Nathan Yonkee 19:eaa64138290b 164 void enable(void);
Nathan Yonkee 19:eaa64138290b 165
Nathan Yonkee 19:eaa64138290b 166 /** Stop the IC and put into low power mode
Nathan Yonkee 19:eaa64138290b 167 */
Nathan Yonkee 19:eaa64138290b 168 void disable(void);
Nathan Yonkee 19:eaa64138290b 169
Nathan Yonkee 19:eaa64138290b 170 /** Determine if a new button press event occured
Nathan Yonkee 19:eaa64138290b 171 * Upon calling the state is cleared until another press is detected
Nathan Yonkee 19:eaa64138290b 172 * @return 1 if a press has been detected since the last call, 0 otherwise
Nathan Yonkee 19:eaa64138290b 173 */
Nathan Yonkee 19:eaa64138290b 174 uint32_t isPressed(void);
Nathan Yonkee 19:eaa64138290b 175
Nathan Yonkee 19:eaa64138290b 176 /** Get the electrode status (ELE12 ... ELE0 -> b15 xxx b11 ... b0
Nathan Yonkee 19:eaa64138290b 177 * The buttons are bit mapped. ELE0 = b0 ... ELE11 = b11 b12 ... b15 undefined
Nathan Yonkee 19:eaa64138290b 178 * @return The state of all buttons
Nathan Yonkee 19:eaa64138290b 179 */
Nathan Yonkee 19:eaa64138290b 180 uint16_t buttonPressed(void);
Nathan Yonkee 19:eaa64138290b 181
Nathan Yonkee 19:eaa64138290b 182 /** print the register map and values to the console
Nathan Yonkee 19:eaa64138290b 183 * @param obj - a Serial object that prints to a console
Nathan Yonkee 19:eaa64138290b 184 */
Nathan Yonkee 19:eaa64138290b 185 void registerDump(Serial &obj) const;
Nathan Yonkee 19:eaa64138290b 186
Nathan Yonkee 19:eaa64138290b 187 /** print the register map and values to the console
Nathan Yonkee 19:eaa64138290b 188 */
Nathan Yonkee 19:eaa64138290b 189 void registerDump(void) const;
Nathan Yonkee 19:eaa64138290b 190
Nathan Yonkee 19:eaa64138290b 191 /** Write to a register (exposed for debugging reasons)
Nathan Yonkee 19:eaa64138290b 192 * Note: most writes are only valid in stop mode
Nathan Yonkee 19:eaa64138290b 193 * @param reg - The register to be written
Nathan Yonkee 19:eaa64138290b 194 * @param data - The data to be written
Nathan Yonkee 19:eaa64138290b 195 */
Nathan Yonkee 19:eaa64138290b 196 void writeRegister(MPR121_REGISTER const reg, uint8_t const data) const;
Nathan Yonkee 19:eaa64138290b 197
Nathan Yonkee 19:eaa64138290b 198 /** Read from a register (exposed for debugging reasons)
Nathan Yonkee 19:eaa64138290b 199 * @param reg - The register to read from
Nathan Yonkee 19:eaa64138290b 200 * @return The register contents
Nathan Yonkee 19:eaa64138290b 201 */
Nathan Yonkee 19:eaa64138290b 202 uint8_t readRegister(MPR121_REGISTER const reg) const;
Nathan Yonkee 19:eaa64138290b 203
Nathan Yonkee 19:eaa64138290b 204 };
Nathan Yonkee 19:eaa64138290b 205
Nathan Yonkee 19:eaa64138290b 206 #endif
Nathan Yonkee 19:eaa64138290b 207