Brick’R’knowledge Arduino Bastelei

Aus dem Lieferprogramm der Allnet GmbH – Brick´R´Knowledge, das Lego Technik mit Niederspannung. Ziel der Bastelstunde: Die mit WS2812 Controller ausgestatteten RGB LED Bricks mit einem Arduino Nano zum Leuchten zu bringen.

 

Ein wenig Marketing dazu findet sich auf der Website des Herstellers
Die nötige FASTLED Bibliothek findet sich hier – gibt auch reichlich Beispiel-Code.

Die beteiligten Bricks

IMG_7737

Arduino Brick
RGB LED Brick mit Anschlüssen links und rechts
RGB LED Brick T-Stück
Einspeise Brick – rosa ist übrigens die Datenleitung – Dokumentation hat der Hersteller nur auf der Platine 🙁
und ein beliebiges 9V Netzteil

Das Ergebnis
gefilmt mit meinem iPhone, geschnitten mit iMovie für iOS

Der Beispiel-Code

#include "FastLED.h"
 FASTLED_USING_NAMESPACE
#if FASTLED_VERSION < 3001000
 #error "Requires FastLED 3.1 or later; check github for latest code."
 #endif
// Das ist der Ausgang am Brick/Arduino Nano an den das rosa Kabel angeschlossen werden muss
#define DATA_PIN    6
 #define LED_TYPE    WS2812
 #define COLOR_ORDER GRB
 // Anzahl der Bricks mit LEDs
 #define NUM_LEDS    17
 CRGB leds[NUM_LEDS];
#define BRIGHTNESS         60
 #define FRAMES_PER_SECOND  60
void setup() {
 delay(3000); // 3 second delay for recovery
// tell FastLED about the LED strip configuration
 FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
 //FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
// set master brightness control
 FastLED.setBrightness(BRIGHTNESS);
 }
// List of patterns to cycle through.  Each is defined as a separate function below.
 typedef void (*SimplePatternList[])();
 SimplePatternList gPatterns = { rainbow, rainbowWithGlitter, confetti, sinelon, juggle, bpm };
uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current
 uint8_t gHue = 0; // rotating "base color" used by many of the patterns
void loop()
 {
 // Call the current pattern function once, updating the 'leds' array
 gPatterns[gCurrentPatternNumber]();
// send the 'leds' array out to the actual LED strip
 FastLED.show();
 // insert a delay to keep the framerate modest
 FastLED.delay(1000/FRAMES_PER_SECOND);
// do some periodic updates
 EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
 EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically
 }
#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))
void nextPattern()
 {
 // add one to the current pattern number, and wrap around at the end
 gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns);
 }
// Ein paar Effekte
void rainbow()
 {
 // FastLED's built-in rainbow generator
 fill_rainbow( leds, NUM_LEDS, gHue, 7);
 }
void rainbowWithGlitter()
 {
 // built-in FastLED rainbow, plus some random sparkly glitter
 rainbow();
 addGlitter(80);
 }
void addGlitter( fract8 chanceOfGlitter)
 {
 if( random8() < chanceOfGlitter) {
 leds[ random16(NUM_LEDS) ] += CRGB::White;
 }
 }
void sinelon()
 {
 // a colored dot sweeping back and forth, with fading trails
 fadeToBlackBy( leds, NUM_LEDS, 20);
 int pos = beatsin16(13,0,NUM_LEDS);
 leds[pos] += CHSV( gHue, 255, 192);
 }
void confetti()
 {
 // random colored speckles that blink in and fade smoothly
 fadeToBlackBy( leds, NUM_LEDS, 10);
 int pos = random16(NUM_LEDS);
 leds[pos] += CHSV( gHue + random8(64), 200, 255);
 }
void bpm()
 {
 // colored stripes pulsing at a defined Beats-Per-Minute (BPM)
 uint8_t BeatsPerMinute = 62;
 CRGBPalette16 palette = PartyColors_p;
 uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
 for( int i = 0; i < NUM_LEDS; i++) { //9948
 leds[i] = ColorFromPalette(palette, gHue+(i*2), beat-gHue+(i*10));
 }
 }
void juggle() {
 // eight colored dots, weaving in and out of sync with each other
 fadeToBlackBy( leds, NUM_LEDS, 20);
 byte dothue = 0;
 for( int i = 0; i < 8; i++) {
 leds[beatsin16(i+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 255);
 dothue += 32;
 }
 }

 

About Jörg Sahlmann 256 Articles
Specialization is for insects

Be the first to comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.