From 14cef1aa11ac2e549a9ad74338c7a2028306a114 Mon Sep 17 00:00:00 2001 From: Gurkengewuerz Date: Sat, 27 Oct 2018 15:11:56 +0200 Subject: [PATCH] init repo" --- led_cube.ino | 434 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 434 insertions(+) create mode 100644 led_cube.ino diff --git a/led_cube.ino b/led_cube.ino new file mode 100644 index 0000000..796822f --- /dev/null +++ b/led_cube.ino @@ -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 +#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); +} \ No newline at end of file