float Light::readEv() { float lux; static float lastReading; if(!initialized) return 0; if(paused || skipTask) return lastReading; lux = readLux(); method = 0; float ev = libc_log2(lux); ev *= 3; ev += 30; if(filterIndex < 0) // initialize buffer { for(uint8_t i = 0; i < FILTER_LENGTH; i++) filter[i] = ev; filterIndex = 0; } else // circular buffer { if(filterIndex < FILTER_LENGTH - 1) filterIndex++; else filterIndex = 0; filter[filterIndex] = ev; } ev = arrayMedian(filter, FILTER_LENGTH); lastReading = ev; return ev; }
int8_t Light::readEv() { float lux; lux = readLux(); lux *= 2^5; method = 0; int8_t ev = (int8_t)ilog2(lux); ev *= 3; ev += 30; if(ev <= 12) { uint16_t tmp = hardware_readLight(2); if(tmp < 10) { //if(tmp > 4) tmp -= 4; else tmp = 0; //ev = (int8_t)ilog2(tmp); //if(ev < 0) ev = 0; //ev *= 3; //ev += 3; ev = tmp + 3; debug(STR("Using Analog")); method = 1; } } return ev; }