#ifndef SENSOR_MODULE #define SENSOR_MODULE #import // #include "I2C/I2C.cpp" #include #include "mpr121.h" #include "definitions.h" struct Sensor { private: PIN_TYPE interrupt_pin; public: CONST_PIN_TYPE LEFT_ANALOUGE_PIN = 9; CONST_PIN_TYPE RIGHT_ANALOUGE_PIN = 2; Sensor (PIN_TYPE sensor_interrupt_pin) { this->interrupt_pin = sensor_interrupt_pin; } SensorTouched readInput() { // Serial.print("Checking for interrupt on pin: "); // Serial.println(this->interrupt_pin); SensorTouched sensor_touched = SensorTouched(false, false); if (!digitalRead(this->interrupt_pin)) { //read the touch state from the MPR121 Wire.requestFrom(0x5A,2); //I2c.read(0x5A,2); byte LSB = Wire.read(); // I2c.receive(); byte MSB = Wire.read(); // I2c.receive(); uint16_t touched = ((MSB << 8) | LSB); //16bits that make up the touch states // Serial.print("Checking for interrupt. variable touched: "); // Serial.println(touched); // We run the next commented out for loop to check for each pin, // but we already know which pins are possible so no need for the loop /* for (int i=0; i < 12; i++) { // Check what electrodes were pressed if(touched & (1<setupOnce(); initialize_once = true; } } private: void setupOnce(void) { //Serial.print("Setting up sensor on pin: "); //Serial.println(this->interrupt_pin); pinMode(this->interrupt_pin, INPUT); digitalWrite(this->interrupt_pin, HIGH); //enable pullup resistor Wire.begin(); // I2c.begin(); // I2c.timeOut(3000); //Serial.println("Setting 0x00 register"); set_register(0x5A, ELE_CFG, 0x00); //Serial.println("Setting Section A"); // Section A - Controls filtering when data is > baseline. set_register(0x5A, MHD_R, 0x01); set_register(0x5A, NHD_R, 0x01); set_register(0x5A, NCL_R, 0x00); set_register(0x5A, FDL_R, 0x00); //Serial.println("Setting Section B"); // Section B - Controls filtering when data is < baseline. set_register(0x5A, MHD_F, 0x01); set_register(0x5A, NHD_F, 0x01); set_register(0x5A, NCL_F, 0xFF); set_register(0x5A, FDL_F, 0x02); // Section C - Sets touch and release thresholds for each electrode // #define NEW_TOU_THRESH TOU_THRESH // 0x10 // #define NEW_REL_THRESH REL_THRESH // 0x02 #define NEW_TOU_THRESH 0x09 #define NEW_REL_THRESH 0x35 set_register(0x5A, ELE0_T, NEW_TOU_THRESH); set_register(0x5A, ELE0_R, NEW_REL_THRESH); set_register(0x5A, ELE1_T, NEW_TOU_THRESH); set_register(0x5A, ELE1_R, NEW_REL_THRESH); set_register(0x5A, ELE2_T, NEW_TOU_THRESH); set_register(0x5A, ELE2_R, NEW_REL_THRESH); set_register(0x5A, ELE3_T, NEW_TOU_THRESH); set_register(0x5A, ELE3_R, NEW_REL_THRESH); set_register(0x5A, ELE4_T, NEW_TOU_THRESH); set_register(0x5A, ELE4_R, NEW_REL_THRESH); set_register(0x5A, ELE5_T, NEW_TOU_THRESH); set_register(0x5A, ELE5_R, NEW_REL_THRESH); set_register(0x5A, ELE6_T, NEW_TOU_THRESH); set_register(0x5A, ELE6_R, NEW_REL_THRESH); set_register(0x5A, ELE7_T, NEW_TOU_THRESH); set_register(0x5A, ELE7_R, NEW_REL_THRESH); set_register(0x5A, ELE8_T, NEW_TOU_THRESH); set_register(0x5A, ELE8_R, NEW_REL_THRESH); #define NEW_TOU_THRESH_SPECIAL 0x01 #define NEW_REL_THRESH_SPECIAL 0x35 set_register(0x5A, ELE9_T, NEW_TOU_THRESH_SPECIAL); set_register(0x5A, ELE9_R, NEW_REL_THRESH_SPECIAL); set_register(0x5A, ELE10_T, NEW_TOU_THRESH); set_register(0x5A, ELE10_R, NEW_REL_THRESH); set_register(0x5A, ELE11_T, NEW_TOU_THRESH); set_register(0x5A, ELE11_R, NEW_REL_THRESH); //Serial.println("Setting Section D"); // Section D // Set the Filter Configuration // Set ESI2 set_register(0x5A, FIL_CFG, 0x04); // Section E // Electrode Configuration // Set ELE_CFG to 0x00 to return to standby mode set_register(0x5A, ELE_CFG, 0x0C); // Enables all 12 Electrodes // Section F // Enable Auto Config and auto Reconfig /*set_register(0x5A, ATO_CFG0, 0x0B); set_register(0x5A, ATO_CFGU, 0xC9); // USL = (Vdd-0.7)/vdd*256 = 0xC9 @3.3V set_register(0x5A, ATO_CFGL, 0x82); // LSL = 0.65*USL = 0x82 @3.3V set_register(0x5A, ATO_CFGT, 0xB5);*/ // Target = 0.9*USL = 0xB5 @3.3V set_register(0x5A, ELE_CFG, 0x0C); } void set_register(int address, unsigned char r, unsigned char v) { // Serial.println("Beginnig transimittion"); Wire.beginTransmission(address); //Serial.print("Writing r:"); Wire.write(r); //Serial.println( I2c.write((uint8_t)address, r) ); //Serial.print("Writing v: "); Wire.write(v); //Serial.println( I2c.write((uint8_t)address, v) ); //Serial.println("ending transimittion"); Wire.endTransmission(); } }; #endif