diff --git a/light.ino b/light.ino new file mode 100644 index 0000000..ee0d8fa --- /dev/null +++ b/light.ino @@ -0,0 +1,113 @@ +#define Light_sensor A0 +#define Lamp_mod 6 +#define Move_sensor 2 + +// Gemessene Sensorwete des Helligkeitssensors + +// max 630 in 01 +// min 58 in 01 + +// max 995 in 03 +// max 19 in 03 +uint8_t sensoflight(uint8_t lpin){ + uint16_t light = map(analogRead(lpin), 58, 630, 0, 100); +return light; +} + + +uint8_t led_pwr; + +// maximale dauer der funktion less than 860 * 10^-6 s +/* +tested with: + unsigned long time_stp; + unsigned long time_fin; + setlamp(Lamp_mod, 0); + time_stp = micros(); + setlamp(Lamp_mod, 100); + time_fin = micros(); + unsigned long need = time_fin - time_stp; + Serial.println (need); + delay(1000); + */ + +void setlamp(uint8_t lpin, uint8_t lbrightness){ + lbrightness = lbrightness%101; + uint8_t n_led_pwr = map(lbrightness, 0, 100, 0, 255); + + int16_t led_lamp = led_pwr - n_led_pwr; + while (led_lamp != 0) { + if (led_lamp < 0){ + led_pwr ++; + } + if (led_lamp > 0){ + led_pwr --; + } + delayMicroseconds(10); + analogWrite(lpin, led_pwr); + led_lamp = led_pwr - n_led_pwr; + } +} + +uint8_t movement_threshold; + +void movement(){ + if ((movement_threshold>=80)&&(movement_threshold+5<100)){ + movement_threshold += 5; + } + else{ + movement_threshold = 80; + } +} + +void setup() { + pinMode(Move_sensor,INPUT); + attachInterrupt(digitalPinToInterrupt(Move_sensor), movement, RISING); + pinMode(Light_sensor,INPUT); + pinMode(Lamp_mod,OUTPUT); + Serial.begin(9600); +} + +// functions werte definiert von 0 bis 100 darĂ¼ber und unter chaos! +void setlight_with_wehtherinfluence(int8_t f_light){ + + // 0 - 100 limit. + f_light = (f_light % 101); + + // aretmetics over 100 scans! + uint16_t env_light = 0; + for (int i=0; i <100; i++){ + env_light += sensoflight(Light_sensor); + delayMicroseconds(10); + } + env_light = (env_light/100); + + // aretmetic light of enviroment + int8_t setlight = f_light - env_light; + + if (setlight > 100) setlamp(Lamp_mod,100); // would still never heppen but if lamps won't flicker. + if (setlight > 0) setlamp(Lamp_mod,setlight); + else setlamp(Lamp_mod,0); +} + +int maxwert; +void loop() { + /*setlight_with_wehtherinfluence(30); + delay(1000); + setlight_with_wehtherinfluence(80); + delay(1000); + */ + /* + int test = analogRead(Light_sensor); + if (test > maxwert) maxwert = test; + Serial.println(maxwert); + */ + // testcode for precentage + //Serial.println(sensoflight(Light_sensor)); + + Serial.println(movement_threshold); + if (movement_threshold) movement_threshold--; // time based light reduction! + setlight_with_wehtherinfluence(movement_threshold); + delay(100); + +} \ No newline at end of file