int pwmPin0 = 0; int pwmPin1 = 1; int analogInPin = A1; float R; //A constant to help us exponentially change our LED brightness int pwmIntervals = 100; //Number of 'steps' in brightening or darkening the LED void setup() { pinMode(pwmPin0, OUTPUT); pinMode(pwmPin1, OUTPUT); pinMode(analogInPin, INPUT); R = (pwmIntervals * log10(2))/(log10(255)); //logarithmic } void loop() { int analogIn = analogRead(analogInPin); // Read analog voltage on pin 2 (A1) 0-1023 if (analogIn > 175) { //eliminate false positives (tested experimentally, YMMV) //This brightening part takes 200ms for (int interval = 0; interval <= pwmIntervals; interval++) { // Calculate the required PWM value for this interval step int brightness = pow (2, (interval / R)) - 1; // Set the LED outputs to the calculated brightness analogWrite(pwmPin0, brightness); // Output 'analog' reading to dimmable LED analogWrite(pwmPin1, brightness); // Output 'analog' reading to dimmable LED delay(2); } //stay bright for four seconds delay(4000); //dim the brightness for 10 seconds. for (int interval = pwmIntervals; interval > 0; interval--) { int brightness = pow (2, (interval / R)) - 1; analogWrite(pwmPin0, brightness); analogWrite(pwmPin1, brightness); delay(10); } } //or else keep the lights off! else { analogWrite(pwmPin0, 0); // Output analog reading to dimmable LED analogWrite(pwmPin1, 0); // Output analog reading to dimmable LED delay(50); } }