#include <SoftPWM.h>
const int delayTime = 200;
const int longDelay = 500;
const int shortDelay = 5;
const int fadeSteps = 50;
const int fadePause = 2;
const int pins[] = {12, 11, 10, 9, 8, 7, 6, 5, 4};
void setup() {
for (int i = 0; i < 9; i++) {
pinMode(pins[i], OUTPUT);
SoftPWMSet(pins[i], 0);
}
SoftPWMBegin();
}
void loop() {
// 1) Fade in/out seq1: {11}, then {8}, then {5}
int s1a[] = {11}; fadeSequence(s1a, 1, true); delay(delayTime);
fadeSequence(s1a, 1, false); delay(delayTime);
int s1b[] = {8}; fadeSequence(s1b, 1, true); delay(delayTime);
fadeSequence(s1b, 1, false); delay(delayTime);
int s1c[] = {5}; fadeSequence(s1c, 1, true); delay(delayTime);
fadeSequence(s1c, 1, false); delay(delayTime);
// 2) Fade in/out seq2: {4}, {7}, {10}
int s2a[] = {4}; fadeSequence(s2a, 1, true); delay(delayTime);
fadeSequence(s2a, 1, false); delay(delayTime);
int s2b[] = {7}; fadeSequence(s2b, 1, true); delay(delayTime);
fadeSequence(s2b, 1, false); delay(delayTime);
int s2c[] = {10}; fadeSequence(s2c, 1, true); delay(delayTime);
fadeSequence(s2c, 1, false); delay(delayTime);
// 3) Fade {9}, then group {6,12}, then back out, then {9}
int g3a[] = {9}; fadeSequence(g3a, 1, true); delay(delayTime);
int g3b[] = {6, 12};fadeSequence(g3b, 2, true); delay(delayTime);
fadeSequence(g3b, 2, false); delay(delayTime);
fadeSequence(g3a, 1, false); delay(delayTime);
// 4) Fade {11,4}, then {8,7}, then back out {8,7}, then back out {11,4}
int g4a[] = {11, 4};fadeSequence(g4a, 2, true); delay(delayTime);
int g4b[] = {8, 7};fadeSequence(g4b, 2, true); delay(delayTime);
fadeSequence(g4b, 2, false); delay(delayTime);
fadeSequence(g4a, 2, false); delay(delayTime);
// 5) Three stages of 6-pin fades with holds
int st1[] = {12, 11, 8, 7, 6, 4};
fadeSequence(st1, 6, true); delay(longDelay);
fadeSequence(st1, 6, false); delay(shortDelay);
int st2[] = {9, 8, 5, 4, 12, 10};
fadeSequence(st2, 6, true); delay(longDelay);
fadeSequence(st2, 6, false); delay(shortDelay);
int st3[] = {6, 5, 11, 10, 9, 7};
fadeSequence(st3, 6, true); delay(longDelay);
fadeSequence(st3, 6, false); delay(shortDelay);
}
// Fade one or more pins up (in=true) or down (in=false)
void fadeSequence(int group[], int count, bool in) {
if (in) {
for (int step = 0; step <= fadeSteps; ++step) {
uint8_t val = map(step, 0, fadeSteps, 0, 255);
for (int i = 0; i < count; ++i) {
SoftPWMSet(group[i], val);
}
delay(fadePause);
}
} else {
for (int step = fadeSteps; step >= 0; --step) {
uint8_t val = map(step, 0, fadeSteps, 0, 255);
for (int i = 0; i < count; ++i) {
SoftPWMSet(group[i], val);
}
delay(fadePause);
}
}
}