Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Mon Jul 18 2022 01:55:49 by
1.7.2
Kenta Saito