![](/media/cache/profiles/240ac9371ec2671ae99847c3ae2e6384.50x50_q85.jpg)
LED flash by FFT
circuit diagram
回路図。
/media/uploads/ohneta/lpc1114fn28-ws2812b-fft.pdf
main.cpp@2:97f927b73354, 2016-04-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |