init repo"
This commit is contained in:
commit
14cef1aa11
434
led_cube.ino
Normal file
434
led_cube.ino
Normal file
@ -0,0 +1,434 @@
|
|||||||
|
/*
|
||||||
|
* Spalten: Layer:
|
||||||
|
* 15 14 13 12 0
|
||||||
|
* 11 10 9 8 1
|
||||||
|
* 7 6 5 4 2
|
||||||
|
* 3 2 1 0 3
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Spalten: Layer:
|
||||||
|
* 11 14 13 8 0
|
||||||
|
* 12 9 10 15 1
|
||||||
|
* 7 6 5 4 2
|
||||||
|
* 3 2 1 0 3
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Arduino.h"
|
||||||
|
#include <Wire.h>
|
||||||
|
#include "Adafruit_MCP23017.h"
|
||||||
|
|
||||||
|
Adafruit_MCP23017 mcp;
|
||||||
|
int layer1Pin = 15;
|
||||||
|
int layer2Pin = 16;
|
||||||
|
int layer3Pin = 17;
|
||||||
|
int layer4Pin = 14;
|
||||||
|
int layers[4] = {layer1Pin, layer2Pin, layer3Pin, layer4Pin};
|
||||||
|
int cols[4][4] = {{3, 2, 1, 0},{7, 6, 5, 4},{12, 9, 10, 15},{11, 14, 13, 8}};
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
mcp.begin();
|
||||||
|
|
||||||
|
for (int i=0; i <= 15; i++){
|
||||||
|
mcp.pinMode(i, OUTPUT);
|
||||||
|
mcp.digitalWrite(i, HIGH);
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
pinMode(layer1Pin, OUTPUT);
|
||||||
|
pinMode(layer2Pin, OUTPUT);
|
||||||
|
pinMode(layer3Pin, OUTPUT);
|
||||||
|
pinMode(layer4Pin, OUTPUT);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
circle();
|
||||||
|
mixer(4);
|
||||||
|
full_scan(2);
|
||||||
|
stamp(2);
|
||||||
|
ball(60);
|
||||||
|
rain(25);
|
||||||
|
randomflicker(250);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear() {
|
||||||
|
for (int i=0; i <= 15; i++){
|
||||||
|
mcp.digitalWrite(i, HIGH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mixer(int rounds) {
|
||||||
|
digitalWrite(layer1Pin, LOW);
|
||||||
|
digitalWrite(layer2Pin, LOW);
|
||||||
|
digitalWrite(layer3Pin, LOW);
|
||||||
|
digitalWrite(layer4Pin, LOW);
|
||||||
|
|
||||||
|
for(int i=0; i<=rounds; i++){
|
||||||
|
mcp.digitalWrite(cols[3][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[3][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][2], LOW);
|
||||||
|
delay(165); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][3], LOW);
|
||||||
|
delay(165); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[2][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][3], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][3], LOW);
|
||||||
|
delay(165); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[0][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[3][3], LOW);
|
||||||
|
delay(165); clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void full_scan(int rounds) {
|
||||||
|
for(int i=0; i<=rounds; i++){
|
||||||
|
digitalWrite(layer1Pin, LOW);
|
||||||
|
digitalWrite(layer2Pin, LOW);
|
||||||
|
digitalWrite(layer3Pin, LOW);
|
||||||
|
digitalWrite(layer4Pin, LOW);
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][0], LOW);
|
||||||
|
delay(100); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][1], LOW);
|
||||||
|
delay(100); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][2], LOW);
|
||||||
|
delay(100); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][3], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][3], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][3], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][3], LOW);
|
||||||
|
delay(100); clear();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][3], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][3], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][3], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][3], LOW);
|
||||||
|
delay(100); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][2], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][2], LOW);
|
||||||
|
delay(100); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][1], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][1], LOW);
|
||||||
|
delay(100); clear();
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[3][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[2][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[1][0], LOW);
|
||||||
|
mcp.digitalWrite(cols[0][0], LOW);
|
||||||
|
delay(100); clear();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=0; i <= 15; i++){
|
||||||
|
mcp.digitalWrite(i, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, LOW);
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, LOW);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, LOW);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, LOW);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, LOW);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, LOW);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, LOW);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, LOW);
|
||||||
|
delay(100);
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ball(int rounds) {
|
||||||
|
// https://electronics.stackexchange.com/a/67140
|
||||||
|
// size of the space
|
||||||
|
int height = 4;
|
||||||
|
int width = 4;
|
||||||
|
int depth = 4;
|
||||||
|
|
||||||
|
// Starting position of the shape
|
||||||
|
int xpos = 2;
|
||||||
|
int ypos = 2;
|
||||||
|
int zpos = 1;
|
||||||
|
|
||||||
|
// Speed of the shape along each axis
|
||||||
|
int xspeed = 1;
|
||||||
|
int yspeed = 2;
|
||||||
|
int zspeed = 1;
|
||||||
|
|
||||||
|
int choice[2] = {-1, 1};
|
||||||
|
int xdirection = 1; // Left or Right
|
||||||
|
int ydirection = 1; // Top to Bottom
|
||||||
|
int zdirection = 1; // front or back
|
||||||
|
|
||||||
|
for(int i=0; i<=rounds; i++){
|
||||||
|
clear();
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
// Update the position of the shape
|
||||||
|
xpos = xpos + ( xspeed * xdirection );
|
||||||
|
ypos = ypos + ( yspeed * ydirection );
|
||||||
|
zpos = zpos + ( zspeed * zdirection );
|
||||||
|
|
||||||
|
if (xpos >= width || xpos < 0) {
|
||||||
|
xpos = constrain(xpos, 0, width-1);
|
||||||
|
xdirection *= -1;
|
||||||
|
}
|
||||||
|
if (ypos >= height || ypos < 0) {
|
||||||
|
ypos = constrain(ypos, 0, height-1);
|
||||||
|
ydirection *= -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zpos >= depth || zpos < 0) {
|
||||||
|
zpos = constrain(zpos, 0, depth-1);
|
||||||
|
zdirection *= -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(random(0, 6) == 1) {
|
||||||
|
xdirection *= -1;
|
||||||
|
} else if(random(0, 6) == 1) {
|
||||||
|
ydirection *= -1;
|
||||||
|
} else if(random(0, 6) == 1) {
|
||||||
|
zdirection *= -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
digitalWrite(layers[ypos], LOW);
|
||||||
|
mcp.digitalWrite(cols[xpos][3-zpos], LOW);
|
||||||
|
delay(150);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void randomflicker(int rounds) {
|
||||||
|
for(int i=0; i<=rounds; i++){
|
||||||
|
clear();
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
|
||||||
|
int randomLayer = random(0, 4);
|
||||||
|
int randomLed = random(0, 16);
|
||||||
|
|
||||||
|
digitalWrite(layers[randomLayer], LOW);
|
||||||
|
mcp.digitalWrite(randomLed, LOW);
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void stamp(int rounds) {
|
||||||
|
for(int i=0; i<=rounds; i++){
|
||||||
|
digitalWrite(layer1Pin, LOW);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
clear();
|
||||||
|
|
||||||
|
for (int i=0; i <= 15; i++){
|
||||||
|
mcp.digitalWrite(i, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(1500);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, LOW);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(50);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, LOW);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(50);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, LOW);
|
||||||
|
delay(1000);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, LOW);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(400);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, LOW);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(400);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void rain(int rounds) {
|
||||||
|
for(int i=0; i<=rounds; i++){
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
clear();
|
||||||
|
mcp.digitalWrite(random(0, 15), LOW);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, LOW);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(85);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, LOW);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(85);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, LOW);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(85);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, LOW);
|
||||||
|
delay(85);
|
||||||
|
|
||||||
|
digitalWrite(layer1Pin, HIGH);
|
||||||
|
digitalWrite(layer2Pin, HIGH);
|
||||||
|
digitalWrite(layer3Pin, HIGH);
|
||||||
|
digitalWrite(layer4Pin, HIGH);
|
||||||
|
delay(150);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void circle() {
|
||||||
|
clear();
|
||||||
|
digitalWrite(layer1Pin, LOW);
|
||||||
|
digitalWrite(layer2Pin, LOW);
|
||||||
|
digitalWrite(layer3Pin, LOW);
|
||||||
|
digitalWrite(layer4Pin, LOW);
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[0][3], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[0][2], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[0][1], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[0][0], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[1][0], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[2][0], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[3][0], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[3][1], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[3][2], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[3][3], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[2][3], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[1][3], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[1][2], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[1][1], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[2][1], LOW); delay(150);
|
||||||
|
mcp.digitalWrite(cols[2][2], LOW); delay(150);
|
||||||
|
|
||||||
|
delay(1500);
|
||||||
|
|
||||||
|
mcp.digitalWrite(cols[2][2], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[2][1], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[1][1], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[1][2], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[1][3], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[2][3], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[3][3], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[3][2], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[3][1], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[3][0], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[2][0], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[1][0], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[0][0], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[0][1], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[0][2], HIGH); delay(150);
|
||||||
|
mcp.digitalWrite(cols[0][3], HIGH); delay(150);
|
||||||
|
|
||||||
|
delay(1500);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user