CCCPaste

"Fire Simulation" rev_01

/********* Pleasedontcode.com **********

	Pleasedontcode thanks you for automatic code generation! Enjoy your code!

	- Terms and Conditions:
	You have a non-exclusive, revocable, worldwide, royalty-free license
	for personal and commercial use. Attribution is optional; modifications
	are allowed, but you're responsible for code maintenance. We're not
	liable for any loss or damage. For full terms,
	please visit pleasedontcode.com/termsandconditions.

	- Project: "Fire Simulation"
	- Source Code NOT compiled for: Arduino Nano
	- Source Code created on: 2024-07-09 15:46:57

********* Pleasedontcode.com **********/

/****** SYSTEM REQUIREMENTS *****/
/****** SYSTEM REQUIREMENT 1 *****/
	/* Implement a red fire simulation with WS2812B LEDs */
	/* using the FastLED library. Connect the LED data */
	/* pin to pin 2. Develop setup and loop functions to */
	/* initialize and continuously update the LED states. */
/****** END SYSTEM REQUIREMENTS *****/

/****** DEFINITION OF LIBRARIES *****/
#include   //https://github.com/FastLED/FastLED

/****** FUNCTION PROTOTYPES *****/
void setup(void);
void loop(void);
void Fire2012(void);

/***** DEFINITION OF DIGITAL OUTPUT PINS *****/
const uint8_t WS2812B_WS2812B_DIN_PIN_D2 = 2;

/***** DEFINITION OF OUTPUT RAW VARIABLES *****/
/***** used to store raw data *****/
bool WS2812B_WS2812B_DIN_PIN_D2_rawData = 0;

/***** DEFINITION OF OUTPUT PHYSICAL VARIABLES *****/
/***** used to store data after characteristic curve transformation *****/
float WS2812B_WS2812B_DIN_PIN_D2_phyData = 0.0;

/****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/
#define NUM_LEDS 30
#define LED_PIN  WS2812B_WS2812B_DIN_PIN_D2
#define COLOR_ORDER GRB
#define CHIPSET WS2812B
#define BRIGHTNESS 200
#define FRAMES_PER_SECOND 60

#define COOLING  55
#define SPARKING 120

CRGB leds[NUM_LEDS];

void setup(void) {
  // put your setup code here, to run once:
  delay(3000); // sanity delay
  FastLED.addLeds(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);
  pinMode(WS2812B_WS2812B_DIN_PIN_D2, OUTPUT);
}

void loop(void) {
  // put your main code here, to run repeatedly:
  Fire2012(); // Fire simulation
  FastLED.show();
  FastLED.delay(1000 / FRAMES_PER_SECOND);
}

void Fire2012() {
  static uint8_t heat[NUM_LEDS];

  // Step 1. Cool down every cell a little
  for (int i = 0; i < NUM_LEDS; i++) {
    heat[i] = qsub8(heat[i], random8(0, ((COOLING * 10) / NUM_LEDS) + 2));
  }

  // Step 2. Heat from each cell drifts 'up' and diffuses a little
  for (int k = NUM_LEDS - 1; k >= 2; k--) {
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;
  }

  // Step 3. Randomly ignite new 'sparks' near the bottom
  if (random8() < SPARKING) {
    int y = random8(7);
    heat[y] = qadd8(heat[y], random8(160, 255));
  }

  // Step 4. Convert heat to LED colors
  for (int j = 0; j < NUM_LEDS; j++) {
    leds[j] = HeatColor(heat[j]);
  }
}