int grid[16] = {0, 1, 2, 4, 7, 8, 10, 11, 12, 13, A0, A1, A2, A3, A4, A5};
int height[4] = {3, 5, 6, 9};
void setup() {
for (int i = 0 ; i <= 19 ; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
//fade
fadeInOut();
delay(10);
//rain
rain();
delay(10);
//on <--> not on
blink();
delay(10);
//swipe
swipe();
delay(10);
//grid 1 <--> 16
gridding();
delay(10);
//hollow box
hollowBox();
delay(10);
//hollow
hollowHold();
delay(10);
//3 Random Spot per Layer
randomSpot();
delay(10);
//height level
heightLevel();
delay(10);
}
//height level
void heightLevel() {
int _delay = 100;
allNotOn();
allGridOn();
for (int i = 0 ; i < 8 ; i++) {
height1();
delay(_delay);
height2();
delay(_delay);
height3();
delay(_delay);
height4();
delay(_delay * 2);
height3();
delay(_delay);
height2();
delay(_delay);
height1();
delay(_delay);
}
}
//hollow hold
void hollowHold() {
for (int i = 1 ; i <= 1200 ; i++) {
allNotOn();
digitalWrite(height[0], HIGH);
digitalWrite(height[3], HIGH);
digitalWrite(grid[0], LOW);
digitalWrite(grid[1], LOW);
digitalWrite(grid[2], LOW);
digitalWrite(grid[3], LOW);
digitalWrite(grid[4], LOW);
digitalWrite(grid[7], LOW);
digitalWrite(grid[8], LOW);
digitalWrite(grid[11], LOW);
digitalWrite(grid[12], LOW);
digitalWrite(grid[13], LOW);
digitalWrite(grid[14], LOW);
digitalWrite(grid[15], LOW);
delay(1);
allNotOn();
digitalWrite(height[1], HIGH);
digitalWrite(height[2], HIGH);
digitalWrite(grid[0], LOW);
digitalWrite(grid[3], LOW);
digitalWrite(grid[12], LOW);
digitalWrite(grid[15], LOW);
delay(1);
}
}
//random spot
void randomSpot() {
allNotOn();
for (int i = 1 ; i <= 100 ; i++) {
allNotOn();
int locLength = 12;
int loc[locLength];
for (int i = 0 ; i < locLength ; i++) {
loc[i] = random(16);
}
for (int i = 1 ; i <= 90 ; i++) {
allNotOn();
height1();
digitalWrite(grid[loc[0]], LOW);
digitalWrite(grid[loc[1]], LOW);
digitalWrite(grid[loc[2]], LOW);
allNotOn();
height2();
digitalWrite(grid[loc[3]], LOW);
digitalWrite(grid[loc[4]], LOW);
digitalWrite(grid[loc[5]], LOW);
allNotOn();
height3();
digitalWrite(grid[loc[6]], LOW);
digitalWrite(grid[loc[7]], LOW);
digitalWrite(grid[loc[8]], LOW);
allNotOn();
height4();
digitalWrite(grid[loc[9]], LOW);
digitalWrite(grid[loc[10]], LOW);
digitalWrite(grid[loc[11]], LOW);
}
}
}
//hollow box
void hollowBox() {
for (int i = 0 ; i < 8 ; i++) {
for (int i = 1 ; i <= 60 ; i++) {
allNotOn();
digitalWrite(height[0], HIGH);
digitalWrite(height[3], HIGH);
digitalWrite(grid[0], LOW);
digitalWrite(grid[1], LOW);
digitalWrite(grid[2], LOW);
digitalWrite(grid[3], LOW);
digitalWrite(grid[4], LOW);
digitalWrite(grid[7], LOW);
digitalWrite(grid[8], LOW);
digitalWrite(grid[11], LOW);
digitalWrite(grid[12], LOW);
digitalWrite(grid[13], LOW);
digitalWrite(grid[14], LOW);
digitalWrite(grid[15], LOW);
delay(1);
allNotOn();
digitalWrite(height[1], HIGH);
digitalWrite(height[2], HIGH);
digitalWrite(grid[0], LOW);
digitalWrite(grid[3], LOW);
digitalWrite(grid[12], LOW);
digitalWrite(grid[15], LOW);
delay(1);
}
for (int i = 1 ; i <= 120 ; i++) {
allNotOn();
digitalWrite(height[1], HIGH);
digitalWrite(height[2], HIGH);
digitalWrite(grid[5], LOW);
digitalWrite(grid[6], LOW);
digitalWrite(grid[9], LOW);
digitalWrite(grid[10], LOW);
delay(1);
}
allNotOn();
delay(300);
for (int i = 1 ; i <= 120 ; i++) {
allNotOn();
digitalWrite(height[1], HIGH);
digitalWrite(height[2], HIGH);
digitalWrite(grid[5], LOW);
digitalWrite(grid[6], LOW);
digitalWrite(grid[9], LOW);
digitalWrite(grid[10], LOW);
delay(1);
}
}
}
//gridding
void gridding() {
for (int i = 0 ; i < 4 ; i++) {
allNotOn();
allHeightOn();
for (int i = 0 ; i <= 15 ; i++) {
digitalWrite(grid[i], LOW);
delay(100);
}
for (int i = 1 ; i <= 5 ; i++) {
allGridNotOn();
delay(100);
allGridOn();
delay(100);
}
for (int i = 15 ; i >= 0 ; i--) {
digitalWrite(grid[i], HIGH);
delay(100);
}
}
}
//swipe
void swipe() {
allNotOn();
allHeightOn();
int n;
for (int i = 0 ; i < 7 ; i++) {
n = 0;
for (int j = 0 ; j < 4 ; j++) {
digitalWrite(grid[n], LOW);
digitalWrite(grid[n + 4], LOW);
digitalWrite(grid[n + 8], LOW);
digitalWrite(grid[n + 12], LOW);
delay(200);
digitalWrite(grid[n], HIGH);
digitalWrite(grid[n + 4], HIGH);
digitalWrite(grid[n + 8], HIGH);
digitalWrite(grid[n + 12], HIGH);
n += 1;
}
allNotOn();
allHeightOn();
n = 3;
for (int j = 0 ; j < 4 ; j++) {
digitalWrite(grid[n], LOW);
digitalWrite(grid[n + 4], LOW);
digitalWrite(grid[n + 8], LOW);
digitalWrite(grid[n + 12], LOW);
delay(200);
digitalWrite(grid[n], HIGH);
digitalWrite(grid[n + 4], HIGH);
digitalWrite(grid[n + 8], HIGH);
digitalWrite(grid[n + 12], HIGH);
n -= 1;
}
}
}
//blink
void blink() {
allNotOn();
for (int i = 0 ; i < 8 ; i++) {
allOn();
delay(500);
allNotOn();
delay(500);
}
}
//rain
void rain() {
allNotOn();
int drop1, drop2, drop3, drop4;
for (int i = 0 ; i < 80 ; i++) {
allNotOn();
drop1 = random(16);
do{
drop2 = random(16);
}while(drop2==drop1);
do{
drop3 = random(16);
}while(drop3==drop2 || drop3==drop1);
do{
drop4 = random(16);
}while(drop4==drop3 || drop4==drop2 || drop4==drop1);
digitalWrite(grid[drop1], LOW);
digitalWrite(grid[drop2], LOW);
digitalWrite(grid[drop3], LOW);
digitalWrite(grid[drop4], LOW);
for (int j = 3 ; j >= 0 ; j--) {
digitalWrite(height[j], HIGH);
delay(80);
digitalWrite(height[j], LOW);
}
}
}
//fade in and out
void fadeInOut() {
allNotOn();
allGridOn();
int pow = 0;
//---
for (int i = 0 ; i < 5 ; i++) {
for (pow = 0 ; pow <= 255 ; pow++) {
analogWrite(height[0], pow);
analogWrite(height[1], pow);
analogWrite(height[2], pow);
analogWrite(height[3], pow);
delay(5);
}
delay(100);
for (pow = 255 ; pow >= 0 ; pow--) {
analogWrite(height[0], pow);
analogWrite(height[1], pow);
analogWrite(height[2], pow);
analogWrite(height[3], pow);
delay(5);
}
delay(500);
}
}
//all on
void allOn() {
for (int i = 0 ; i < 16 ; i++) {
digitalWrite(grid[i], LOW);
}
for (int i = 0 ; i < 4 ; i++) {
digitalWrite(height[i], HIGH);
}
}
//all not on
void allNotOn() {
for (int i = 0 ; i < 16 ; i++) {
digitalWrite(grid[i], HIGH);
}
for (int i = 0 ; i < 4 ; i++) {
digitalWrite(height[i], LOW);
}
}
//all height on
void allHeightOn() {
for (int i = 0 ; i < 4 ; i++) {
digitalWrite(height[i], HIGH);
}
}
//all height not on
void allHeightNotOn() {
for (int i = 0 ; i < 4 ; i++) {
digitalWrite(height[i], LOW);
}
}
//only height 1
void height1() {
allHeightNotOn();
digitalWrite(height[0], HIGH);
}
//only height 2
void height2() {
allHeightNotOn();
digitalWrite(height[1], HIGH);
}
//only height 3
void height3() {
allHeightNotOn();
digitalWrite(height[2], HIGH);
}
//only height 4
void height4() {
allHeightNotOn();
digitalWrite(height[3], HIGH);
}
//all grid on
void allGridOn() {
for (int i = 0 ; i < 16 ; i++) {
digitalWrite(grid[i], LOW);
}
}
//all grid not on
void allGridNotOn() {
for (int i = 0 ; i < 16 ; i++) {
digitalWrite(grid[i], HIGH);
}
}