55#define HEATER_NTC_BX 4250 // thermistor coefficient B
66#define HEATER_NTC_RP 8250 // ohm, series resistance to thermistor
77#define HEATER_NTC_KA 273.15 // 25 Celsius at Kelvin
8- #define NTC_REF_VCC 3000 // mV, output voltage of LDO
8+ #define NTC_REF_VCC 3300 // mV, max voltage of 3V3 sensor rail
99#define LIGHT_REF_VCC 2400 //
1010
1111static unsigned int ntc_res2[136 ] = {
@@ -54,6 +54,7 @@ static int get_light_lv(unsigned int light_volt) {
5454 float Vout = 0 , Vin = 0 , Rt = 0 , temp = 0 ;
5555 unsigned int light_level = 0 ;
5656
57+ // Seeed's firmware maps the photocell reading to a 0-100 % range rather than lux.
5758 if (light_volt <= 80 ) {
5859 light_level = 0 ;
5960 return light_level;
@@ -75,7 +76,8 @@ float t1000e_get_temperature(void) {
7576 analogReference (AR_INTERNAL_3_0 );
7677 analogReadResolution (12 );
7778 delay (10 );
78- vcc_v = (1000.0 * (analogRead (BATTERY_PIN ) * ADC_MULTIPLIER * AREF_VOLTAGE )) / 4096 ;
79+ unsigned int rail_v = (1000.0 * (analogRead (BATTERY_PIN ) * ADC_MULTIPLIER * AREF_VOLTAGE )) / 4096 ;
80+ vcc_v = (rail_v > NTC_REF_VCC ) ? NTC_REF_VCC : rail_v;
7981 ntc_v = (1000.0 * AREF_VOLTAGE * analogRead (TEMP_SENSOR )) / 4096 ;
8082 digitalWrite (PIN_3V3_EN , LOW );
8183 digitalWrite (SENSOR_EN , LOW );
@@ -87,13 +89,15 @@ uint32_t t1000e_get_light(void) {
8789 int lux = 0 ;
8890 unsigned int lux_v = 0 ;
8991
92+ digitalWrite (PIN_3V3_EN , HIGH );
9093 digitalWrite (SENSOR_EN , HIGH );
9194 analogReference (AR_INTERNAL_3_0 );
9295 analogReadResolution (12 );
9396 delay (10 );
9497 lux_v = 1000 * analogRead (LUX_SENSOR ) * AREF_VOLTAGE / 4096 ;
9598 lux = get_light_lv (lux_v);
9699 digitalWrite (SENSOR_EN , LOW );
100+ digitalWrite (PIN_3V3_EN , LOW );
97101
98102 return lux;
99- }
103+ }
0 commit comments