/* Arduino Candle plus PIR sensor input and eyes output For just the candle effect leave the PIR sensor and eyes LEDs out of the circuit and/or remove the void gloweyes loop. */ int or1 = 6; //orange1 on pin 6 int yel1 = 9; //yellow1 on pin 9 int or2 = 10; //orange2 0n pin 10 int yel2 = 11; //yellow2 on pin 11 int eyes = 3; //eyes on pin 3 int pir = 4; //pir on pin 4 int val1; int val2; int val3; int val4; int val5; int val6; int val7; int val8; int newval1; int newval3; int newval5; int newval7; int pirval = 0; int fireled = 0; void setup() { pinMode(or1, OUTPUT); pinMode(yel1, OUTPUT); pinMode(or2, OUTPUT); pinMode(yel2, OUTPUT); pinMode(eyes, OUTPUT); pinMode(pir, INPUT); } void loop() { /* makes the candle effect and reads the PIR sensor */ randomSeed(analogRead(0)); val1 = random(100, 225); analogWrite(or1, val1); val2 = random(10, 30); delay(val2); val3 = random(128, 256); analogWrite(yel1, val3); val4 = random(20, 30); delay(val4); val5 = random(100, 225); analogWrite(or2, val5); val6 = random(10, 30); delay(val6); val7 = random(128, 256); analogWrite(yel2, val7); val8 = random(20, 30); delay(val8); pirval = digitalRead(pir); if (pirval == 1) { gloweyes(); } } void gloweyes() { /*first dims the candle LEDs*/ while (fireled < 1) { if (val1 > 25) { val1--; analogWrite(or1, val1); delay(3); } if (val3 > 25) { val3--; analogWrite(yel1, val3); delay(3); } if (val5 > 25) { val5--; analogWrite(or2, val5); delay(3); } if (val7 > 25) { val7--; analogWrite(yel2, val7); delay(3); } if ((val1 < 26) && (val3<26) && (val5<26) && (val7<26)) { fireled = 1; } } for (int i=0; i<255; i++) { /*fade the eyes up, blink, fade back down*/ analogWrite(eyes, i); delay(10); } delay(2500); analogWrite(eyes, 0); delay(50); analogWrite(eyes, 255); delay(150); analogWrite(eyes, 0); delay(50); analogWrite(eyes, 255); delay(600); analogWrite(eyes, 0); delay(50); analogWrite(eyes, 255); delay(2500); for (int i=255; i>=0; i--) { analogWrite(eyes, i); delay(5); } while (fireled > 0) { /*fade the candle back up*/ if (val1 < 140) { val1++; analogWrite(or1, val1); delay(10); } if (val3 < 140) { val3++; analogWrite(yel1, val3); delay(10); } if (val5 < 140) { val5++; analogWrite(or2, val5); delay(10); } if (val7 < 140) { val7++; analogWrite(yel2, val7); delay(10); } if ((val1==140) && (val3==140) && (val5==140) && (val7==140)) { fireled = 0; } } }