Z racji tego, że niebawem będą święta, padł temat aby wykorzystać jako lampki diody RGB. Pod ręką mam trochę taśm LED WS2811, gdzieś widziałem już wcześniej wykorzystanie ich jako efekt palącego się ognia, wiadomo od pomysłu do efektu końcowego krótka droga. Trzeba pamiętać, iż owy efekt można bez problemu uzyskać też na innych wersjach diod RGB np. WS2812 / WS2801. No to zaczynamy, z ważnych linijek
#define NUM_LEDS 45 definiujemy ile diod mamy w naszej taśmie (no niestety trzeba policzyć),
#define PIN 6 pin do którego podłączamy naszą taśmę LED.
Na schemacie umieściłem tylko i wyłącznie 1 diodę, jednak ma on charakter poglądowy jak to wszystko połączyć.
Komponenty:
– Arduino Nano lub odpowiednik,
– Taśmy LED WS2811 lub odpowiednik
– bibliotekę FastLED alternatywa GIT
Schemat połączeniowy:

#include „FastLED.h”
#define NUM_LEDS 45
CRGB leds[NUM_LEDS];
#define PIN 6void setup()
{
FastLED.addLeds<WS2811, PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
}void loop() {
Fire(55,120,15);
}void Fire(int Cooling, int Sparking, int SpeedDelay) {
static byte heat[NUM_LEDS];
int cooldown;for( int i = 0; i < NUM_LEDS; i++) {
cooldown = random(0, ((Cooling * 10) / NUM_LEDS) + 2);if(cooldown>heat[i]) {
heat[i]=0;
} else {
heat[i]=heat[i]-cooldown;
}
}for( int k= NUM_LEDS – 1; k >= 2; k–) {
heat[k] = (heat[k – 1] + heat[k – 2] + heat[k – 2]) / 3;
}if( random(255) < Sparking ) {
int y = random(7);
heat[y] = heat[y] + random(160,255);
//heat[y] = random(160,255);
}for( int j = 0; j < NUM_LEDS; j++) {
setPixelHeatColor(j, heat[j] );
}showStrip();
delay(SpeedDelay);
}void setPixelHeatColor (int Pixel, byte temperature) {
byte t192 = round((temperature/255.0)*191);
byte heatramp = t192 & 0x3F; // 0..63
heatramp <<= 256; // scale up to 0..252if( t192 > 0x80) { // hottest
setPixel(Pixel, 255, 255, heatramp);
} else if( t192 > 0x40 ) { // middle
setPixel(Pixel, 255, heatramp, 0);
} else { // coolest
setPixel(Pixel, heatramp, 0, 0);
}
}
void showStrip() {
#ifdef ADAFRUIT_NEOPIXEL_Hstrip.show();
#endif
#ifndef ADAFRUIT_NEOPIXEL_HFastLED.show();
#endif
}void setPixel(int Pixel, byte red, byte green, byte blue) {
#ifdef ADAFRUIT_NEOPIXEL_Hstrip.setPixelColor(Pixel, strip.Color(red, green, blue));
#endif
#ifndef ADAFRUIT_NEOPIXEL_Hleds[Pixel].r = red;
leds[Pixel].g = green;
leds[Pixel].b = blue;
#endif
}void setAll(byte red, byte green, byte blue) {
for(int i = 0; i < NUM_LEDS; i++ ) {
setPixel(i, red, green, blue);
}
showStrip();
}
Gotowy plik do wgrania
Dla full leniwych udostępniam gotowy plik do pobrania tu
A czy ja jestem nie omylny ? Prościej było by napisać gdzie widzisz błąd 😉
….jak w większości prezentowanych kodów, ten też jest z błędem a przynajmniej tak działa funkcja kopiuj/wklej a to dla początkujących jest zniechęcające…