LED flash by FFT

Dependencies:   PixelArray mbed

circuit diagram

回路図。

/media/uploads/ohneta/lpc1114fn28-ws2812b-fft.pdf

Committer:
ohneta
Date:
Fri Jan 29 15:05:47 2016 +0000
Revision:
0:65fd42a2043a
Child:
1:46df0dd09ed2
?????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ohneta 0:65fd42a2043a 1 //--------------------------------------------------------------
ohneta 0:65fd42a2043a 2 /**
ohneta 0:65fd42a2043a 3 * SoundWS2812B-FFT for LPC1114FN28
ohneta 0:65fd42a2043a 4 *
ohneta 0:65fd42a2043a 5 * programed by Takehisa Oneta(ohneta)
ohneta 0:65fd42a2043a 6 * Aug. 2015
ohneta 0:65fd42a2043a 7 */
ohneta 0:65fd42a2043a 8 //--------------------------------------------------------------
ohneta 0:65fd42a2043a 9
ohneta 0:65fd42a2043a 10 #include "mbed.h"
ohneta 0:65fd42a2043a 11 #include <math.h>
ohneta 0:65fd42a2043a 12 #include "neopixel.h"
ohneta 0:65fd42a2043a 13 #include "fftReal.hpp"
ohneta 0:65fd42a2043a 14
ohneta 0:65fd42a2043a 15 #include "SoundWS2812B-FFT.h"
ohneta 0:65fd42a2043a 16
ohneta 0:65fd42a2043a 17 //--------------------------------------------------------------
ohneta 0:65fd42a2043a 18 #ifdef _DEBUG_UART_
ohneta 0:65fd42a2043a 19 Serial pc(USBTX, USBRX);
ohneta 0:65fd42a2043a 20 #endif
ohneta 0:65fd42a2043a 21 AnalogIn ainR(dp9);
ohneta 0:65fd42a2043a 22 AnalogIn ainL(dp10);
ohneta 0:65fd42a2043a 23 Ticker soundInterrupt;
ohneta 0:65fd42a2043a 24 DigitalOut led(LED2);
ohneta 0:65fd42a2043a 25
ohneta 0:65fd42a2043a 26 //----------------------------------------------------
ohneta 0:65fd42a2043a 27 neopixel::PixelArray pixelArray(dp2, neopixel::BYTE_ORDER_GRB, neopixel::PROTOCOL_800KHZ);
ohneta 0:65fd42a2043a 28 neopixel::Pixel gPixelRGB[] = {
ohneta 0:65fd42a2043a 29 {0x00, 0x00, 0x00},
ohneta 0:65fd42a2043a 30 {0x00, 0x00, 0x00},
ohneta 0:65fd42a2043a 31 {0x00, 0x00, 0x00},
ohneta 0:65fd42a2043a 32 {0x00, 0x00, 0x00},
ohneta 0:65fd42a2043a 33 };
ohneta 0:65fd42a2043a 34
ohneta 0:65fd42a2043a 35 #ifdef _DEBUG_UART_
ohneta 0:65fd42a2043a 36 const char *gBarGraf[] = {
ohneta 0:65fd42a2043a 37 " ",
ohneta 0:65fd42a2043a 38 "* ",
ohneta 0:65fd42a2043a 39 "** ",
ohneta 0:65fd42a2043a 40 "*** ",
ohneta 0:65fd42a2043a 41 "**** ",
ohneta 0:65fd42a2043a 42 "***** ",
ohneta 0:65fd42a2043a 43 "****** ",
ohneta 0:65fd42a2043a 44 "******* ",
ohneta 0:65fd42a2043a 45 "******** ",
ohneta 0:65fd42a2043a 46 "********* ",
ohneta 0:65fd42a2043a 47 "********** ",
ohneta 0:65fd42a2043a 48 "*********** ",
ohneta 0:65fd42a2043a 49 "************ ",
ohneta 0:65fd42a2043a 50 "************* ",
ohneta 0:65fd42a2043a 51 "************** ",
ohneta 0:65fd42a2043a 52 "*************** ",
ohneta 0:65fd42a2043a 53 "**************** ",
ohneta 0:65fd42a2043a 54 "***************** ",
ohneta 0:65fd42a2043a 55 "****************** ",
ohneta 0:65fd42a2043a 56 "******************* ",
ohneta 0:65fd42a2043a 57 "******************** ",
ohneta 0:65fd42a2043a 58 "********************* ",
ohneta 0:65fd42a2043a 59 "********************** ",
ohneta 0:65fd42a2043a 60 "*********************** ",
ohneta 0:65fd42a2043a 61 "************************ ",
ohneta 0:65fd42a2043a 62 "************************* ",
ohneta 0:65fd42a2043a 63 "************************** ",
ohneta 0:65fd42a2043a 64 "*************************** ",
ohneta 0:65fd42a2043a 65 "**************************** ",
ohneta 0:65fd42a2043a 66 "***************************** ",
ohneta 0:65fd42a2043a 67 "****************************** ",
ohneta 0:65fd42a2043a 68 "******************************* ",
ohneta 0:65fd42a2043a 69 "********************************",
ohneta 0:65fd42a2043a 70 };
ohneta 0:65fd42a2043a 71 #endif
ohneta 0:65fd42a2043a 72
ohneta 0:65fd42a2043a 73 //--------------------------------------------------------------
ohneta 0:65fd42a2043a 74
ohneta 0:65fd42a2043a 75 uint32_t gSoundIntrFlag = 0;
ohneta 0:65fd42a2043a 76 uint32_t gSoundIntrCount = 0;
ohneta 0:65fd42a2043a 77 uint32_t gLedCounter = 0;
ohneta 0:65fd42a2043a 78
ohneta 0:65fd42a2043a 79 float gBufferR[SAMPLING_NUM];
ohneta 0:65fd42a2043a 80 float gBufferL[SAMPLING_NUM];
ohneta 0:65fd42a2043a 81 FftReal gFFT(SAMPLING_NUM);
ohneta 0:65fd42a2043a 82
ohneta 0:65fd42a2043a 83 //----------------------------------------------------
ohneta 0:65fd42a2043a 84 /**
ohneta 0:65fd42a2043a 85 * Ticker handler
ohneta 0:65fd42a2043a 86 */
ohneta 0:65fd42a2043a 87 void soundInterruptHandle()
ohneta 0:65fd42a2043a 88 {
ohneta 0:65fd42a2043a 89 if (gSoundIntrFlag == 0) {
ohneta 0:65fd42a2043a 90 gSoundIntrFlag = 1;
ohneta 0:65fd42a2043a 91 }
ohneta 0:65fd42a2043a 92 gLedCounter++;
ohneta 0:65fd42a2043a 93 }
ohneta 0:65fd42a2043a 94
ohneta 0:65fd42a2043a 95 //----------------------------------------------------
ohneta 0:65fd42a2043a 96 #ifdef _DEBUG_UART_
ohneta 0:65fd42a2043a 97 void uartFftView(Complex *yRight, Complex *yLeft)
ohneta 0:65fd42a2043a 98 {
ohneta 0:65fd42a2043a 99
ohneta 0:65fd42a2043a 100 //pc.printf("%c[2J%c[;H", 27, 27);
ohneta 0:65fd42a2043a 101 pc.printf("%c[%c;%cH", 27, 0, 0);
ohneta 0:65fd42a2043a 102 //pc.printf("%c[;H", 27);
ohneta 0:65fd42a2043a 103
ohneta 0:65fd42a2043a 104 pc.printf("Right\r\n");
ohneta 0:65fd42a2043a 105 for (int n = 0; n < (SAMPLING_NUM / 2); n++) {
ohneta 0:65fd42a2043a 106 uint32_t dt = (uint32_t)abs(yRight[n]);
ohneta 0:65fd42a2043a 107 if (dt >= (SAMPLING_NUM / 2)) {
ohneta 0:65fd42a2043a 108 dt = SAMPLING_NUM / 2;
ohneta 0:65fd42a2043a 109 }
ohneta 0:65fd42a2043a 110 pc.printf("%2d[%02d]: %s\r\n", n, dt, gBarGraf[dt]);
ohneta 0:65fd42a2043a 111 }
ohneta 0:65fd42a2043a 112
ohneta 0:65fd42a2043a 113 pc.printf("\r\nLeft\r\n");
ohneta 0:65fd42a2043a 114 for (int n = 0; n < (SAMPLING_NUM / 2); n++) {
ohneta 0:65fd42a2043a 115 uint32_t dt = (uint32_t)abs(yLeft[n]);
ohneta 0:65fd42a2043a 116 if (dt >= (SAMPLING_NUM / 2)) {
ohneta 0:65fd42a2043a 117 dt = SAMPLING_NUM / 2;
ohneta 0:65fd42a2043a 118 }
ohneta 0:65fd42a2043a 119 pc.printf("%2d[%02d]: %s\r\n", n, dt, gBarGraf[dt]);
ohneta 0:65fd42a2043a 120 }
ohneta 0:65fd42a2043a 121 }
ohneta 0:65fd42a2043a 122 #endif
ohneta 0:65fd42a2043a 123
ohneta 0:65fd42a2043a 124 //----------------------------------------------------
ohneta 0:65fd42a2043a 125 void outputLeds(Complex *yRight, Complex *yLeft)
ohneta 0:65fd42a2043a 126 {
ohneta 0:65fd42a2043a 127 int r, g, b;
ohneta 0:65fd42a2043a 128 #if 1
ohneta 0:65fd42a2043a 129 r = ( (uint32_t)abs(yRight[1]) +
ohneta 0:65fd42a2043a 130 (uint32_t)abs(yRight[2]) );
ohneta 0:65fd42a2043a 131 g = ( (uint32_t)abs(yLeft[1]) +
ohneta 0:65fd42a2043a 132 (uint32_t)abs(yLeft[2]) );
ohneta 0:65fd42a2043a 133 #else
ohneta 0:65fd42a2043a 134 r = ( (uint32_t)abs(yRight[0]) +
ohneta 0:65fd42a2043a 135 (uint32_t)abs(yRight[1]) +
ohneta 0:65fd42a2043a 136 (uint32_t)abs(yRight[2]) );
ohneta 0:65fd42a2043a 137 g = ( (uint32_t)abs(yLeft[0]) +
ohneta 0:65fd42a2043a 138 (uint32_t)abs(yLeft[1]) +
ohneta 0:65fd42a2043a 139 (uint32_t)abs(yLeft[2]) );
ohneta 0:65fd42a2043a 140 #endif
ohneta 0:65fd42a2043a 141 b = (r + g) / 2;
ohneta 0:65fd42a2043a 142 gPixelRGB[0].red = (r > 255) ? 255 : r;
ohneta 0:65fd42a2043a 143 gPixelRGB[0].green = (g > 255) ? 255 : g;
ohneta 0:65fd42a2043a 144 gPixelRGB[0].blue = (b > 255) ? 255 : b;
ohneta 0:65fd42a2043a 145
ohneta 0:65fd42a2043a 146 r = ( (uint32_t)abs(yRight[3]) +
ohneta 0:65fd42a2043a 147 (uint32_t)abs(yRight[4]) +
ohneta 0:65fd42a2043a 148 (uint32_t)abs(yRight[5]) +
ohneta 0:65fd42a2043a 149 (uint32_t)abs(yRight[6]) );
ohneta 0:65fd42a2043a 150 g = ( (uint32_t)abs(yLeft[3]) +
ohneta 0:65fd42a2043a 151 (uint32_t)abs(yLeft[4]) +
ohneta 0:65fd42a2043a 152 (uint32_t)abs(yLeft[5]) +
ohneta 0:65fd42a2043a 153 (uint32_t)abs(yLeft[6]) );
ohneta 0:65fd42a2043a 154 b = (r + g) / 2;
ohneta 0:65fd42a2043a 155 gPixelRGB[1].red = (r > 255) ? 255 : r;
ohneta 0:65fd42a2043a 156 gPixelRGB[1].green = (g > 255) ? 255 : g;
ohneta 0:65fd42a2043a 157 gPixelRGB[1].blue = (b > 255) ? 255 : b;
ohneta 0:65fd42a2043a 158
ohneta 0:65fd42a2043a 159 r = ( (uint32_t)abs(yRight[7]) +
ohneta 0:65fd42a2043a 160 (uint32_t)abs(yRight[8]) +
ohneta 0:65fd42a2043a 161 (uint32_t)abs(yRight[9]) +
ohneta 0:65fd42a2043a 162 (uint32_t)abs(yRight[10]) +
ohneta 0:65fd42a2043a 163 (uint32_t)abs(yRight[11]) +
ohneta 0:65fd42a2043a 164 (uint32_t)abs(yRight[12]) +
ohneta 0:65fd42a2043a 165 (uint32_t)abs(yRight[14]) +
ohneta 0:65fd42a2043a 166 (uint32_t)abs(yRight[15]) );
ohneta 0:65fd42a2043a 167 g = ( (uint32_t)abs(yLeft[7]) +
ohneta 0:65fd42a2043a 168 (uint32_t)abs(yLeft[8]) +
ohneta 0:65fd42a2043a 169 (uint32_t)abs(yLeft[9]) +
ohneta 0:65fd42a2043a 170 (uint32_t)abs(yLeft[10]) +
ohneta 0:65fd42a2043a 171 (uint32_t)abs(yLeft[11]) +
ohneta 0:65fd42a2043a 172 (uint32_t)abs(yLeft[12]) +
ohneta 0:65fd42a2043a 173 (uint32_t)abs(yLeft[14]) +
ohneta 0:65fd42a2043a 174 (uint32_t)abs(yLeft[15]) );
ohneta 0:65fd42a2043a 175 b = (r + g) / 2;
ohneta 0:65fd42a2043a 176 gPixelRGB[2].red = (r > 255) ? 255 : r;
ohneta 0:65fd42a2043a 177 gPixelRGB[2].green = (g > 255) ? 255 : g;
ohneta 0:65fd42a2043a 178 gPixelRGB[2].blue = (b > 255) ? 255 : b;
ohneta 0:65fd42a2043a 179
ohneta 0:65fd42a2043a 180 r = ( (uint32_t)abs(yRight[16]) +
ohneta 0:65fd42a2043a 181 (uint32_t)abs(yRight[17]) +
ohneta 0:65fd42a2043a 182 (uint32_t)abs(yRight[18]) +
ohneta 0:65fd42a2043a 183 (uint32_t)abs(yRight[19]) +
ohneta 0:65fd42a2043a 184 (uint32_t)abs(yRight[20]) +
ohneta 0:65fd42a2043a 185 (uint32_t)abs(yRight[21]) +
ohneta 0:65fd42a2043a 186 (uint32_t)abs(yRight[22]) +
ohneta 0:65fd42a2043a 187 (uint32_t)abs(yRight[23]) +
ohneta 0:65fd42a2043a 188 (uint32_t)abs(yRight[24]) +
ohneta 0:65fd42a2043a 189 (uint32_t)abs(yRight[25]) +
ohneta 0:65fd42a2043a 190 (uint32_t)abs(yRight[26]) +
ohneta 0:65fd42a2043a 191 (uint32_t)abs(yRight[27]) +
ohneta 0:65fd42a2043a 192 (uint32_t)abs(yRight[28]) +
ohneta 0:65fd42a2043a 193 (uint32_t)abs(yRight[29]) +
ohneta 0:65fd42a2043a 194 (uint32_t)abs(yRight[30]) +
ohneta 0:65fd42a2043a 195 (uint32_t)abs(yRight[31]) +
ohneta 0:65fd42a2043a 196 (uint32_t)abs(yRight[32]) );
ohneta 0:65fd42a2043a 197 g = ( (uint32_t)abs(yLeft[16]) +
ohneta 0:65fd42a2043a 198 (uint32_t)abs(yLeft[17]) +
ohneta 0:65fd42a2043a 199 (uint32_t)abs(yLeft[18]) +
ohneta 0:65fd42a2043a 200 (uint32_t)abs(yLeft[19]) +
ohneta 0:65fd42a2043a 201 (uint32_t)abs(yLeft[20]) +
ohneta 0:65fd42a2043a 202 (uint32_t)abs(yLeft[21]) +
ohneta 0:65fd42a2043a 203 (uint32_t)abs(yLeft[22]) +
ohneta 0:65fd42a2043a 204 (uint32_t)abs(yLeft[23]) +
ohneta 0:65fd42a2043a 205 (uint32_t)abs(yLeft[24]) +
ohneta 0:65fd42a2043a 206 (uint32_t)abs(yLeft[25]) +
ohneta 0:65fd42a2043a 207 (uint32_t)abs(yLeft[26]) +
ohneta 0:65fd42a2043a 208 (uint32_t)abs(yLeft[27]) +
ohneta 0:65fd42a2043a 209 (uint32_t)abs(yLeft[28]) +
ohneta 0:65fd42a2043a 210 (uint32_t)abs(yLeft[29]) +
ohneta 0:65fd42a2043a 211 (uint32_t)abs(yLeft[30]) +
ohneta 0:65fd42a2043a 212 (uint32_t)abs(yLeft[31]) +
ohneta 0:65fd42a2043a 213 (uint32_t)abs(yLeft[32]) );
ohneta 0:65fd42a2043a 214 b = (r + g) / 2;
ohneta 0:65fd42a2043a 215 gPixelRGB[3].red = (r > 255) ? 255 : r;
ohneta 0:65fd42a2043a 216 gPixelRGB[3].green = (g > 255) ? 255 : g;
ohneta 0:65fd42a2043a 217 gPixelRGB[3].blue = (b > 255) ? 255 : b;
ohneta 0:65fd42a2043a 218
ohneta 0:65fd42a2043a 219
ohneta 0:65fd42a2043a 220 pixelArray.update(gPixelRGB, 4);
ohneta 0:65fd42a2043a 221 }
ohneta 0:65fd42a2043a 222
ohneta 0:65fd42a2043a 223 //----------------------------------------------------
ohneta 0:65fd42a2043a 224 //----------------------------------------------------
ohneta 0:65fd42a2043a 225 void outputLeds2(Complex *yRight, Complex *yLeft, float rVolume, float lVolume)
ohneta 0:65fd42a2043a 226 {
ohneta 0:65fd42a2043a 227 int rr, rg, rb;
ohneta 0:65fd42a2043a 228 int lr, lg, lb;
ohneta 0:65fd42a2043a 229
ohneta 0:65fd42a2043a 230 if (rVolume > 1.0) rVolume = 1.0;
ohneta 0:65fd42a2043a 231 if (lVolume > 1.0) lVolume = 1.0;
ohneta 0:65fd42a2043a 232
ohneta 0:65fd42a2043a 233 rr = (
ohneta 0:65fd42a2043a 234 (uint32_t)abs(yRight[1]) +
ohneta 0:65fd42a2043a 235 (uint32_t)abs(yRight[2]) +
ohneta 0:65fd42a2043a 236 (uint32_t)abs(yRight[3])
ohneta 0:65fd42a2043a 237 );
ohneta 0:65fd42a2043a 238 rg = (int)(rVolume * 255.0);
ohneta 0:65fd42a2043a 239 rb = (
ohneta 0:65fd42a2043a 240 (uint32_t)abs(yRight[4]) +
ohneta 0:65fd42a2043a 241 (uint32_t)abs(yRight[5]) +
ohneta 0:65fd42a2043a 242 (uint32_t)abs(yRight[6]) +
ohneta 0:65fd42a2043a 243 (uint32_t)abs(yRight[7]) +
ohneta 0:65fd42a2043a 244 (uint32_t)abs(yRight[8]) +
ohneta 0:65fd42a2043a 245 (uint32_t)abs(yRight[9]) +
ohneta 0:65fd42a2043a 246 (uint32_t)abs(yRight[10]) +
ohneta 0:65fd42a2043a 247 (uint32_t)abs(yRight[11]) +
ohneta 0:65fd42a2043a 248 (uint32_t)abs(yRight[12]) +
ohneta 0:65fd42a2043a 249 (uint32_t)abs(yRight[14]) +
ohneta 0:65fd42a2043a 250 (uint32_t)abs(yRight[15]) +
ohneta 0:65fd42a2043a 251 (uint32_t)abs(yRight[16]) +
ohneta 0:65fd42a2043a 252 (uint32_t)abs(yRight[17]) +
ohneta 0:65fd42a2043a 253 (uint32_t)abs(yRight[18]) +
ohneta 0:65fd42a2043a 254 (uint32_t)abs(yRight[19]) +
ohneta 0:65fd42a2043a 255 (uint32_t)abs(yRight[20]) +
ohneta 0:65fd42a2043a 256 (uint32_t)abs(yRight[21]) +
ohneta 0:65fd42a2043a 257 (uint32_t)abs(yRight[22]) +
ohneta 0:65fd42a2043a 258 (uint32_t)abs(yRight[23]) +
ohneta 0:65fd42a2043a 259 (uint32_t)abs(yRight[24]) +
ohneta 0:65fd42a2043a 260 (uint32_t)abs(yRight[25]) +
ohneta 0:65fd42a2043a 261 (uint32_t)abs(yRight[26]) +
ohneta 0:65fd42a2043a 262 (uint32_t)abs(yRight[27]) +
ohneta 0:65fd42a2043a 263 (uint32_t)abs(yRight[28]) +
ohneta 0:65fd42a2043a 264 (uint32_t)abs(yRight[29]) +
ohneta 0:65fd42a2043a 265 (uint32_t)abs(yRight[30]) +
ohneta 0:65fd42a2043a 266 (uint32_t)abs(yRight[31]) +
ohneta 0:65fd42a2043a 267 (uint32_t)abs(yRight[32])
ohneta 0:65fd42a2043a 268 );
ohneta 0:65fd42a2043a 269 rr = (rr > 255) ? 255 : rr;
ohneta 0:65fd42a2043a 270 rg = (rg > 255) ? 255 : rg;
ohneta 0:65fd42a2043a 271 rb = (rb > 255) ? 255 : rb;
ohneta 0:65fd42a2043a 272
ohneta 0:65fd42a2043a 273
ohneta 0:65fd42a2043a 274 lr = (
ohneta 0:65fd42a2043a 275 (uint32_t)abs(yLeft[1]) +
ohneta 0:65fd42a2043a 276 (uint32_t)abs(yLeft[2]) +
ohneta 0:65fd42a2043a 277 (uint32_t)abs(yLeft[3])
ohneta 0:65fd42a2043a 278 );
ohneta 0:65fd42a2043a 279 lg = (int)(lVolume * 255.0);
ohneta 0:65fd42a2043a 280 lb = (
ohneta 0:65fd42a2043a 281 (uint32_t)abs(yLeft[4]) +
ohneta 0:65fd42a2043a 282 (uint32_t)abs(yLeft[5]) +
ohneta 0:65fd42a2043a 283 (uint32_t)abs(yLeft[6]) +
ohneta 0:65fd42a2043a 284 (uint32_t)abs(yLeft[7]) +
ohneta 0:65fd42a2043a 285 (uint32_t)abs(yLeft[8]) +
ohneta 0:65fd42a2043a 286 (uint32_t)abs(yLeft[9]) +
ohneta 0:65fd42a2043a 287 (uint32_t)abs(yLeft[10]) +
ohneta 0:65fd42a2043a 288 (uint32_t)abs(yLeft[11]) +
ohneta 0:65fd42a2043a 289 (uint32_t)abs(yLeft[12]) +
ohneta 0:65fd42a2043a 290 (uint32_t)abs(yLeft[14]) +
ohneta 0:65fd42a2043a 291 (uint32_t)abs(yLeft[15]) +
ohneta 0:65fd42a2043a 292 (uint32_t)abs(yLeft[16]) +
ohneta 0:65fd42a2043a 293 (uint32_t)abs(yLeft[17]) +
ohneta 0:65fd42a2043a 294 (uint32_t)abs(yLeft[18]) +
ohneta 0:65fd42a2043a 295 (uint32_t)abs(yLeft[19]) +
ohneta 0:65fd42a2043a 296 (uint32_t)abs(yLeft[20]) +
ohneta 0:65fd42a2043a 297 (uint32_t)abs(yLeft[21]) +
ohneta 0:65fd42a2043a 298 (uint32_t)abs(yLeft[22]) +
ohneta 0:65fd42a2043a 299 (uint32_t)abs(yLeft[23]) +
ohneta 0:65fd42a2043a 300 (uint32_t)abs(yLeft[24]) +
ohneta 0:65fd42a2043a 301 (uint32_t)abs(yLeft[25]) +
ohneta 0:65fd42a2043a 302 (uint32_t)abs(yLeft[26]) +
ohneta 0:65fd42a2043a 303 (uint32_t)abs(yLeft[27]) +
ohneta 0:65fd42a2043a 304 (uint32_t)abs(yLeft[28]) +
ohneta 0:65fd42a2043a 305 (uint32_t)abs(yLeft[29]) +
ohneta 0:65fd42a2043a 306 (uint32_t)abs(yLeft[30]) +
ohneta 0:65fd42a2043a 307 (uint32_t)abs(yLeft[31]) +
ohneta 0:65fd42a2043a 308 (uint32_t)abs(yLeft[32])
ohneta 0:65fd42a2043a 309 );
ohneta 0:65fd42a2043a 310 lr = (lr > 255) ? 255 : lr;
ohneta 0:65fd42a2043a 311 lg = (lg > 255) ? 255 : lg;
ohneta 0:65fd42a2043a 312 lb = (lb > 255) ? 255 : lb;
ohneta 0:65fd42a2043a 313
ohneta 0:65fd42a2043a 314 #if 0
ohneta 0:65fd42a2043a 315 gPixelRGB[1].red = lr;
ohneta 0:65fd42a2043a 316 gPixelRGB[1].green = lg;
ohneta 0:65fd42a2043a 317 gPixelRGB[1].blue = lb;
ohneta 0:65fd42a2043a 318 {
ohneta 0:65fd42a2043a 319 int x;
ohneta 0:65fd42a2043a 320 x = (int)((float)lr * 0.8 + (float)rr * 0.2);
ohneta 0:65fd42a2043a 321 gPixelRGB[0].red = (x > 255) ? 255 : x;
ohneta 0:65fd42a2043a 322 x = (int)((float)lg * 0.8 + (float)rg * 0.2);
ohneta 0:65fd42a2043a 323 gPixelRGB[0].green = (x > 255) ? 255 : x;
ohneta 0:65fd42a2043a 324 x = (int)((float)lb * 0.8 + (float)rb * 0.2);
ohneta 0:65fd42a2043a 325 gPixelRGB[0].blue = (x > 255) ? 255 : x;
ohneta 0:65fd42a2043a 326
ohneta 0:65fd42a2043a 327 x = (int)((float)lr * 0.2 + (float)rr * 0.8);
ohneta 0:65fd42a2043a 328 gPixelRGB[3].red = (x > 255) ? 255 : x;
ohneta 0:65fd42a2043a 329 x = (int)((float)lg * 0.2 + (float)rg * 0.8);
ohneta 0:65fd42a2043a 330 gPixelRGB[3].green = (x > 255) ? 255 : x;
ohneta 0:65fd42a2043a 331 x = (int)((float)lb * 0.2 + (float)rb * 0.8);
ohneta 0:65fd42a2043a 332 gPixelRGB[3].blue = (x > 255) ? 255 : x;
ohneta 0:65fd42a2043a 333 }
ohneta 0:65fd42a2043a 334 gPixelRGB[2].red = rr;
ohneta 0:65fd42a2043a 335 gPixelRGB[2].green = rg;
ohneta 0:65fd42a2043a 336 gPixelRGB[2].blue = rb;
ohneta 0:65fd42a2043a 337 #else
ohneta 0:65fd42a2043a 338 gPixelRGB[0].red = (lr >> 2);
ohneta 0:65fd42a2043a 339 gPixelRGB[0].green = (lg >> 2);
ohneta 0:65fd42a2043a 340 gPixelRGB[0].blue = (lb >> 1);
ohneta 0:65fd42a2043a 341
ohneta 0:65fd42a2043a 342 gPixelRGB[1].red = lr;
ohneta 0:65fd42a2043a 343 gPixelRGB[1].green = lg;
ohneta 0:65fd42a2043a 344 gPixelRGB[1].blue = lb;
ohneta 0:65fd42a2043a 345
ohneta 0:65fd42a2043a 346 gPixelRGB[2].red = rr;
ohneta 0:65fd42a2043a 347 gPixelRGB[2].green = rg;
ohneta 0:65fd42a2043a 348 gPixelRGB[2].blue = rb;
ohneta 0:65fd42a2043a 349
ohneta 0:65fd42a2043a 350 gPixelRGB[3].red = (rr >> 2);
ohneta 0:65fd42a2043a 351 gPixelRGB[3].green = (rg >> 2);
ohneta 0:65fd42a2043a 352 gPixelRGB[3].blue = (rb >> 1);
ohneta 0:65fd42a2043a 353
ohneta 0:65fd42a2043a 354 #endif
ohneta 0:65fd42a2043a 355
ohneta 0:65fd42a2043a 356 pixelArray.update(gPixelRGB, 4);
ohneta 0:65fd42a2043a 357 }
ohneta 0:65fd42a2043a 358
ohneta 0:65fd42a2043a 359 //----------------------------------------------------
ohneta 0:65fd42a2043a 360 //----------------------------------------------------
ohneta 0:65fd42a2043a 361
ohneta 0:65fd42a2043a 362 int main()
ohneta 0:65fd42a2043a 363 {
ohneta 0:65fd42a2043a 364 led = 0;
ohneta 0:65fd42a2043a 365 #ifdef _DEBUG_UART_
ohneta 0:65fd42a2043a 366 pc.baud(115200);
ohneta 0:65fd42a2043a 367 pc.printf("### START \n");
ohneta 0:65fd42a2043a 368 #endif
ohneta 0:65fd42a2043a 369
ohneta 0:65fd42a2043a 370 Complex yRight[SAMPLING_NUM / 2 + 1], yLeft[SAMPLING_NUM / 2 + 1];
ohneta 0:65fd42a2043a 371
ohneta 0:65fd42a2043a 372 gSoundIntrFlag = 0;
ohneta 0:65fd42a2043a 373 gSoundIntrCount = 0;
ohneta 0:65fd42a2043a 374 soundInterrupt.attach_us(&soundInterruptHandle, 25);
ohneta 0:65fd42a2043a 375
ohneta 0:65fd42a2043a 376 float dd = 20.0f;
ohneta 0:65fd42a2043a 377 while (1) {
ohneta 0:65fd42a2043a 378
ohneta 0:65fd42a2043a 379 if (gSoundIntrFlag == 1) {
ohneta 0:65fd42a2043a 380 float r = ainR;
ohneta 0:65fd42a2043a 381 float l = ainL;
ohneta 0:65fd42a2043a 382
ohneta 0:65fd42a2043a 383 gBufferR[gSoundIntrCount] = r * dd - 1.0f;
ohneta 0:65fd42a2043a 384 if (gBufferR[gSoundIntrCount] < -1.0f) {
ohneta 0:65fd42a2043a 385 gBufferR[gSoundIntrCount] = -1.0f;
ohneta 0:65fd42a2043a 386 } else if (gBufferR[gSoundIntrCount] > 1.0f) {
ohneta 0:65fd42a2043a 387 gBufferR[gSoundIntrCount] = 1.0f;
ohneta 0:65fd42a2043a 388 }
ohneta 0:65fd42a2043a 389 gBufferL[gSoundIntrCount] = l * dd - 1.0f;
ohneta 0:65fd42a2043a 390 if (gBufferL[gSoundIntrCount] < -1.0f) {
ohneta 0:65fd42a2043a 391 gBufferL[gSoundIntrCount] = -1.0f;
ohneta 0:65fd42a2043a 392 } else if (gBufferL[gSoundIntrCount] > 1.0f) {
ohneta 0:65fd42a2043a 393 gBufferL[gSoundIntrCount] = 1.0f;
ohneta 0:65fd42a2043a 394 }
ohneta 0:65fd42a2043a 395
ohneta 0:65fd42a2043a 396 gSoundIntrCount++;
ohneta 0:65fd42a2043a 397 if (gSoundIntrCount >= SAMPLING_NUM) {
ohneta 0:65fd42a2043a 398 gSoundIntrCount = 0;
ohneta 0:65fd42a2043a 399
ohneta 0:65fd42a2043a 400 gFFT.Execute(gBufferR, yRight);
ohneta 0:65fd42a2043a 401 gFFT.Execute(gBufferL, yLeft);
ohneta 0:65fd42a2043a 402 #ifdef _DEBUG_UART_
ohneta 0:65fd42a2043a 403 uartFftView(yRight, yLeft);
ohneta 0:65fd42a2043a 404 #endif
ohneta 0:65fd42a2043a 405 //outputLeds(yRight, yLeft);
ohneta 0:65fd42a2043a 406 outputLeds2(yRight, yLeft, r, l);
ohneta 0:65fd42a2043a 407
ohneta 0:65fd42a2043a 408 gSoundIntrFlag = 0;
ohneta 0:65fd42a2043a 409 }
ohneta 0:65fd42a2043a 410 }
ohneta 0:65fd42a2043a 411
ohneta 0:65fd42a2043a 412 if (gLedCounter > 1000) {
ohneta 0:65fd42a2043a 413 led = !led;
ohneta 0:65fd42a2043a 414 gLedCounter = 0;
ohneta 0:65fd42a2043a 415 }
ohneta 0:65fd42a2043a 416
ohneta 0:65fd42a2043a 417 }
ohneta 0:65fd42a2043a 418
ohneta 0:65fd42a2043a 419 }