int main_LED[9] = {2, 3, 4, 5, 6, 7, 8, 9, 10}; // 9 Main body freen LEDs
int wingtip_G[2] = {11, 12}; // 2 wingtip green LEDs
int wingtip_W[2] = {15, 16}; // 2 wingtip White LEDs
int red_Eye = 13; // Red LED in cobra eye
int white_Eye = 14; // White LED in cobra eye
// ------------------------------ Changeable Variables (Fine tune according to requirements) ---------------------------//
// Fade up and down speeds:
unsigned long fadeUpDelay = 50; // Speed of LEDs while fading up (Lower = faster)
unsigned long fadeDownDelay = 40; // Speed of LEDs while fading down to off (Lower = faster)
unsigned long fadeUpdateInt = 1000; // How quickly cobra eye pulsing speed is increased (Lower = Faster)
// Cobra eye speeds:
unsigned long cobraEyeFadeSlow = 50; // Idle speed of cobra eye pulsing
unsigned long cobraEyeFadeFast = 5; // Max speed of cobra eye pulsing
// Cobra eye pulsing times:
unsigned long maxCobraTime = 15000; // Maximum time cobra eye fades in/out
unsigned long minCobraTime = 10000; // Minimum time cobra eye fades in/out
// Cobra eye white fire times:
unsigned long maxFireTime = 15000; // Maximum time cobra eye white LED Fires
unsigned long minFireTime = 10000; // Minimum time cobra eye white LED Fires
// Cobra eye white LED firing speeds:
unsigned long maxFireSpeed = 50; // Fastest speed of white Led firing
unsigned long minFireSpeed = 200; // Slowest speed of white Led firing
// Wingtip Firing speeds:
unsigned long wtFlashInt_OFF = 250; // OFF time of wintip flashing
unsigned long wtFlashInt_ON = 125; // ON time of wintip flashing
// Wingtip Firing times:
unsigned long maxWingtipTime = 15000; // Maximum time wingtip LEDs Fire
unsigned long minWingtipTime = 10000; // Minimum time wingtip LEDs Fire
// Dying Mode speeds:
unsigned long maxDyingSpeed = 100; // Fastest speed of dying mode blinking
unsigned long minDyingSpeed = 500; // Slowest speed of dying mode blinking
// How many times LEDs will blink in Dying mode:
int maxCycles = 50; // Maximum possible
int minCycles = 30; // Minimum possible
// Random pause after each cycle:
unsigned long maxPause = 15000; // 15 sec
unsigned long minPause = 10000; // 10 sec
void setup() {
Serial.begin(9600);
for (int i = 0; i < 9; i++) {
pinMode(main_LED[i], OUTPUT);
digitalWrite(main_LED[i], LOW);
}
for (int j = 0; j < 2; j++) {
pinMode(wingtip_G[j], OUTPUT);
pinMode(wingtip_W[j], OUTPUT);
digitalWrite(wingtip_G[j], LOW);
digitalWrite(wingtip_W[j], LOW);
}
pinMode(red_Eye, OUTPUT);
pinMode(white_Eye, OUTPUT);
digitalWrite(red_Eye, LOW);
digitalWrite(white_Eye, LOW);
randomSeed(analogRead(A0));
}
void loop() {
fadeUp();
cobraEye_Fade();
eyeFireRay();
wingtipFire();
dyingMode();
allOFF();
delay(random(minPause, maxPause)); // 10-15 sec pause
}
void allOFF() {
Serial.println("All OFF!");
for (int i = 0; i < 9; i++) {
digitalWrite(main_LED[i], LOW);
}
for (int j = 0; j < 2; j++) {
digitalWrite(wingtip_G[j], LOW);
digitalWrite(wingtip_W[j], LOW);
}
digitalWrite(red_Eye, LOW);
digitalWrite(white_Eye, LOW);
}
void fadeUp() {
Serial.println("Fading Up!");
for (int j = 0; j < 256; j++) {
for (int i = 0; i < 9; i++) {
analogWrite(main_LED[i], j);
}
for (int i = 0; i < 2; i++) {
analogWrite(wingtip_G[i], j);
}
analogWrite(red_Eye, j);
delay(fadeUpDelay);
}
}
void cobraEye_Fade() {
int pwmVal = 255;
unsigned long cobraEyeFade = cobraEyeFadeSlow;
unsigned long pulsingTime = random(minCobraTime, maxCobraTime);
unsigned long startTime = millis();
unsigned long lastMillisLed = 0;
unsigned long lastMillisFade = 0;
int fade = -5;
Serial.println("Pulsing Eye.");
while (millis() - startTime < pulsingTime) { // Slow to fast pulsing EYE
if (millis() - lastMillisFade >= fadeUpdateInt) {
lastMillisFade = millis();
if (cobraEyeFade > cobraEyeFadeFast) {
cobraEyeFade = cobraEyeFade - 5; // Decrement (Faster)
Serial.print("Fade speed: ");
Serial.println(cobraEyeFade);
}
}
if (millis() - lastMillisLed >= cobraEyeFade) {
lastMillisLed = millis();
analogWrite(red_Eye, pwmVal);
pwmVal = pwmVal + fade;
if (pwmVal == 0 || pwmVal == 255) {
fade = -fade;
}
}
}
}
void eyeFireRay() {
int flashState = HIGH;
unsigned long startTime = millis();
unsigned long lastMillisFlash = 0;
unsigned long pulsingTime = random(minFireTime, maxFireTime);
unsigned long flashUpdateInt = random(maxFireSpeed, minFireSpeed);
Serial.println("Eye Fire Ray effect.");
while (millis() - startTime < pulsingTime) { // Flashing/Fire effect
if (millis() - lastMillisFlash >= flashUpdateInt) {
lastMillisFlash = millis();
digitalWrite(white_Eye, flashState);
flashState = !flashState;
flashUpdateInt = random(maxFireSpeed, minFireSpeed);
}
}
digitalWrite(white_Eye, LOW);
}
void wingtipFire() {
int pwmVal = 255;
int flashState = HIGH;
int fade = -5;
unsigned long lastMillisLed = 0;
unsigned long lastMillisFlash = 0;
unsigned long startTime = millis();
unsigned long pulsingTime = random(minWingtipTime, maxWingtipTime);
unsigned long cobraEyeFade = cobraEyeFadeSlow / 4;
unsigned long wingtipFlashInt = wtFlashInt_ON; // Speed of wintip flashing
Serial.println("Wingtip Firing.");
while (millis() - startTime < pulsingTime) { // Wingtip fire effect with pulsing eve at medium speed
if (millis() - lastMillisFlash >= wingtipFlashInt) {
lastMillisFlash = millis();
for (int j = 0; j < 2; j++) {
digitalWrite(wingtip_W[j], flashState);
}
if (flashState) {
flashState = LOW;
wingtipFlashInt = wtFlashInt_ON;
}
else {
flashState = HIGH;
wingtipFlashInt = wtFlashInt_OFF;
}
}
if (millis() - lastMillisLed >= cobraEyeFade) {
lastMillisLed = millis();
analogWrite(red_Eye, pwmVal);
pwmVal = pwmVal + fade;
if (pwmVal == 0 || pwmVal == 255) {
fade = -fade;
}
}
}
for (int j = 0; j < 2; j++) {
digitalWrite(wingtip_W[j], LOW);
}
}
void dyingMode() {
int flashState = HIGH;
int cycles = random(minCycles, maxCycles);
int flashDelay = random(maxDyingSpeed, minDyingSpeed);
Serial.println("Dying Mode!");
for (int j = 0; j < cycles; j++) {
for (int i = 0; i < 9; i++) {
digitalWrite(main_LED[i], flashState);
}
for (int i = 0; i < 2; i++) {
digitalWrite(wingtip_G[i], flashState);
}
digitalWrite(red_Eye, flashState);
delay(flashDelay);
flashDelay = random(100, 500);
flashState = !flashState;
}
Serial.println("Fading Down!");
for (int j = 255; j >= 0; j--) {
for (int i = 0; i < 9; i++) {
analogWrite(main_LED[i], j);
}
for (int i = 0; i < 2; i++) {
analogWrite(wingtip_G[i], j);
}
analogWrite(red_Eye, j);
delay(fadeDownDelay);
}
}