Dependencies:   mbed

Committer:
kentasaito
Date:
Thu Jan 05 12:19:42 2012 +0000
Revision:
0:3ba7ee31812f

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }