Kenta Saito / Mbed 2 deprecated Flageo01

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include <mbed.h>
00002 #include <math.h>
00003 #define M_2PI 6.28318530717959
00004 #define FS 20000
00005 #define WAVE 0
00006 #define POLY 4
00007 Serial serial(USBTX, USBRX);
00008 Ticker ticker;
00009 AnalogOut analogOut(p18);
00010 int count;
00011 float as[POLY];
00012 int fs[POLY];
00013 int n;
00014 
00015 int a = 0x8000;
00016 float b = 1.0;
00017 float c = 1;
00018 
00019 void sample()
00020 {
00021     int value = 0;
00022 
00023     for (int i = 0; i < POLY; i++) {
00024         value += as[i] * (fs[i] * count % FS) / FS;
00025         if (as[i] > 0) {
00026             as[i] -= b;
00027             if (as[i] < 0) as[i] = 0;
00028         } else {
00029             as[i] = 0;
00030         }
00031     }
00032     analogOut.write_u16(value);
00033     count++;
00034 }
00035 
00036 int main()
00037 {
00038     int freqs[256];
00039     freqs[ 49] = 704; freqs[ 50] = 640; freqs[ 51] = 576; freqs[ 52] = 512; freqs[ 53] = 448; freqs[ 54] = 384;
00040         freqs[ 55] = 320; freqs[ 56] = 256; freqs[ 57] = 192; freqs[ 48] = 128; freqs[ 45] =  64;
00041       freqs[113] = 528; freqs[119] = 480; freqs[101] = 432; freqs[114] = 384; freqs[116] = 336; freqs[121] = 288;
00042           freqs[117] = 240; freqs[105] = 192; freqs[111] = 144; freqs[112] =  96; freqs[ 91] =  48;
00043         freqs[ 97] = 396; freqs[115] = 360; freqs[100] = 324; freqs[102] = 288; freqs[103] = 252; freqs[104] = 216;
00044             freqs[106] = 180; freqs[107] = 144; freqs[108] = 108; freqs[ 59] =  72; freqs[ 39] =  36;
00045           freqs[122] = 297; freqs[120] = 270; freqs[ 99] = 243; freqs[118] = 216; freqs[ 98] = 189; freqs[110] = 162;
00046               freqs[109] = 135; freqs[ 44] = 108; freqs[ 46] =  81; freqs[ 47] =  54; freqs[ 32] =  27;
00047     serial.printf("\033[2J");
00048     ticker.attach_us(&sample, 1000 * 1000 / FS);
00049     while (int i = serial.getc()) {
00050         if (i == 27) {
00051             serial.getc(); serial.getc(); i = serial.getc() - 48; serial.getc();
00052             if (i == 1) a >>= 1;
00053             if (i == 2) a <<= 1;
00054             if (i == 3) b *= 1.2;
00055             if (i == 4) b /= 1.2;
00056             if (i == 5) c = 0;
00057             if (i == 7) c = 1;
00058             serial.printf("i = %d; a = %05X; b = %f\r\n", i, a, b);
00059             continue;
00060         }
00061         as[n] = a;
00062         fs[n] = freqs[i] * 2;
00063         serial.printf("%d:%d\r\n", i, freqs[i]);
00064         if (c) n = (n + 1) % POLY;
00065     }
00066     ticker.detach();
00067     analogOut.write_u16(0);
00068 }