use mbed os

Dependents:   Seeed_Grove_I2C_Touch_Example

Fork of MPR121 by Sam Grove

Committer:
Nate Yonkee
Date:
Thu Jun 29 11:03:25 2017 -0600
Revision:
9:8cb5ce483be3
Parent:
8:870059a44bfc
Child:
11:ad26c0810f02
Child:
14:6bcd2f6a4fee
autoformat with astyle

Who changed what in which revision?

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