Skip to content

Instantly share code, notes, and snippets.

@gsfci gsfci/lightMusic.ino
Created Dec 17, 2017

Embed
What would you like to do?
#include <FastLED.h>
#define LED_PIN 3 //К какому пину подключена лента
#define COLOR_ORDER GRB //Порядок отправки цветов на ленту, не меняем
#define CHIPSET WS2812B //Тип чипов, который используется в ленте
#define NUM_LEDS 28 //Количество светодиодов в ленте
#define BRIGHTNESS 255 //Общая яркость ленты (0-255)
#define MODE 0 //Режим работы: 0 - огни, удаляющиеся от центра
//1 - огни, удаляющиеся от центра, появляющиеся при срабатывании порога
#define MODE1_THRES 90 //Порог для режима 1
CRGB leds[NUM_LEDS]; //Массив с нашими светодиодами
int lsum = 0; //Используется для анимации
void setup() {
Serial.begin(115200); //Соединяемся с компьютером
FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); //Настраиваем работу с лентой
FastLED.setBrightness(BRIGHTNESS); //Устанавливаем яркость ленты
}
void loop() {
int vl = 0;
int vr = 0;
//Считываем и усредняем значение с аналоговых входов
for (int i = 0; i < 100; i++) {
vl += analogRead(0);
vr += analogRead(1);
}
//Делим на 100 и умножаем на 4
vl /= 25;
vr /= 25;
#if MODE == 0
#if NUM_LEDS % 2 == 1
//Если нечётное количество светодиодов в ленте, то выполняем этот код
for (int i = NUM_LEDS - 2; i >= NUM_LEDS / 2; i--) {
leds[i + 1] = leds[i];
}
for (int i = 0; i <= NUM_LEDS / 2; i++) {
leds[i] = leds[i + 1];
}
leds[NUM_LEDS / 2] = CRGB(vl, vr, abs(lsum - (vl + vr)) / 8);
#else
//А если четное - то этот
for (int i = NUM_LEDS - 2; i >= NUM_LEDS / 2; i--) {
leds[i + 1] = leds[i];
}
for (int i = 0; i <= NUM_LEDS / 2 - 2; i++) {
leds[i] = leds[i + 1];
}
leds[NUM_LEDS / 2] = CRGB(vl, vr, abs(lsum - (vl + vr)) / 8);
leds[NUM_LEDS / 2 - 1] = CRGB(vl, vr, abs(lsum - (vl + vr)) / 8);
#endif
#else if MODE == 1
#if NUM_LEDS % 2 == 1
//Если нечётное количество светодиодов в ленте, то выполняем этот код
for (int i = NUM_LEDS - 2; i >= NUM_LEDS / 2; i--) {
leds[i + 1] = leds[i];
}
for (int i = 0; i <= NUM_LEDS / 2; i++) {
leds[i] = leds[i + 1];
}
if (vl + vr >= MODE1_THRES * 2) {
leds[NUM_LEDS / 2] = CRGB(vl, vr, abs(lsum - (vl + vr)) / 8);
} else {
leds[NUM_LEDS / 2] = CRGB(0, 0, 0);
}
#else
//А если четное - то этот
for (int i = NUM_LEDS - 2; i >= NUM_LEDS / 2; i--) {
leds[i + 1] = leds[i];
}
for (int i = 0; i <= NUM_LEDS / 2 - 2; i++) {
leds[i] = leds[i + 1];
}
if (vl + vr >= MODE1_THRES * 2) {
leds[NUM_LEDS / 2] = CRGB(vl, vr, abs(lsum - (vl + vr)) / 8);
leds[NUM_LEDS / 2 - 1] = CRGB(vl, vr, abs(lsum - (vl + vr)) / 8);
} else {
leds[NUM_LEDS / 2] = CRGB(0, 0, 0);
leds[NUM_LEDS / 2 - 1] = CRGB(0, 0, 0);
}
#endif
#endif
//выводим информацию на компьютер
Serial.print(String(vl));
Serial.print(" ");
Serial.print(String(vr));
Serial.print(" ");
Serial.println(String(abs(lsum - (vl + vr)) / 8));
FastLED.show();
lsum = (vl + vr) / 2;
delay(20); //Чуть-чуть задержимся
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.