+#include <avr/io.h>
+
+#include "lights.h"
+
+static uint16_t ambient_val;
+unsigned char ambient_zone;
+unsigned char ambient_zone_set;
+
+static uint16_t ambient_zones[] = {
+ 1, 2, 10, 20, 256
+};
+#define N_AMBIENT_ZONES (sizeof(ambient_zones)/sizeof(ambient_zones[0]))
+
+void ambient_init()
+{
+ ambient_val = 0;
+ ambient_zone = 0;
+ ambient_zone_set = 0;
+}
+
+void ambient_zone_changed()
+{
+ log_byte(0xCC);
+ log_byte(ambient_zone);
+ log_word(ambient_val);
+}
+
+void ambient_adc(uint16_t adcval)
+{
+ unsigned char newzone;
+
+ if (!ambient_zone_set)
+ ambient_val = adcval << 4;
+
+ // running sum
+ ambient_val += adcval - (ambient_val >> 4);
+
+ newzone = 0;
+ while (newzone < N_AMBIENT_ZONES-1
+ && ambient_zones[newzone] <= ambient_val)
+ newzone++;
+
+ if (!ambient_zone_set || newzone != ambient_zone) {
+ ambient_zone = newzone;
+ ambient_zone_changed();
+ ambient_zone_set = 1;
+ }
+}
+
+
+