Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <FastLED.h>
- #define NUM_LEDS 50
- #define DATA_PIN 10
- #define LED_TYPE WS2812B
- #define BRIGHTNESS 255
- #define SATURATION 255
- CRGB leds[NUM_LEDS];
- int rs, ls;
- int rsf, lsf;
- int r_maxval = 0;
- float l_maxval = 0;
- float r_zeroval = 10000, l_zeroval = 10000;
- int rawr = 0;
- int rawl = 0;
- #define LOW_PASS 10
- #define k 0.5
- #define V_CUT 400
- #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
- #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
- void setup() {
- FastLED.addLeds<LED_TYPE, DATA_PIN>(leds, NUM_LEDS);
- pinMode(9, OUTPUT);
- Serial.begin(9600);
- Serial.println("alive");
- sbi(ADCSRA, ADPS2);
- cbi(ADCSRA, ADPS1);
- sbi(ADCSRA, ADPS0);
- analogReference(EXTERNAL);
- }
- int md(int nw) {
- static int buf[3];
- static byte i = 0;
- buf[i] = nw;
- if (++i >= 3) {
- i = 0;
- }
- if((max(buf[0], buf[1]) == max(buf[1], buf[2]))){
- return max(buf[0], buf[2]);
- }else{
- return max(buf[1], min(buf[0], buf[2]));
- }
- return -1;
- }
- void loop() {
- analogWrite(13, 180);
- //right-channel--------------------------------------------------------
- rs = 0;
- for (byte i = 0; i < 100; i++) {
- int crs = analogRead(A4);
- //int cls=analogRead(A5);
- if (crs > rs) rs = crs;
- }
- rs = map(rs, LOW_PASS, 1023, 0, 500);
- rs = constrain(rs, 0, 500);
- rs = pow(rs, 1.4);
- rawr = rs;
- if (rawr < V_CUT) {
- rs = pow(rs, 1.4);
- }
- rs = constrain(rs, V_CUT, 2500);
- rs = md(rs);
- //rsf=rs*k + rsf*(1-k);
- if (rs > r_maxval) {
- r_maxval = rs;
- } else {
- r_maxval = r_maxval * 0.995;
- r_maxval = constrain(r_maxval, V_CUT, 2500);
- }
- if (rs < r_zeroval) {
- r_zeroval = constrain(rs, V_CUT, r_maxval);
- } else {
- r_zeroval *= 1.01;
- }
- //end of right-channel-------------------------------------------------
- //left-channel
- ls = 0;
- for (byte i = 0; i < 100; i++) {
- int cls = analogRead(A6);
- //int cls=analogRead(A5);
- if (cls > ls) ls = cls;
- }
- ls = map(ls, LOW_PASS, 1023, 0, 500);
- ls = constrain(ls, 0, 500);
- ls = pow(ls, 1.4);
- rawl = ls;
- if (rawl < V_CUT) {
- ls = pow(ls, 1.4);
- }
- ls = constrain(ls, V_CUT, 2500);
- ls = md(ls);
- //rsf=rs*k + rsf*(1-k);
- Serial.print(ls);
- Serial.print(" ");
- Serial.print(l_maxval);
- if (ls > l_maxval) {
- l_maxval = 7;
- } else {
- //l_maxval = l_maxval * 0.995;
- //l_maxval = constrain(l_maxval, V_CUT, 2500);
- }
- Serial.print(" ");
- Serial.println(l_maxval);
- if (ls < l_zeroval) {
- //l_zeroval = constrain(ls, V_CUT, l_maxval);
- } else {
- l_zeroval *= 1.01;
- }
- if ((ls - V_CUT) > 20) {
- draw(true, false);
- } else {
- draw(false, false);
- }
- if ((rs - V_CUT) > 20) {
- draw(true, true);
- } else {
- draw(false, true);
- }
- }
- void showinfo() {
- Serial.print(ls);
- Serial.print(" ");
- Serial.println(l_maxval);
- //Serial.print(" ");
- //Serial.print(l_zeroval);
- //Serial.print(" ");
- //Serial.println(rawl);
- }
- void draw(bool real, bool right) {
- int thres = 0;
- if (real) {
- if (right) {
- thres = map(rs, r_zeroval, r_maxval, 0, NUM_LEDS / 2);
- } else {
- //showinfo();
- //thres = map(ls, l_zeroval, l_maxval, NUM_LEDS, NUM_LEDS / 2);
- thres = 0;
- }
- } else {
- if (right) {
- if (leds[0] = CRGB(0, 0, 0)) {
- return;
- } else {
- for (int i = 0; i < NUM_LEDS / 2; i += 1) {
- leds[i] = CRGB(0, 0, 0);
- FastLED.show();
- }
- return;
- }
- } else {
- if (leds[NUM_LEDS] = CRGB(0, 0, 0)) {
- return;
- } else {
- for (int i = NUM_LEDS; i > NUM_LEDS / 2; i -= 1) {
- leds[i] = CRGB(0, 0, 0);
- FastLED.show();
- }
- return;
- }
- }
- }
- if (right) {
- for (int i = 0; i < NUM_LEDS / 2; i += 1) {
- leds[i] = i < thres ? CRGB(255, 0, 0) : CRGB(0, 0, 0);
- FastLED.show();
- }
- } else {
- for (int i = NUM_LEDS; i > NUM_LEDS / 2; i -= 1) {
- //Serial.println(thres);
- leds[i] = i > thres ? CRGB(255, 0, 0) : CRGB(0, 0, 0);
- FastLED.show();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment