+unsigned int light_level_mean_ = 0;
+unsigned int light_sample_time_ = 0;
+
+void updateLightLevel(unsigned int pin)
+{
+ light_sample_time_++;
+ if (light_sample_time_ < PHOTO_SAMPLE_INTERVAL)
+ return;
+ light_sample_time_ = 0;
+
+ unsigned int value = analogRead(pin);
+ if (value == light_level_mean_)
+ return;
+
+ unsigned int diff = abs(value - light_level_mean_);
+ if (diff > 250)
+ light_level_mean_ = value;
+ else
+ light_level_mean_=(unsigned int) ( ((float) light_level_mean_) * 0.98 + ((float)value)*0.02 );
+}
+
+void printLightLevel()
+{
+ Serial.print("Photo: ");
+ Serial.println(light_level_mean_);
+}
+
+//********************************************************************//
+
+unsigned int flash_led_time_=0;
+void calculate_led_level(unsigned int pwm_pin)
+{
+ if (flash_led_time_ == 0)
+ return;
+ if (millis() % 10)
+ return;
+ flash_led_time_--;
+ int c = abs(sin(float(flash_led_time_) / 100.0)) * 256;
+ analogWrite(pwm_pin,c);
+}
+
+void flash_led(int times)
+{
+ flash_led_time_=314*times;
+}
+
+//********************************************************************//
+