Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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