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;
}
Beispiel #2
0
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;
}