Dependencies:   mbed

main.cpp

Committer:
kentasaito
Date:
2012-01-05
Revision:
0:3ba7ee31812f

File content as of revision 0:3ba7ee31812f:

#include <mbed.h>
#include <math.h>
#define M_2PI 6.28318530717959
#define FS 20000
#define WAVE 0
#define POLY 4
Serial serial(USBTX, USBRX);
Ticker ticker;
AnalogOut analogOut(p18);
int count;
float as[POLY];
int fs[POLY];
int n;

int a = 0x8000;
float b = 1.0;
float c = 1;

void sample()
{
    int value = 0;

    for (int i = 0; i < POLY; i++) {
        value += as[i] * (fs[i] * count % FS) / FS;
        if (as[i] > 0) {
            as[i] -= b;
            if (as[i] < 0) as[i] = 0;
        } else {
            as[i] = 0;
        }
    }
    analogOut.write_u16(value);
    count++;
}

int main()
{
    int freqs[256];
    freqs[ 49] = 704; freqs[ 50] = 640; freqs[ 51] = 576; freqs[ 52] = 512; freqs[ 53] = 448; freqs[ 54] = 384;
        freqs[ 55] = 320; freqs[ 56] = 256; freqs[ 57] = 192; freqs[ 48] = 128; freqs[ 45] =  64;
      freqs[113] = 528; freqs[119] = 480; freqs[101] = 432; freqs[114] = 384; freqs[116] = 336; freqs[121] = 288;
          freqs[117] = 240; freqs[105] = 192; freqs[111] = 144; freqs[112] =  96; freqs[ 91] =  48;
        freqs[ 97] = 396; freqs[115] = 360; freqs[100] = 324; freqs[102] = 288; freqs[103] = 252; freqs[104] = 216;
            freqs[106] = 180; freqs[107] = 144; freqs[108] = 108; freqs[ 59] =  72; freqs[ 39] =  36;
          freqs[122] = 297; freqs[120] = 270; freqs[ 99] = 243; freqs[118] = 216; freqs[ 98] = 189; freqs[110] = 162;
              freqs[109] = 135; freqs[ 44] = 108; freqs[ 46] =  81; freqs[ 47] =  54; freqs[ 32] =  27;
    serial.printf("\033[2J");
    ticker.attach_us(&sample, 1000 * 1000 / FS);
    while (int i = serial.getc()) {
        if (i == 27) {
            serial.getc(); serial.getc(); i = serial.getc() - 48; serial.getc();
            if (i == 1) a >>= 1;
            if (i == 2) a <<= 1;
            if (i == 3) b *= 1.2;
            if (i == 4) b /= 1.2;
            if (i == 5) c = 0;
            if (i == 7) c = 1;
            serial.printf("i = %d; a = %05X; b = %f\r\n", i, a, b);
            continue;
        }
        as[n] = a;
        fs[n] = freqs[i] * 2;
        serial.printf("%d:%d\r\n", i, freqs[i]);
        if (c) n = (n + 1) % POLY;
    }
    ticker.detach();
    analogOut.write_u16(0);
}