Guest User

Untitled

a guest
Dec 26th, 2022
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. #include <FastLED.h>
  2. #define NUM_LEDS 50
  3. #define DATA_PIN 10
  4. #define LED_TYPE WS2812B
  5. #define BRIGHTNESS 255
  6. #define SATURATION 255
  7. CRGB leds[NUM_LEDS];
  8.  
  9. int rs, ls;
  10. int rsf, lsf;
  11. int r_maxval = 0;
  12. float l_maxval = 0;
  13. float r_zeroval = 10000, l_zeroval = 10000;
  14. int rawr = 0;
  15. int rawl = 0;
  16. #define LOW_PASS 10
  17. #define k 0.5
  18. #define V_CUT 400
  19. #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
  20. #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
  21.  
  22. void setup() {
  23. FastLED.addLeds<LED_TYPE, DATA_PIN>(leds, NUM_LEDS);
  24. pinMode(9, OUTPUT);
  25. Serial.begin(9600);
  26. Serial.println("alive");
  27. sbi(ADCSRA, ADPS2);
  28. cbi(ADCSRA, ADPS1);
  29. sbi(ADCSRA, ADPS0);
  30.  
  31. analogReference(EXTERNAL);
  32.  
  33. }
  34.  
  35. int md(int nw) {
  36. static int buf[3];
  37. static byte i = 0;
  38. buf[i] = nw;
  39. if (++i >= 3) {
  40. i = 0;
  41. }
  42. if((max(buf[0], buf[1]) == max(buf[1], buf[2]))){
  43. return max(buf[0], buf[2]);
  44. }else{
  45. return max(buf[1], min(buf[0], buf[2]));
  46. }
  47. return -1;
  48. }
  49.  
  50. void loop() {
  51. analogWrite(13, 180);
  52.  
  53.  
  54.  
  55.  
  56. //right-channel--------------------------------------------------------
  57. rs = 0;
  58. for (byte i = 0; i < 100; i++) {
  59. int crs = analogRead(A4);
  60. //int cls=analogRead(A5);
  61. if (crs > rs) rs = crs;
  62. }
  63. rs = map(rs, LOW_PASS, 1023, 0, 500);
  64. rs = constrain(rs, 0, 500);
  65. rs = pow(rs, 1.4);
  66. rawr = rs;
  67. if (rawr < V_CUT) {
  68. rs = pow(rs, 1.4);
  69. }
  70. rs = constrain(rs, V_CUT, 2500);
  71. rs = md(rs);
  72. //rsf=rs*k + rsf*(1-k);
  73. if (rs > r_maxval) {
  74. r_maxval = rs;
  75. } else {
  76. r_maxval = r_maxval * 0.995;
  77. r_maxval = constrain(r_maxval, V_CUT, 2500);
  78. }
  79.  
  80. if (rs < r_zeroval) {
  81. r_zeroval = constrain(rs, V_CUT, r_maxval);
  82. } else {
  83. r_zeroval *= 1.01;
  84. }
  85. //end of right-channel-------------------------------------------------
  86.  
  87.  
  88.  
  89.  
  90. //left-channel
  91. ls = 0;
  92. for (byte i = 0; i < 100; i++) {
  93. int cls = analogRead(A6);
  94. //int cls=analogRead(A5);
  95. if (cls > ls) ls = cls;
  96. }
  97. ls = map(ls, LOW_PASS, 1023, 0, 500);
  98. ls = constrain(ls, 0, 500);
  99. ls = pow(ls, 1.4);
  100. rawl = ls;
  101. if (rawl < V_CUT) {
  102. ls = pow(ls, 1.4);
  103. }
  104. ls = constrain(ls, V_CUT, 2500);
  105. ls = md(ls);
  106. //rsf=rs*k + rsf*(1-k);
  107. Serial.print(ls);
  108. Serial.print(" ");
  109. Serial.print(l_maxval);
  110. if (ls > l_maxval) {
  111. l_maxval = 7;
  112. } else {
  113. //l_maxval = l_maxval * 0.995;
  114. //l_maxval = constrain(l_maxval, V_CUT, 2500);
  115. }
  116. Serial.print(" ");
  117. Serial.println(l_maxval);
  118.  
  119. if (ls < l_zeroval) {
  120. //l_zeroval = constrain(ls, V_CUT, l_maxval);
  121. } else {
  122. l_zeroval *= 1.01;
  123. }
  124.  
  125. if ((ls - V_CUT) > 20) {
  126. draw(true, false);
  127. } else {
  128. draw(false, false);
  129. }
  130. if ((rs - V_CUT) > 20) {
  131. draw(true, true);
  132. } else {
  133. draw(false, true);
  134. }
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141. }
  142.  
  143. void showinfo() {
  144. Serial.print(ls);
  145. Serial.print(" ");
  146. Serial.println(l_maxval);
  147. //Serial.print(" ");
  148. //Serial.print(l_zeroval);
  149. //Serial.print(" ");
  150. //Serial.println(rawl);
  151. }
  152. void draw(bool real, bool right) {
  153. int thres = 0;
  154. if (real) {
  155. if (right) {
  156. thres = map(rs, r_zeroval, r_maxval, 0, NUM_LEDS / 2);
  157. } else {
  158. //showinfo();
  159. //thres = map(ls, l_zeroval, l_maxval, NUM_LEDS, NUM_LEDS / 2);
  160. thres = 0;
  161. }
  162. } else {
  163. if (right) {
  164. if (leds[0] = CRGB(0, 0, 0)) {
  165. return;
  166. } else {
  167. for (int i = 0; i < NUM_LEDS / 2; i += 1) {
  168. leds[i] = CRGB(0, 0, 0);
  169. FastLED.show();
  170. }
  171. return;
  172. }
  173. } else {
  174. if (leds[NUM_LEDS] = CRGB(0, 0, 0)) {
  175. return;
  176. } else {
  177. for (int i = NUM_LEDS; i > NUM_LEDS / 2; i -= 1) {
  178. leds[i] = CRGB(0, 0, 0);
  179. FastLED.show();
  180. }
  181. return;
  182. }
  183. }
  184. }
  185. if (right) {
  186. for (int i = 0; i < NUM_LEDS / 2; i += 1) {
  187. leds[i] = i < thres ? CRGB(255, 0, 0) : CRGB(0, 0, 0);
  188. FastLED.show();
  189. }
  190. } else {
  191. for (int i = NUM_LEDS; i > NUM_LEDS / 2; i -= 1) {
  192. //Serial.println(thres);
  193. leds[i] = i > thres ? CRGB(255, 0, 0) : CRGB(0, 0, 0);
  194. FastLED.show();
  195. }
  196. }
  197.  
  198. }
Advertisement
Add Comment
Please, Sign In to add comment