Загрузка страницы

11 августа 2023 г.

#include "FastLED.h" #include "FastLEDsupport.h" // нужна для шума #define PIN 13 #define WIDTH 11 // Светодиодов в кольце #define HEIGHT 18 // Колец в лампе #define NUM_LEDS 300 //300 CRGB leds[NUM_LEDS]; void setup() { pinMode(PIN, OUTPUT); FastLED.addLedsWS2811, PIN, RGB(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); } void loop() { //rainbowCycle(1); //RunningLights(0xff,0x00,0x00, 50); //Sparkle(random(255), random(255), random(255), 0); //Twinkle(0xff, 0, 0, 10, 1, false); //NewKITT(0xff, 0, 0, 8, 10, 50); //CylonBounce(0xff, 0, 0, 4, 2, 10); //HalloweenEyes(0xff, 0x00, 0x00, 2, 6, true, random(5, 50), random(50, 150), random(100, 1000)); //Strobe(0xff, 0xff, 0xff, 10, 50, 1000); BBallsV(8,64,0, 11); //Fire(55,120,15); //meteorRain(0xff,0x80,0x70,10, 64, true, 30); } //------------------------------------------------ void BBallsV(byte red, byte green, byte blue, int BallCount) { float Gravity = -9.81; //Гравитация int StartHeight = 1; // Начальная высота float Height[BallCount]; // Массив высот float ImpactVelocityStart = sqrt( -3 * Gravity * StartHeight ); // -2 * 9,81 * 1 Начало скорости удара float ImpactVelocity[BallCount]; // Скорость удара float TimeSinceLastBounce[BallCount]; // Время с момента последнего отскока int Position[BallCount]; // Позиция long ClockTimeSinceLastBounce[BallCount]; // Время на часах С момента последнего отскока float Dampening[BallCount]; for (int i = 0 ; i BallCount ; i++) { //Цикл по количеству шаров ClockTimeSinceLastBounce[i] = millis(); // Время на часах С момента последнего отскока Height[i] = StartHeight; // Высота = Начальная высота Position[i] = 0; // Позиция = 0 ImpactVelocity[i] = ImpactVelocityStart; //Скорость удара = Начало скорости удара TimeSinceLastBounce[i] = 0; // Время с момента последнего отскока Dampening[i] = 0.90 - float(i)/pow(BallCount,2); // гашение } while (true) { for (int i = 0 ; i BallCount ; i++) { TimeSinceLastBounce[i] = millis() - ClockTimeSinceLastBounce[i]; // Время с момента последнего отскока Height[i] = 0.5 * Gravity * pow( TimeSinceLastBounce[i]/1000 , 2.0 ) + ImpactVelocity[i] * TimeSinceLastBounce[i]/1000; if ( Height[i] 0 ) { // Если высота 0 Height[i] = 0; // Высота =0 ImpactVelocity[i] = Dampening[i] * ImpactVelocity[i]; // Скорость удара = гашение * Скорость удара ClockTimeSinceLastBounce[i] = millis(); // Время на часах С момента последнего отскока if ( ImpactVelocity[i] 0.01 ) { // ЕСЛИ Скорость удара 0.01 ImpactVelocity[i] = ImpactVelocityStart; // Скорость удара = sqrt( -2 * Gravity * StartHeight ); // -2 * 9,81 * 1 Начало скорости удара } } Position[i] = round( Height[i] * (18 - 1) / StartHeight ); } for (int i = 0 ; i BallCount ; i++) { setPixel(Position[i]*11+i,red,green,blue); } showStrip(); setAll(0,0,0); } }

Видео 11 августа 2023 г. автора gps38region
Показать
Информация
11 августа 2023 г. 3:03:50
00:00:20
Яндекс.Метрика