/* calibrateCapacitors() - This function calibrates each of the RGB and C capacitor registers. */ void SoftADJDS311::calibrateCapacitors(){ int calibrationRed = 0; int calibrationBlue = 0; int calibrationGreen = 0; int calibrated = 0; //need to store detect better calibration int oldDiff = 5000; while (!calibrated){ // sensor gain setting (Avago app note 5330) // CAPs are 4bit (higher value will result in lower output) writeRegister(calibrationRed, CAP_RED); writeRegister(calibrationGreen, CAP_GREEN); writeRegister(calibrationBlue, CAP_BLUE); // int colorGain = _calibrateColorGain(); int colorGain = readRegisterInt(INT_RED_LO); writeInt(INT_RED_LO, colorGain); writeInt(INT_GREEN_LO, colorGain); writeInt(INT_BLUE_LO, colorGain); int maxRead = 0; int minRead = 4096; int red = 0; int green = 0; int blue = 0; for (int i=0; i<4 ;i ++) { performMeasurement(); red += readRegisterInt(DATA_RED_LO); green += readRegisterInt(DATA_GREEN_LO); blue += readRegisterInt(DATA_BLUE_LO); } red /= 4; green /= 4; blue /= 4; maxRead = max(maxRead, red); maxRead = max(maxRead, green); maxRead = max(maxRead, blue); minRead = min(minRead, red); minRead = min(minRead, green); minRead = min(minRead, blue); int diff = maxRead - minRead; if (oldDiff != diff) { if ((maxRead==red) && (calibrationRed<15)) calibrationRed++; else if ((maxRead == green) && (calibrationGreen<15)) calibrationGreen++; else if ((maxRead == blue) && (calibrationBlue<15)) calibrationBlue++; Serial.print("Rcap: "); Serial.println(calibrationRed); Serial.print("Gcap: "); Serial.println(calibrationGreen); Serial.print("Bcap: "); Serial.println(calibrationBlue); } else calibrated = 1; oldDiff=diff; int rCal = calibrationRed; int gCal = calibrationGreen; int bCal = calibrationBlue; } }
void perform_action(){ performMeasurement(); }