diff --git a/Adafruit_VEML6046.cpp b/Adafruit_VEML6046.cpp index a7af339..514b3af 100644 --- a/Adafruit_VEML6046.cpp +++ b/Adafruit_VEML6046.cpp @@ -410,9 +410,9 @@ float Adafruit_VEML6046::calculateLux(uint16_t green_count) { veml6046_integration_time_t it = getIntegrationTime(); veml6046_gain_t gain = getRGBGain(); bool half_pd = getPhotoDiodeHalfSize(); - + float resolution = 0.0; - + // Resolution table from datasheet (lx/cnt) // TABLE 13 - 2/2 PD USED, TABLE 14 - 1/2 PD USED if (half_pd) { @@ -420,138 +420,266 @@ float Adafruit_VEML6046::calculateLux(uint16_t green_count) { switch (it) { case VEML6046_IT_400MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0105; break; - case VEML6046_GAIN_1X: resolution = 0.0210; break; - case VEML6046_GAIN_0_66X: resolution = 0.0318; break; - case VEML6046_GAIN_0_5X: resolution = 0.0420; break; + case VEML6046_GAIN_2X: + resolution = 0.0105; + break; + case VEML6046_GAIN_1X: + resolution = 0.0210; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.0318; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.0420; + break; } break; case VEML6046_IT_200MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0210; break; - case VEML6046_GAIN_1X: resolution = 0.0420; break; - case VEML6046_GAIN_0_66X: resolution = 0.0636; break; - case VEML6046_GAIN_0_5X: resolution = 0.0840; break; + case VEML6046_GAIN_2X: + resolution = 0.0210; + break; + case VEML6046_GAIN_1X: + resolution = 0.0420; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.0636; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.0840; + break; } break; case VEML6046_IT_100MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0420; break; - case VEML6046_GAIN_1X: resolution = 0.0840; break; - case VEML6046_GAIN_0_66X: resolution = 0.1273; break; - case VEML6046_GAIN_0_5X: resolution = 0.1680; break; + case VEML6046_GAIN_2X: + resolution = 0.0420; + break; + case VEML6046_GAIN_1X: + resolution = 0.0840; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.1273; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.1680; + break; } break; case VEML6046_IT_50MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0840; break; - case VEML6046_GAIN_1X: resolution = 0.1680; break; - case VEML6046_GAIN_0_66X: resolution = 0.2545; break; - case VEML6046_GAIN_0_5X: resolution = 0.3360; break; + case VEML6046_GAIN_2X: + resolution = 0.0840; + break; + case VEML6046_GAIN_1X: + resolution = 0.1680; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.2545; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.3360; + break; } break; case VEML6046_IT_25MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.1680; break; - case VEML6046_GAIN_1X: resolution = 0.3360; break; - case VEML6046_GAIN_0_66X: resolution = 0.5091; break; - case VEML6046_GAIN_0_5X: resolution = 0.6720; break; + case VEML6046_GAIN_2X: + resolution = 0.1680; + break; + case VEML6046_GAIN_1X: + resolution = 0.3360; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.5091; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.6720; + break; } break; case VEML6046_IT_12_5MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.3360; break; - case VEML6046_GAIN_1X: resolution = 0.6720; break; - case VEML6046_GAIN_0_66X: resolution = 1.0182; break; - case VEML6046_GAIN_0_5X: resolution = 1.3440; break; + case VEML6046_GAIN_2X: + resolution = 0.3360; + break; + case VEML6046_GAIN_1X: + resolution = 0.6720; + break; + case VEML6046_GAIN_0_66X: + resolution = 1.0182; + break; + case VEML6046_GAIN_0_5X: + resolution = 1.3440; + break; } break; case VEML6046_IT_6_25MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.6720; break; - case VEML6046_GAIN_1X: resolution = 1.3440; break; - case VEML6046_GAIN_0_66X: resolution = 2.0364; break; - case VEML6046_GAIN_0_5X: resolution = 2.6880; break; + case VEML6046_GAIN_2X: + resolution = 0.6720; + break; + case VEML6046_GAIN_1X: + resolution = 1.3440; + break; + case VEML6046_GAIN_0_66X: + resolution = 2.0364; + break; + case VEML6046_GAIN_0_5X: + resolution = 2.6880; + break; } break; case VEML6046_IT_3_125MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 1.3440; break; - case VEML6046_GAIN_1X: resolution = 2.6880; break; - case VEML6046_GAIN_0_66X: resolution = 4.0727; break; - case VEML6046_GAIN_0_5X: resolution = 5.3760; break; + case VEML6046_GAIN_2X: + resolution = 1.3440; + break; + case VEML6046_GAIN_1X: + resolution = 2.6880; + break; + case VEML6046_GAIN_0_66X: + resolution = 4.0727; + break; + case VEML6046_GAIN_0_5X: + resolution = 5.3760; + break; } break; } } else { - // 2/2 PD used - TABLE 13 + // 2/2 PD used - TABLE 13 switch (it) { case VEML6046_IT_400MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0053; break; - case VEML6046_GAIN_1X: resolution = 0.0105; break; - case VEML6046_GAIN_0_66X: resolution = 0.0159; break; - case VEML6046_GAIN_0_5X: resolution = 0.0210; break; + case VEML6046_GAIN_2X: + resolution = 0.0053; + break; + case VEML6046_GAIN_1X: + resolution = 0.0105; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.0159; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.0210; + break; } break; case VEML6046_IT_200MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0105; break; - case VEML6046_GAIN_1X: resolution = 0.0210; break; - case VEML6046_GAIN_0_66X: resolution = 0.0318; break; - case VEML6046_GAIN_0_5X: resolution = 0.0420; break; + case VEML6046_GAIN_2X: + resolution = 0.0105; + break; + case VEML6046_GAIN_1X: + resolution = 0.0210; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.0318; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.0420; + break; } break; case VEML6046_IT_100MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0210; break; - case VEML6046_GAIN_1X: resolution = 0.0420; break; - case VEML6046_GAIN_0_66X: resolution = 0.0636; break; - case VEML6046_GAIN_0_5X: resolution = 0.0840; break; + case VEML6046_GAIN_2X: + resolution = 0.0210; + break; + case VEML6046_GAIN_1X: + resolution = 0.0420; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.0636; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.0840; + break; } break; case VEML6046_IT_50MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0420; break; - case VEML6046_GAIN_1X: resolution = 0.0840; break; - case VEML6046_GAIN_0_66X: resolution = 0.1273; break; - case VEML6046_GAIN_0_5X: resolution = 0.1680; break; + case VEML6046_GAIN_2X: + resolution = 0.0420; + break; + case VEML6046_GAIN_1X: + resolution = 0.0840; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.1273; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.1680; + break; } break; case VEML6046_IT_25MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.0840; break; - case VEML6046_GAIN_1X: resolution = 0.1680; break; - case VEML6046_GAIN_0_66X: resolution = 0.2545; break; - case VEML6046_GAIN_0_5X: resolution = 0.3360; break; + case VEML6046_GAIN_2X: + resolution = 0.0840; + break; + case VEML6046_GAIN_1X: + resolution = 0.1680; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.2545; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.3360; + break; } break; case VEML6046_IT_12_5MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.1680; break; - case VEML6046_GAIN_1X: resolution = 0.3360; break; - case VEML6046_GAIN_0_66X: resolution = 0.5091; break; - case VEML6046_GAIN_0_5X: resolution = 0.6720; break; + case VEML6046_GAIN_2X: + resolution = 0.1680; + break; + case VEML6046_GAIN_1X: + resolution = 0.3360; + break; + case VEML6046_GAIN_0_66X: + resolution = 0.5091; + break; + case VEML6046_GAIN_0_5X: + resolution = 0.6720; + break; } break; case VEML6046_IT_6_25MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.3360; break; - case VEML6046_GAIN_1X: resolution = 0.6720; break; - case VEML6046_GAIN_0_66X: resolution = 1.0182; break; - case VEML6046_GAIN_0_5X: resolution = 1.3440; break; + case VEML6046_GAIN_2X: + resolution = 0.3360; + break; + case VEML6046_GAIN_1X: + resolution = 0.6720; + break; + case VEML6046_GAIN_0_66X: + resolution = 1.0182; + break; + case VEML6046_GAIN_0_5X: + resolution = 1.3440; + break; } break; case VEML6046_IT_3_125MS: switch (gain) { - case VEML6046_GAIN_2X: resolution = 0.6720; break; - case VEML6046_GAIN_1X: resolution = 1.3440; break; - case VEML6046_GAIN_0_66X: resolution = 2.0364; break; - case VEML6046_GAIN_0_5X: resolution = 2.6880; break; + case VEML6046_GAIN_2X: + resolution = 0.6720; + break; + case VEML6046_GAIN_1X: + resolution = 1.3440; + break; + case VEML6046_GAIN_0_66X: + resolution = 2.0364; + break; + case VEML6046_GAIN_0_5X: + resolution = 2.6880; + break; } break; } } - + return green_count * resolution; } \ No newline at end of file diff --git a/examples/test_veml6046/test_veml6046.ino b/examples/test_veml6046/test_veml6046.ino index 621feda..8ffa4db 100644 --- a/examples/test_veml6046/test_veml6046.ino +++ b/examples/test_veml6046/test_veml6046.ino @@ -178,7 +178,7 @@ void setup() { } else { Serial.println(F("Failed to set green low threshold")); } - + if (veml.setGreenThresholdHigh(10000)) { Serial.println(F("Green high threshold set successfully")); } else { @@ -192,20 +192,38 @@ void setup() { Serial.print(low_thresh); Serial.print(F(", High: ")); Serial.println(high_thresh); - + // Calculate optimal delay based on current integration time + 5ms buffer current_it = veml.getIntegrationTime(); sample_delay_ms = 5; // Base 5ms buffer switch (current_it) { - case VEML6046_IT_3_125MS: sample_delay_ms += 4; break; // 3.125ms rounded up - case VEML6046_IT_6_25MS: sample_delay_ms += 7; break; // 6.25ms rounded up - case VEML6046_IT_12_5MS: sample_delay_ms += 13; break; // 12.5ms rounded up - case VEML6046_IT_25MS: sample_delay_ms += 25; break; - case VEML6046_IT_50MS: sample_delay_ms += 50; break; - case VEML6046_IT_100MS: sample_delay_ms += 100; break; - case VEML6046_IT_200MS: sample_delay_ms += 200; break; - case VEML6046_IT_400MS: sample_delay_ms += 400; break; - default: sample_delay_ms += 25; break; // Default fallback + case VEML6046_IT_3_125MS: + sample_delay_ms += 4; + break; // 3.125ms rounded up + case VEML6046_IT_6_25MS: + sample_delay_ms += 7; + break; // 6.25ms rounded up + case VEML6046_IT_12_5MS: + sample_delay_ms += 13; + break; // 12.5ms rounded up + case VEML6046_IT_25MS: + sample_delay_ms += 25; + break; + case VEML6046_IT_50MS: + sample_delay_ms += 50; + break; + case VEML6046_IT_100MS: + sample_delay_ms += 100; + break; + case VEML6046_IT_200MS: + sample_delay_ms += 200; + break; + case VEML6046_IT_400MS: + sample_delay_ms += 400; + break; + default: + sample_delay_ms += 25; + break; // Default fallback } Serial.print(F("Using sample delay: ")); Serial.print(sample_delay_ms);