Advertisement
atuline

trig_beatsin.ino

Aug 17th, 2021
1,264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. /*
  2.   File: trig_beatsin
  3.  
  4.   By: Andrew Tuline
  5.  
  6.   Date: August, 2021
  7.  
  8.   Triggered breathing aka sine wave starting at 0, but using beatsin16() instead of a cos function, which starts at 0.
  9.  
  10.   This version was inspired by:
  11.  
  12.   https://old.reddit.com/r/FastLED/comments/p45t9r/how_to_restartreset_sinelon_effect_or_beatsin16/
  13.  
  14.   Although I didn't replicate their results, this seems to work well.
  15.  
  16. */
  17.  
  18. #include <FastLED.h>
  19.  
  20. #define LED_PIN 12
  21. #define NUM_LEDS 30
  22. #define COLOR_ORDER GRB
  23. #define LED_TYPE WS2812B
  24. #define MAX_BRIGHTNESS 255
  25.  
  26. struct CRGB leds[NUM_LEDS];
  27.  
  28. void setup() {
  29.   Serial.begin(115200);
  30.   LEDS.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  31.   FastLED.setBrightness(MAX_BRIGHTNESS);
  32. } // setup()
  33.  
  34.  
  35. void loop() {
  36.   trigbeat(10);
  37.   FastLED.show();
  38. } // loop()
  39.  
  40.  
  41. void trigbeat(int bpm) {
  42.  
  43.   static uint32_t previousMillis;
  44.  
  45.   uint32_t currentMillis = millis();
  46.   if (currentMillis - previousMillis >= bpm * 600) {                              // Reset after bpm.
  47.     Serial.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
  48.     previousMillis = currentMillis;
  49.   }
  50.  
  51.   fadeToBlackBy(leds, NUM_LEDS, 16);
  52.   uint16_t gPos = beatsin16(bpm, 0, NUM_LEDS - 1, previousMillis, 49152);         // bpm, lowest, highest,timebase, phase shift value.
  53.   Serial.print(gPos); Serial.print(" "); Serial.println(previousMillis);
  54.   leds[gPos] = CHSV(0, 255, 192);
  55. } // trigbeat()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement