#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); }