boolean Adafruit_MPR121::begin(uint8_t i2caddr) {
  Wire.begin();
    
  _i2caddr = i2caddr;

  // soft reset
  writeRegister(MPR121_SOFTRESET, 0x63);
  delay(1);
  for (uint8_t i=0; i<0x7F; i++) {
  //  Serial.print("$"); Serial.print(i, HEX); 
  //  Serial.print(": 0x"); Serial.println(readRegister8(i));
  }
  

  writeRegister(MPR121_ECR, 0x0);

  uint8_t c = readRegister8(MPR121_CONFIG2);
  
  if (c != 0x24) return false;


  setThreshholds(48,6); //(12, 6);  // ylh: THIS IS THE THRESHOLDS FOR ALL KEYS
  
  writeRegister(MPR121_MHDR, 0x01);
  writeRegister(MPR121_NHDR, 0x01);
  writeRegister(MPR121_NCLR, 0x0E);
  writeRegister(MPR121_FDLR, 0x00);

  writeRegister(MPR121_MHDF, 0x01);
  writeRegister(MPR121_NHDF, 0x05);
  writeRegister(MPR121_NCLF, 0x01);
  writeRegister(MPR121_FDLF, 0x00);

  writeRegister(MPR121_NHDT, 0x00);
  writeRegister(MPR121_NCLT, 0x00);
  writeRegister(MPR121_FDLT, 0x00);

  writeRegister(MPR121_DEBOUNCE, 0);
  writeRegister(MPR121_CONFIG1, 0x10); // default, 16uA charge current
  writeRegister(MPR121_CONFIG2, 0x20); // 0.5uS encoding, 1ms period

//  writeRegister(MPR121_AUTOCONFIG0, 0x8F);

//  writeRegister(MPR121_UPLIMIT, 150);
//  writeRegister(MPR121_TARGETLIMIT, 100); // should be ~400 (100 shifted)
//  writeRegister(MPR121_LOWLIMIT, 50);
  // enable all electrodes
  writeRegister(MPR121_ECR, 0x8F);  // start with first 5 bits of baseline tracking

  return true;
}
Beispiel #2
0
boolean Adafruit_MPR121::begin(uint8_t i2caddr) {
  Wire.begin();
    
  _i2caddr = i2caddr;

  // soft reset
  writeRegister(MPR121_SOFTRESET, 0x63);
  delay(1);
  for (uint8_t i=0; i<0x7F; i++) {
  //  Serial.print("$"); Serial.print(i, HEX); 
  //  Serial.print(": 0x"); Serial.println(readRegister8(i));
  }
  
  writeRegister(MPR121_ECR, 0x0);

  uint8_t c = readRegister8(MPR121_CONFIG2);
  
  if (c != 0x24) return false;

  if (tweak_thresh == 1) 
    setThreshholds(13, 1); //13, 1
  else
    setThreshholds(12, 6);

    if (tweak_FLDR == 1) 
    writeRegister(MPR121_FDLR, 0x05); //05
  else
    writeRegister(MPR121_FDLR, 0x00);

    if (tweak_MHDR == 1)
      writeRegister(MPR121_MHDR, 0x03); //0x03
    else
      writeRegister(MPR121_MHDR, 0x01);

    if (tweak_NHDR == 1)
      writeRegister(MPR121_NHDR, 0x10); //10
    else
      writeRegister(MPR121_NHDR, 0x01);

    if (tweak_NCLR == 1)
      writeRegister(MPR121_NCLR, 0x15); //15
    else
      writeRegister(MPR121_NCLR, 0x0E);
   
  //maximum half delta (MHD): Determines the largest magnitude of variation to 
  //pass through the baseline filter. The range of the effective value is 1~63
  if (tweak_MHDF == 1) 
    writeRegister(MPR121_MHDF, 0x03); //0x03
  else
    writeRegister(MPR121_MHDF, 0x01);

  /*Noise  Half  Delta (NHD): Determines  the  incremental  change  when  non - noise  drift  is  detected.  The  range  of  the  effective  value is 1~63.   */
  if (tweak_NHDF == 1) 
    writeRegister(MPR121_NHDF, 0x10); //10
  else
    writeRegister(MPR121_NHDF, 0x05);

  /*Noise  Count  Limit (NCL): Determines  the  number  of  samples  consecutively  greater  than  the  Max  Half  Delta  necessary before it can be determined that it is non-noise. The range of the effective value is 0~255 */
  if (tweak_NCLF == 1) 
    writeRegister(MPR121_NCLF, 0xb4); //0xb4
  else
    writeRegister(MPR121_NCLF, 0x01);

  /*Filter  Delay  Count  Limit (FDL): Determines the rate of operation of the filter. A larger number makes it operate slower. The range of the effective value is 0~255 */
  if (tweak_FDLF == 1) 
    writeRegister(MPR121_FDLF, 0xFF); //30
  else
    writeRegister(MPR121_FDLF, 0x00);

  if (tweak_NHDT == 1) 
    writeRegister(MPR121_NHDT, 0x01); //03
  else
    writeRegister(MPR121_NHDT, 0x00);

  if (tweak_NCLT == 1) 
    writeRegister(MPR121_NCLT, 0x30); //30
  else
    writeRegister(MPR121_NCLT, 0x00);

  if (tweak_FDLT == 1) 
    writeRegister(MPR121_FDLT, 0x3F); //10
  else
    writeRegister(MPR121_FDLT, 0x00);
  
if (tweak_debounce == 1) 
  writeRegister(MPR121_DEBOUNCE, 0x01); //01
 else
   writeRegister(MPR121_DEBOUNCE, 0x00);

 writeRegister(MPR121_CONFIG1, 0x10); // default, 16uA charge current
 writeRegister(MPR121_CONFIG2, 0x20); // 0.5uS encoding, 1ms period
 
 //  writeRegister(MPR121_AUTOCONFIG0, 0x8F);
 
 //writeRegister(MPR121_UPLIMIT, 150);
 //writeRegister(MPR121_TARGETLIMIT, 120); // should be ~400 (100 shifted)
 //writeRegister(MPR121_LOWLIMIT, 50);
  
  // enable all electrodes
  writeRegister(MPR121_ECR, 0x8F);  // start with first 5 bits of baseline tracking

  return true;
}