LED flash by FFT

Dependencies:   PixelArray UIT_FFT_Real_mod mbed

circuit diagram

回路図。

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

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