LED Disco golvet (1 / 9 steg)
Steg 1: Steg 3/4 alternativa FastLED
Arduinoen kan programmeras med FastLED 3.1 NoisePlusPalette https://github.com/FastLED/FastLED/tree/master/exa... Det finns ett exempel video av detta ingår ovan. Du måste också installera FastLED 3.1 biblioteket till datorn programmering arduino med. https://github.com/FastLED/FastLED
Var noga med att ändra pin-koder i programmet som visas i koden nedan.
Om du använder ett nätaggregat för din Arduino kan du enkelt slå på kraften till det och sedan makten att lysdioderna och du är go!
KODEN
---------------------------------------------------------------------------------
#include
#define LED_PIN 3 #define DATA_PIN 2 #define CLOCK_PIN 3 #define NUM_LEDS 120 #define ljusstyrka 64 #define LED_TYPE WS2801 #define COLOR_ORDER GBR CRGB lysdioder [NUM_LEDS];
#define UPDATES_PER_SECOND 100
Detta exempel visar flera olika sätt att konfigurera och använda "paletter" av färger / / med FastLED. / / Dessa kompakta paletter ger ett enkelt sätt att åter färglägga din / / animation i farten, snabbt, enkelt och med låga omkostnader. / / ANVÄNDA paletter är mycket enklare i praktiken än i teorin, så först bara / / kör denna skiss, och titta på vackra lampor som du sedan läser igenom / / koden. Även om denna skiss har åtta (eller mer) olika färgscheman, / / hela skissen sammanställer ner till ca 6,5 K på AVR. / / FastLED ger några förkonfigurerade färgpaletter, och gör det / / extremt lätt att göra upp din egna färgscheman med paletter. / / Några anteckningar om mer abstrakt teori och praxis"av / / FastLED kompakt paletter är längst ned i filen.
CRGBPalette16 currentPalette; TBlendType currentBlending;
extern CRGBPalette16 myRedWhiteBluePalette; extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;
void setup() {fördröja (3000); / / uppstart säkerhet fördröjning FastLED.addLeds (lysdioder, NUM_LEDS); FastLED.setBrightness (ljusstyrka); currentPalette = RainbowColors_p; currentBlending = blandning; }
void loop() {ChangePalettePeriodically();
statisk uint8_t startIndex = 0; startIndex = startIndex + 1. / * rörelse hastighet * /
FillLEDsFromPaletteColors (startIndex);
FastLED.show(); FastLED.delay(1000 / UPDATES_PER_SECOND); }
void FillLEDsFromPaletteColors (uint8_t colorIndex) {uint8_t ljusstyrka = 255; för (int jag = 0; jag < NUM_LEDS; i ++) {lysdioder [i] = ColorFromPalette (currentPalette, colorIndex, ljusstyrka, currentBlending); colorIndex += 3;}}
Det finns flera olika paletter av färger här. / / FastLED ger flera "förinställda" paletter: RainbowColors_p, RainbowStripeColors_p, / / OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p och PartyColors_p. / / / / Dessutom manuellt kan du definiera egna färgpaletter, eller du kan skriva / / kod som skapar färgpaletter i farten. Alla visas här.
void ChangePalettePeriodically() {uint8_t secondHand = (millis() / 1000) % 60, statisk uint8_t lastSecond = 99; om (lastSecond! = secondHand) {lastSecond = secondHand; om (secondHand == 0) {currentPalette = RainbowColors_p; currentBlending = blandning;} om (secondHand == 10) {currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND;} om (secondHand == 15) {currentPalette = RainbowStripeColors_p; currentBlending = blandning;} om (secondHand == 20) {SetupPurpleAndGreenPalette(); currentBlending = blandning;} om (secondHand == 25) {SetupTotallyRandomPalette(); currentBlending = blandning;} om (secondHand == 30) {SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND;} om (secondHand == 35) {SetupBlackAndWhiteStripedPalette(); currentBlending = blandning;} om (secondHand == 40) {currentPalette = CloudColors_p; currentBlending = blandning;} om (secondHand == 45) {currentPalette = PartyColors_p; currentBlending = blandning; {} om (secondHand == 50) {currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND;} om (secondHand == 55) {currentPalette = myRedWhiteBluePalette_p; currentBlending = blandning;}} }
Denna funktion fyller paletten med helt slumpmässiga färger. void SetupTotallyRandomPalette() {för (int jag = 0; jag < 16; i ++) {currentPalette [i] = CHSV (random8(), 255, random8());}}
Den här funktionen ställer in en palett med svarta och vita ränder, / / använda koden. Eftersom paletten är effektivt en mängd / / sexton CRGB färger, olika fill_ * funktioner kan användas / / för att ställa upp dem. void SetupBlackAndWhiteStripedPalette() {/ / svart alla 16 palett poster... fill_solid (currentPalette, 16, CRGB::Black); / / och ange varje fjärde en till vit. currentPalette [0] = CRGB::White; currentPalette [4] = CRGB::White; currentPalette [8] = CRGB::White; currentPalette [12] = CRGB::White;
}
Den här funktionen ställer in en palett med lila och gröna ränder. void SetupPurpleAndGreenPalette() {CRGB lila = CHSV (HUE_PURPLE, 255, 255); CRGB green = CHSV (HUE_GREEN, 255, 255); CRGB svart = CRGB::Black; currentPalette = CRGBPalette16 (grön, grön, svart, svart, lila, lila, svart, svart, grön, grön, svart, svart, lila, lila, svart, svart); }
Detta exempel visar hur du ställer in en statisk färgpalett / / som lagras i PROGMEM (flash), vilket är nästan alltid mer / / riklig än RAM. En statisk PROGMEM palett så här / / tar upp 64 byte av flash. CONST TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM = {CRGB::Red, CRGB::Gray, / / "vit" är för ljus jämfört med röda och blå CRGB::Blue, CRGB::Black,
CRGB::Red, CRGB::Gray, CRGB::Blue, CRGB::Black,
CRGB::Red, CRGB::Red, CRGB::Gray, CRGB::Gray, CRGB::Blue, CRGB::Blue, CRGB::Black, CRGB::Black};
Tillägs anteckningar om FastLED kompakt paletter: / / / / normalt, i datorgrafik, paletten (eller "color lookup table") / / har 256 poster, var och en innehåller en specifik 24-bitars RGB-färg. Du kan sedan / / index i färgpaletten med hjälp av ett enkelt 8-bitars (en byte) värde. En 256-entry färgpalett tar upp 768 byte ram, vilken på Arduino / / är helt möjligen "för många" byte. / / FastLED erbjuder traditionella 256-element paletter, för uppställningar som / / har råd 768 byte kostnaden i RAM. / / Men FastLED erbjuder också ett kompakt alternativ. FastLED erbjuder / / paletter som lagra 16 distinkta poster, men kan nås som om / / de faktiskt har 256 poster; Detta sker genom interpolering / / mellan de 16 explicit används för att skapa femton mellanliggande palett / / poster mellan varje par. / / Så till exempel, om du ställer in de första två uttryckliga posterna i en kompakt / / palett och grön (0,255,0) och blå (0,0,255), och sedan hämtas / / de första sexton transaktionerna från den virtuella paletten (av 256), skulle du få / / grön, följt av en mjuk gradient från grönt till blått, och sedan blå.