Caldin-Maldin

esphome fire

Dec 5th, 2024
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.07 KB | None | 0 0
  1. - addressable_lambda:
  2. name: "Fire"
  3. update_interval: 30ms
  4. lambda: |-
  5.  
  6. myMatrix.Fire12_tick (&it);
  7. Color result;
  8.  
  9. // Step 4. Convert heat to LED colors
  10. for( int Pixel = 0; Pixel < it.size(); Pixel++) {
  11.  
  12. uint8_t heatramp = heat[Pixel];
  13. // figure out which third of the spectrum we're in:
  14. if( heatramp > 136) { // hottest
  15. result = Color(255, 136, heatramp/4);
  16. } else if( heatramp > 80 ) { // middle
  17. result = Color(255, heatramp, 5);
  18. } else { // coolest
  19. result = Color(heatramp, 0, 50);
  20. }
  21. it[Pixel] = result;
  22. }
  23. - addressable_lambda:
  24. name: "Fire Color 1"
  25. update_interval: 30ms
  26. lambda: |-
  27.  
  28. myMatrix.Fire12_tick (&it);
  29. Color result;
  30.  
  31. // Step 4. Convert heat to LED colors
  32. for( int Pixel = 0; Pixel < it.size(); Pixel++) {
  33.  
  34. uint8_t heatramp = heat[Pixel];
  35. // figure out which third of the spectrum we're in:
  36. if( heatramp > 136) { // hottest
  37. result = Color(255, 136, heatramp/4);
  38. } else if( heatramp > 80 ) { // middle
  39. result = Color(255, heatramp, 5);
  40. } else { // coolest
  41. result = Color(heatramp, 0, 50);
  42. }
  43. it[Pixel] = myMatrix.TransformHueShift(result);
  44. }
  45. - addressable_lambda:
  46. name: "Fire Color 2"
  47. update_interval: 30ms
  48. lambda: |-
  49.  
  50. myMatrix.Fire12_tick (&it);
  51.  
  52. // Step 4. Convert heat to LED colors
  53. for( int Pixel = 0; Pixel < it.size(); Pixel++) {
  54.  
  55. //it[Pixel] = myMatrix.TransformMultiply(ESPHSVColor(30, heat[Pixel], gamma8[qadd8(heat[Pixel], 140)]).to_rgb(),current_color);
  56. it[Pixel] = myMatrix.TransformMultiply(ESPHSVColor(myMatrix.cur_hue_int, heat[Pixel], heat[Pixel]<<1).to_rgb(),current_color);
  57.  
  58. }
  59. - addressable_lambda:
  60. name: "Fire Color 3"
  61. update_interval: 30ms
  62. lambda: |-
  63. myMatrix.Fire12_tick (&it);
  64.  
  65. // Step 4. Convert heat to LED colors
  66. for( int Pixel = 0; Pixel < it.size(); Pixel++) {
  67.  
  68. uint8_t heatramp = heat[Pixel];
  69. Color result;
  70. // figure out which third of the spectrum we're in:
  71. if( heatramp > 136) { // hottest
  72. result = Color(255, 136, heatramp>>2);
  73. } else if( heatramp > 80 ) { // middle
  74. result = Color(255, heatramp>>1, 5);
  75. } else { // coolest
  76. result = Color(heatramp, 0, 50);
  77. }
  78.  
  79. it[Pixel] = myMatrix.TransformMultiply(result,current_color);
  80.  
  81. }
  82.  
  83. - addressable_lambda:
  84. name: Fireplace
  85. update_interval: 30ms
  86. lambda: |-
  87. // TODO: tune
  88. int _hue = static_cast<int>(myMatrix.cur_hue_int); // id(want_fireplace_hue);
  89. int _ambient = 1; // id(want_fireplace_ambient);
  90. int _steps = 10; // id(want_fireplace_steps);
  91.  
  92. struct leds_s {
  93. int16_t current, delta, steps;
  94. };
  95. static struct leds_s *leds = (struct leds_s *)calloc(it.size(), sizeof(struct leds_s));
  96.  
  97. for (auto i = 0; i < it.size(); ++i) {
  98. if (!leds[i].steps) {
  99. int v = random8() - leds[i].current / 100;
  100. if (v > 0) {
  101. leds[i].steps = random(60 * _steps / 100, _steps);
  102. } else {
  103. leds[i].steps = random(_steps, 140 * _steps / 100);
  104. }
  105. leds[i].delta = 100 * v / leds[i].steps;
  106. } else {
  107. leds[i].current += leds[i].delta;
  108. leds[i].steps--;
  109. }
  110. int h = leds[i].current / 100;
  111. it[i] = ESPHSVColor(_hue + scale8_video(h, 8), 255, gamma8[qadd8(h, _ambient)]);
  112. }
  113.  
  114. - addressable_lambda:
  115. name: "Flames"
  116. update_interval: 70ms
  117. lambda: |-
  118. // Regular (orange) flame:
  119. const int r = 226, g = 121, b = 35;
  120.  
  121. // Purple flame:
  122. // int r = 158, g = 8, b = 148;
  123.  
  124. // Green flame:
  125. //int r = 74, g = 150, b = 12;
  126.  
  127. // Flicker, based on our initial RGB values
  128. for(int i=0; i< it.size(); i++) {
  129. int flicker = static_cast<int>(random8(0,55));
  130. int r1 = r-flicker;
  131. int g1 = g-flicker;
  132. int b1 = b-flicker;
  133. if(g1<0) g1=0;
  134. if(r1<0) r1=0;
  135. if(b1<0) b1=0;
  136. it[i] = myMatrix.TransformMultiply(Color(r1, g1, b1),current_color);
  137. }
  138. - addressable_lambda:
  139. name: "Fire2"
  140. update_interval: 50ms
  141. lambda: |-
  142. for (uint16_t i = 0; i < it.size(); i++) { //uint8_t may be enough, if using < 256, but doesn't matter memorywise
  143. float brightness = (it.size()/2 - abs(it.size()/2 - i)) / (float)(it.size()/2); //center effect, fade out to the edges
  144. uint8_t whiteness = random(64 * brightness); //add some white, centered
  145. uint8_t redness = random(64) + random(127 * brightness); //make red
  146. uint8_t greeness = random(redness/2); //add some green to give it a yellow tint
  147. it[i] = ESPColor(whiteness + redness, whiteness + greeness, whiteness);
  148. }
Advertisement
Add Comment
Please, Sign In to add comment