#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
// Oppsett for Matrise 1 (Liten, Pin 22)
Adafruit_NeoMatrix m1 = Adafruit_NeoMatrix(4, 2, 22,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
// Oppsett for Matrise 2 (Stor, Pin 23)
Adafruit_NeoMatrix m2 = Adafruit_NeoMatrix(8, 4, 23,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
int animasjonModus = 0;
unsigned long forrigeBytteTid = 0;
int rammeTeller = 0;
void setup() {
m1.begin(); m1.setBrightness(150);
m2.begin(); m2.setBrightness(150);
randomSeed(analogRead(0)); // Gjør tilfeldige effekter mer varierte
}
void loop() {
// Sjekk om det er på tide å bytte animasjon (hvert 5000ms / 5 sek)
if (millis() - forrigeBytteTid > 5000) {
animasjonModus = (animasjonModus + 1) % 5; // Veksle mellom 0 og 4
forrigeBytteTid = millis();
m1.fillScreen(0);
m2.fillScreen(0);
}
// Kjør valgt animasjon på begge matriser
switch (animasjonModus) {
case 0:
runRainbow(m1, rammeTeller);
runRainbow(m2, rammeTeller);
break;
case 1:
runFire(m1);
runFire(m2);
break;
case 2:
runTwinkle(m1);
runTwinkle(m2);
break;
case 3:
runMatrixRain(m1, rammeTeller);
runMatrixRain(m2, rammeTeller);
break;
case 4:
runPulse(m1, rammeTeller);
runPulse(m2, rammeTeller);
break;
}
m1.show();
m2.show();
rammeTeller++;
delay(80); // Juster hastigheten på animasjonene her
}
// --- 1. REGNBUE (Rainbow Wave) ---
void runRainbow(Adafruit_NeoMatrix &m, int bilde) {
for(int x=0; x < m.width(); x++) {
uint32_t farge = Wheel(((x * 256 / m.width()) + bilde * 5) & 255, m);
m.drawFastVLine(x, 0, m.height(), farge);
}
}
// --- 2. FLAMME (Fire) ---
void runFire(Adafruit_NeoMatrix &m) {
for(int x=0; x < m.width(); x++) {
for(int y=0; y < m.height(); y++) {
m.drawPixel(x, y, m.Color(random(150, 255), random(0, 60), 0));
}
}
}
// --- 3. GLITTER (Twinkle) ---
void runTwinkle(Adafruit_NeoMatrix &m) {
// Vi tømmer ikke skjermen helt for å få en "fade"-effekt i simulatoren
m.fillScreen(0);
for(int i=0; i < (m.width() / 2); i++) {
m.drawPixel(random(m.width()), random(m.height()), m.Color(255, 255, 255));
}
}
// --- 4. MATRIX REGN (Digital Rain) ---
void runMatrixRain(Adafruit_NeoMatrix &m, int bilde) {
m.fillScreen(0);
uint16_t gronn = m.Color(0, 255, 0);
for(int x=0; x < m.width(); x += 2) {
int y = (bilde + (x * 3)) % (m.height() + 2);
m.drawPixel(x, y - 1, gronn);
}
}
// --- 5. PULSERENDE SIRKEL (Pulse) ---
void runPulse(Adafruit_NeoMatrix &m, int bilde) {
m.fillScreen(0);
int radius = abs((bilde % 10) - 5); // Pulserer radius ut og inn
m.drawCircle(m.width()/2, m.height()/2, radius, m.Color(0, 0, 255));
}
// Hjelpefunksjon for farger
uint32_t Wheel(byte WheelPos, Adafruit_NeoMatrix &m) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) return m.Color(255 - WheelPos * 3, 0, WheelPos * 3);
if(WheelPos < 170) {
WheelPos -= 85;
return m.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return m.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
/* // Program som viser rekkefølgen til pixlene:
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
// Matrix 1: 2 wide (strips), 4 high (LEDs)
Adafruit_NeoMatrix m1 = Adafruit_NeoMatrix(4, 2, 22,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
Adafruit_NeoMatrix m2 = Adafruit_NeoMatrix(8, 4, 23,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
void setup() {
m1.begin(); m1.setBrightness(255);
m2.begin(); m2.setBrightness(255);
}
int i = 0;
void loop() {
m1.fillScreen(0);
m2.fillScreen(0);
// Tracer for Matrix 1 (8 total pixels)
m1.setPixelColor(i % 8, 0, 255, 0);
// Tracer for Matrix 2 (32 total pixels)
m2.setPixelColor(i % 32, 255, 0, 0);
m1.show();
m2.show();
i++;
delay(300); // Slow speed so you can verify each LED position
}*/