/* Definition of led pin */
#define J1_PIN 3
#define J2_PIN 6
#define J3_PIN 10
#define R1_PIN 5
#define R2_PIN 9
#define R3_PIN 11
void setup()
{
pinMode(J1_PIN, OUTPUT);
pinMode(J2_PIN, OUTPUT);
pinMode(J3_PIN, OUTPUT);
pinMode(R1_PIN, OUTPUT);
pinMode(R2_PIN, OUTPUT);
pinMode(R3_PIN, OUTPUT);
randomSeed(analogRead(A0));
effect_takefire();
}
/* Array of fonction effect */
typedef void (*fnct)();
fnct effect[] = {effect_flickering, effect_fire, effect_moving, effect_fire, effect_fade_inout_slow, effect_fire, effect_fade_inout_fast, effect_fire, effect_wind, effect_fire}; // LEN:10
void loop()
{
effect[random(9)]();
randomDelay(random(50, 100));
}
void effect_flickering()
{
for(byte i = 1; i < random(5); i++)
{
analogWrite(R1_PIN, random(120) + 135);
analogWrite(R2_PIN, random(120) + 135);
analogWrite(R3_PIN, random(120) + 135);
analogWrite(J1_PIN, random(120) + 135);
analogWrite(J2_PIN, random(120) + 135);
analogWrite(J3_PIN, random(120) + 135);
delay(i);
}
}
void effect_moving()
{
for(byte i = 0; i < random(5); i++)
{
analogWrite(R1_PIN, random(120 + i));
analogWrite(R2_PIN, random(120 + i) + 65);
analogWrite(R3_PIN, random(120 + i) + 135);
analogWrite(J1_PIN, random(120));
analogWrite(J2_PIN, random(120) + 65);
analogWrite(J3_PIN, random(120) + 135);
delay(random(200));
}
}
void effect_fade_in_slow()
{
for(byte i = 0; i < 200; i++)
{
analogWrite(R1_PIN, random(i) + 30);
analogWrite(R2_PIN, random(i) + 30);
analogWrite(R3_PIN, random(i) + 30);
analogWrite(J1_PIN, random(i) + 30);
analogWrite(J2_PIN, random(i) + 30);
analogWrite(J3_PIN, random(i) + 30);
delay(random(200));
}
}
void effect_fade_inout_slow()
{
for(byte i = 200; i > 0; i--)
{
analogWrite(R1_PIN, random(i) + 30);
analogWrite(R2_PIN, random(i) + 30);
analogWrite(R3_PIN, random(i) + 30);
analogWrite(J1_PIN, random(i) + 30);
analogWrite(J2_PIN, random(i) + 30);
analogWrite(J3_PIN, random(i) + 30);
delay(random(100));
}
for(byte i = 0; i < 200; i++)
{
analogWrite(R1_PIN, random(i) + 30);
analogWrite(R2_PIN, random(i) + 30);
analogWrite(R3_PIN, random(i) + 30);
analogWrite(J1_PIN, random(i) + 30);
analogWrite(J2_PIN, random(i) + 30);
analogWrite(J3_PIN, random(i) + 30);
delay(random(100));
}
}
void effect_fade_inout_fast()
{
for(byte i = 200; i > 0; i--)
{
analogWrite(R1_PIN, random(i) + 30);
analogWrite(R2_PIN, random(i) + 30);
analogWrite(R3_PIN, random(i) + 30);
analogWrite(J1_PIN, random(i) + 30);
analogWrite(J2_PIN, random(i) + 30);
analogWrite(J3_PIN, random(i) + 30);
delay(random(25));
}
for(byte i = 0; i < 200; i++)
{
analogWrite(R1_PIN, random(i) + 30);
analogWrite(R2_PIN, random(i) + 30);
analogWrite(R3_PIN, random(i) + 30);
analogWrite(J1_PIN, random(i) + 30);
analogWrite(J2_PIN, random(i) + 30);
analogWrite(J3_PIN, random(i) + 30);
delay(random(25));
}
}
/*
* Effect of wind boosting fire
*/
void effect_wind()
{
for(byte i = 0; i < random(20); i++)
{
analogWrite(R1_PIN, random(120 + i));
analogWrite(R2_PIN, random(120 + i) + 65);
analogWrite(R3_PIN, random(120 + i) + 135);
analogWrite(J1_PIN, random(120));
analogWrite(J2_PIN, random(120) + 65);
analogWrite(J3_PIN, random(120) + 135);
delay(random(100));
}
}
/*
* Fire Effect
*/
void effect_fire()
{
analogWrite(R1_PIN, random(120) + 135);
analogWrite(R2_PIN, random(120) + 135);
analogWrite(R3_PIN, random(120) + 135);
analogWrite(J1_PIN, random(120) + 135);
analogWrite(J2_PIN, random(120) + 135);
analogWrite(J3_PIN, random(120) + 135);
delay(random(100));
}
/*
* Take Fire Effect
*
* The fire begin by fading slowly, before moving little and finally take really fire
*/
void effect_takefire()
{
effect_fade_in_slow();
effect_moving();
effect_fire();
effect_fire();
}
/*
* Environement (EMF) affected random delay effect
*
* stablity - level of random stability
*/
void randomDelay(byte stability)
{
unsigned int seed = analogRead(A0);
seed = seed * (stability + 1) / random(seed % stability, seed * (stability + 1));
delay(seed);
}