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 00003 extern "C" void mbed_reset(); 00004 00005 // Debug 00006 BusOut leds(LED1, LED2, LED3, LED4); 00007 00008 // Analog Input 00009 AnalogIn analogIn0(p20); 00010 AnalogIn analogIn1(p19); 00011 AnalogIn analogIn2(p17); 00012 00013 // Input 00014 DigitalIn kb_dat(p9); 00015 DigitalIn kb_clk(p10); 00016 Ticker ps2_ticker; 00017 int wdt = 0; 00018 int bit = 0; 00019 int val = 0; 00020 int ignore = 0; 00021 unsigned ks[256]; 00022 00023 // Output 00024 SPI spi(p11, p12, p13); 00025 DigitalOut lrck(p14); 00026 Ticker ticker; 00027 unsigned *freqs = (unsigned *)calloc(127, sizeof(unsigned)); // Frequencies Of Each Keys 00028 int amp = 0x00; 00029 int da = 1; 00030 int sweep = 0; 00031 int fs; 00032 int f; 00033 int count = 0; 00034 00035 void sampling() { 00036 int outa = amp >> 3; 00037 lrck = 1; 00038 spi.write(outa); 00039 lrck = 0; 00040 spi.write(outa); 00041 amp = -amp; 00042 count++; 00043 if (sweep && count % 4 == 0) { 00044 f -= sweep; 00045 if (f >= 16) ticker.attach_us(&sampling, 327273 / f); 00046 } 00047 } 00048 00049 void onTicker() { 00050 if (bit) { 00051 if (++wdt >= 10) { 00052 if (val == 0xF0) { 00053 ignore = 1; 00054 } else { 00055 if (!ignore) { 00056 if (freqs[ks[val]]) { 00057 f = freqs[ks[val]]; 00058 amp = analogIn0.read_u16(); 00059 da = (0xFFFF - analogIn1.read_u16()) >> 11; 00060 sweep = analogIn2.read_u16() >> 12; 00061 ticker.attach_us(&sampling, 327273 / f); 00062 leds = ks[val]; 00063 leds = sweep; 00064 } else { 00065 //mbed_reset(); 00066 } 00067 } 00068 ignore = 0; 00069 } 00070 wdt = 0; 00071 bit = 0; 00072 val = 0; 00073 } 00074 } 00075 if (amp > 0) { 00076 amp -= da; 00077 if (amp < 0) amp = 0; 00078 } 00079 } 00080 00081 void onKbClkFall() { 00082 wdt = 0; 00083 if (bit >= 1 && bit < 9) val += (int)kb_dat << (bit - 1); 00084 bit++; 00085 } 00086 00087 int main() { 00088 // Output 00089 char *k = "-0987654321[poiuytrewq';lkjhgfdsa /.,mnbvcxz"; // Keyboard Layout 00090 unsigned f0 = 64; // Frequency Of Fundamental Tone 00091 for (int m = 1; m <= 4; m++) { 00092 for (int n = 1; n <= 11; n++) freqs[*k++] = f0 * n; 00093 f0 = f0 * 3 / 4; 00094 } 00095 spi.format(16, 0); 00096 spi.frequency(1600 * 1000); 00097 00098 // Input 00099 ks[0x4E] = '-'; ks[0x45] = '0'; ks[0x46] = '9'; ks[0x3E] = '8'; ks[0x3D] = '7'; ks[0x36] = '6'; ks[0x2E] = '5'; ks[0x25] = '4'; ks[0x26] = '3'; ks[0x1E] = '2'; ks[0x16] = '1'; 00100 ks[0x54] = '['; ks[0x4D] = 'p'; ks[0x44] = 'o'; ks[0x43] = 'i'; ks[0x3C] = 'u'; ks[0x35] = 'y'; ks[0x2C] = 't'; ks[0x2D] = 'r'; ks[0x24] = 'e'; ks[0x1D] = 'w'; ks[0x15] = 'q'; 00101 ks[0x52] = '\''; ks[0x4C] = ';'; ks[0x4B] = 'l'; ks[0x42] = 'k'; ks[0x3B] = 'j'; ks[0x33] = 'h'; ks[0x34] = 'g'; ks[0x2B] = 'f'; ks[0x23] = 'd'; ks[0x1B] = 's'; ks[0x1C] = 'a'; 00102 ks[0x29] = ' '; ks[0x4A] = '/'; ks[0x49] = '.'; ks[0x41] = ','; ks[0x3A] = 'm'; ks[0x31] = 'n'; ks[0x32] = 'b'; ks[0x2A] = 'v'; ks[0x21] = 'c'; ks[0x22] = 'x'; ks[0x1A] = 'z'; 00103 ps2_ticker.attach_us(&onTicker, 100); 00104 while (1) { 00105 while (kb_clk) ; 00106 onKbClkFall(); 00107 while (!kb_clk) ; 00108 } 00109 }
Generated on Sun Jul 17 2022 19:39:25 by
1.7.2