
main.cpp@0:3ba7ee31812f, 2012-01-05 (annotated)
- Committer:
- kentasaito
- Date:
- Thu Jan 05 12:19:42 2012 +0000
- Revision:
- 0:3ba7ee31812f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kentasaito | 0:3ba7ee31812f | 1 | #include <mbed.h> |
kentasaito | 0:3ba7ee31812f | 2 | #include <math.h> |
kentasaito | 0:3ba7ee31812f | 3 | #define M_2PI 6.28318530717959 |
kentasaito | 0:3ba7ee31812f | 4 | #define FS 20000 |
kentasaito | 0:3ba7ee31812f | 5 | #define WAVE 0 |
kentasaito | 0:3ba7ee31812f | 6 | #define POLY 4 |
kentasaito | 0:3ba7ee31812f | 7 | Serial serial(USBTX, USBRX); |
kentasaito | 0:3ba7ee31812f | 8 | Ticker ticker; |
kentasaito | 0:3ba7ee31812f | 9 | AnalogOut analogOut(p18); |
kentasaito | 0:3ba7ee31812f | 10 | int count; |
kentasaito | 0:3ba7ee31812f | 11 | float as[POLY]; |
kentasaito | 0:3ba7ee31812f | 12 | int fs[POLY]; |
kentasaito | 0:3ba7ee31812f | 13 | int n; |
kentasaito | 0:3ba7ee31812f | 14 | |
kentasaito | 0:3ba7ee31812f | 15 | int a = 0x8000; |
kentasaito | 0:3ba7ee31812f | 16 | float b = 1.0; |
kentasaito | 0:3ba7ee31812f | 17 | float c = 1; |
kentasaito | 0:3ba7ee31812f | 18 | |
kentasaito | 0:3ba7ee31812f | 19 | void sample() |
kentasaito | 0:3ba7ee31812f | 20 | { |
kentasaito | 0:3ba7ee31812f | 21 | int value = 0; |
kentasaito | 0:3ba7ee31812f | 22 | |
kentasaito | 0:3ba7ee31812f | 23 | for (int i = 0; i < POLY; i++) { |
kentasaito | 0:3ba7ee31812f | 24 | value += as[i] * (fs[i] * count % FS) / FS; |
kentasaito | 0:3ba7ee31812f | 25 | if (as[i] > 0) { |
kentasaito | 0:3ba7ee31812f | 26 | as[i] -= b; |
kentasaito | 0:3ba7ee31812f | 27 | if (as[i] < 0) as[i] = 0; |
kentasaito | 0:3ba7ee31812f | 28 | } else { |
kentasaito | 0:3ba7ee31812f | 29 | as[i] = 0; |
kentasaito | 0:3ba7ee31812f | 30 | } |
kentasaito | 0:3ba7ee31812f | 31 | } |
kentasaito | 0:3ba7ee31812f | 32 | analogOut.write_u16(value); |
kentasaito | 0:3ba7ee31812f | 33 | count++; |
kentasaito | 0:3ba7ee31812f | 34 | } |
kentasaito | 0:3ba7ee31812f | 35 | |
kentasaito | 0:3ba7ee31812f | 36 | int main() |
kentasaito | 0:3ba7ee31812f | 37 | { |
kentasaito | 0:3ba7ee31812f | 38 | int freqs[256]; |
kentasaito | 0:3ba7ee31812f | 39 | freqs[ 49] = 704; freqs[ 50] = 640; freqs[ 51] = 576; freqs[ 52] = 512; freqs[ 53] = 448; freqs[ 54] = 384; |
kentasaito | 0:3ba7ee31812f | 40 | freqs[ 55] = 320; freqs[ 56] = 256; freqs[ 57] = 192; freqs[ 48] = 128; freqs[ 45] = 64; |
kentasaito | 0:3ba7ee31812f | 41 | freqs[113] = 528; freqs[119] = 480; freqs[101] = 432; freqs[114] = 384; freqs[116] = 336; freqs[121] = 288; |
kentasaito | 0:3ba7ee31812f | 42 | freqs[117] = 240; freqs[105] = 192; freqs[111] = 144; freqs[112] = 96; freqs[ 91] = 48; |
kentasaito | 0:3ba7ee31812f | 43 | freqs[ 97] = 396; freqs[115] = 360; freqs[100] = 324; freqs[102] = 288; freqs[103] = 252; freqs[104] = 216; |
kentasaito | 0:3ba7ee31812f | 44 | freqs[106] = 180; freqs[107] = 144; freqs[108] = 108; freqs[ 59] = 72; freqs[ 39] = 36; |
kentasaito | 0:3ba7ee31812f | 45 | freqs[122] = 297; freqs[120] = 270; freqs[ 99] = 243; freqs[118] = 216; freqs[ 98] = 189; freqs[110] = 162; |
kentasaito | 0:3ba7ee31812f | 46 | freqs[109] = 135; freqs[ 44] = 108; freqs[ 46] = 81; freqs[ 47] = 54; freqs[ 32] = 27; |
kentasaito | 0:3ba7ee31812f | 47 | serial.printf("\033[2J"); |
kentasaito | 0:3ba7ee31812f | 48 | ticker.attach_us(&sample, 1000 * 1000 / FS); |
kentasaito | 0:3ba7ee31812f | 49 | while (int i = serial.getc()) { |
kentasaito | 0:3ba7ee31812f | 50 | if (i == 27) { |
kentasaito | 0:3ba7ee31812f | 51 | serial.getc(); serial.getc(); i = serial.getc() - 48; serial.getc(); |
kentasaito | 0:3ba7ee31812f | 52 | if (i == 1) a >>= 1; |
kentasaito | 0:3ba7ee31812f | 53 | if (i == 2) a <<= 1; |
kentasaito | 0:3ba7ee31812f | 54 | if (i == 3) b *= 1.2; |
kentasaito | 0:3ba7ee31812f | 55 | if (i == 4) b /= 1.2; |
kentasaito | 0:3ba7ee31812f | 56 | if (i == 5) c = 0; |
kentasaito | 0:3ba7ee31812f | 57 | if (i == 7) c = 1; |
kentasaito | 0:3ba7ee31812f | 58 | serial.printf("i = %d; a = %05X; b = %f\r\n", i, a, b); |
kentasaito | 0:3ba7ee31812f | 59 | continue; |
kentasaito | 0:3ba7ee31812f | 60 | } |
kentasaito | 0:3ba7ee31812f | 61 | as[n] = a; |
kentasaito | 0:3ba7ee31812f | 62 | fs[n] = freqs[i] * 2; |
kentasaito | 0:3ba7ee31812f | 63 | serial.printf("%d:%d\r\n", i, freqs[i]); |
kentasaito | 0:3ba7ee31812f | 64 | if (c) n = (n + 1) % POLY; |
kentasaito | 0:3ba7ee31812f | 65 | } |
kentasaito | 0:3ba7ee31812f | 66 | ticker.detach(); |
kentasaito | 0:3ba7ee31812f | 67 | analogOut.write_u16(0); |
kentasaito | 0:3ba7ee31812f | 68 | } |