Kenta Saito / Mbed 2 deprecated flageo_m0
Committer:
kentasaito
Date:
Thu Feb 09 13:47:56 2012 +0000
Revision:
0:e095b8164c7a
First Revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kentasaito 0:e095b8164c7a 1 #include <mbed.h>
kentasaito 0:e095b8164c7a 2
kentasaito 0:e095b8164c7a 3 extern "C" void mbed_reset();
kentasaito 0:e095b8164c7a 4
kentasaito 0:e095b8164c7a 5 // Debug
kentasaito 0:e095b8164c7a 6 BusOut leds(LED1, LED2, LED3, LED4);
kentasaito 0:e095b8164c7a 7
kentasaito 0:e095b8164c7a 8 // Analog Input
kentasaito 0:e095b8164c7a 9 AnalogIn analogIn0(p20);
kentasaito 0:e095b8164c7a 10 AnalogIn analogIn1(p19);
kentasaito 0:e095b8164c7a 11 AnalogIn analogIn2(p17);
kentasaito 0:e095b8164c7a 12
kentasaito 0:e095b8164c7a 13 // Input
kentasaito 0:e095b8164c7a 14 DigitalIn kb_dat(p9);
kentasaito 0:e095b8164c7a 15 DigitalIn kb_clk(p10);
kentasaito 0:e095b8164c7a 16 Ticker ps2_ticker;
kentasaito 0:e095b8164c7a 17 int wdt = 0;
kentasaito 0:e095b8164c7a 18 int bit = 0;
kentasaito 0:e095b8164c7a 19 int val = 0;
kentasaito 0:e095b8164c7a 20 int ignore = 0;
kentasaito 0:e095b8164c7a 21 unsigned ks[256];
kentasaito 0:e095b8164c7a 22
kentasaito 0:e095b8164c7a 23 // Output
kentasaito 0:e095b8164c7a 24 SPI spi(p11, p12, p13);
kentasaito 0:e095b8164c7a 25 DigitalOut lrck(p14);
kentasaito 0:e095b8164c7a 26 Ticker ticker;
kentasaito 0:e095b8164c7a 27 unsigned *freqs = (unsigned *)calloc(127, sizeof(unsigned)); // Frequencies Of Each Keys
kentasaito 0:e095b8164c7a 28 int amp = 0x00;
kentasaito 0:e095b8164c7a 29 int da = 1;
kentasaito 0:e095b8164c7a 30 int sweep = 0;
kentasaito 0:e095b8164c7a 31 int fs;
kentasaito 0:e095b8164c7a 32 int f;
kentasaito 0:e095b8164c7a 33 int count = 0;
kentasaito 0:e095b8164c7a 34
kentasaito 0:e095b8164c7a 35 void sampling() {
kentasaito 0:e095b8164c7a 36 int outa = amp >> 3;
kentasaito 0:e095b8164c7a 37 lrck = 1;
kentasaito 0:e095b8164c7a 38 spi.write(outa);
kentasaito 0:e095b8164c7a 39 lrck = 0;
kentasaito 0:e095b8164c7a 40 spi.write(outa);
kentasaito 0:e095b8164c7a 41 amp = -amp;
kentasaito 0:e095b8164c7a 42 count++;
kentasaito 0:e095b8164c7a 43 if (sweep && count % 4 == 0) {
kentasaito 0:e095b8164c7a 44 f -= sweep;
kentasaito 0:e095b8164c7a 45 if (f >= 16) ticker.attach_us(&sampling, 327273 / f);
kentasaito 0:e095b8164c7a 46 }
kentasaito 0:e095b8164c7a 47 }
kentasaito 0:e095b8164c7a 48
kentasaito 0:e095b8164c7a 49 void onTicker() {
kentasaito 0:e095b8164c7a 50 if (bit) {
kentasaito 0:e095b8164c7a 51 if (++wdt >= 10) {
kentasaito 0:e095b8164c7a 52 if (val == 0xF0) {
kentasaito 0:e095b8164c7a 53 ignore = 1;
kentasaito 0:e095b8164c7a 54 } else {
kentasaito 0:e095b8164c7a 55 if (!ignore) {
kentasaito 0:e095b8164c7a 56 if (freqs[ks[val]]) {
kentasaito 0:e095b8164c7a 57 f = freqs[ks[val]];
kentasaito 0:e095b8164c7a 58 amp = analogIn0.read_u16();
kentasaito 0:e095b8164c7a 59 da = (0xFFFF - analogIn1.read_u16()) >> 11;
kentasaito 0:e095b8164c7a 60 sweep = analogIn2.read_u16() >> 12;
kentasaito 0:e095b8164c7a 61 ticker.attach_us(&sampling, 327273 / f);
kentasaito 0:e095b8164c7a 62 leds = ks[val];
kentasaito 0:e095b8164c7a 63 leds = sweep;
kentasaito 0:e095b8164c7a 64 } else {
kentasaito 0:e095b8164c7a 65 //mbed_reset();
kentasaito 0:e095b8164c7a 66 }
kentasaito 0:e095b8164c7a 67 }
kentasaito 0:e095b8164c7a 68 ignore = 0;
kentasaito 0:e095b8164c7a 69 }
kentasaito 0:e095b8164c7a 70 wdt = 0;
kentasaito 0:e095b8164c7a 71 bit = 0;
kentasaito 0:e095b8164c7a 72 val = 0;
kentasaito 0:e095b8164c7a 73 }
kentasaito 0:e095b8164c7a 74 }
kentasaito 0:e095b8164c7a 75 if (amp > 0) {
kentasaito 0:e095b8164c7a 76 amp -= da;
kentasaito 0:e095b8164c7a 77 if (amp < 0) amp = 0;
kentasaito 0:e095b8164c7a 78 }
kentasaito 0:e095b8164c7a 79 }
kentasaito 0:e095b8164c7a 80
kentasaito 0:e095b8164c7a 81 void onKbClkFall() {
kentasaito 0:e095b8164c7a 82 wdt = 0;
kentasaito 0:e095b8164c7a 83 if (bit >= 1 && bit < 9) val += (int)kb_dat << (bit - 1);
kentasaito 0:e095b8164c7a 84 bit++;
kentasaito 0:e095b8164c7a 85 }
kentasaito 0:e095b8164c7a 86
kentasaito 0:e095b8164c7a 87 int main() {
kentasaito 0:e095b8164c7a 88 // Output
kentasaito 0:e095b8164c7a 89 char *k = "-0987654321[poiuytrewq';lkjhgfdsa /.,mnbvcxz"; // Keyboard Layout
kentasaito 0:e095b8164c7a 90 unsigned f0 = 64; // Frequency Of Fundamental Tone
kentasaito 0:e095b8164c7a 91 for (int m = 1; m <= 4; m++) {
kentasaito 0:e095b8164c7a 92 for (int n = 1; n <= 11; n++) freqs[*k++] = f0 * n;
kentasaito 0:e095b8164c7a 93 f0 = f0 * 3 / 4;
kentasaito 0:e095b8164c7a 94 }
kentasaito 0:e095b8164c7a 95 spi.format(16, 0);
kentasaito 0:e095b8164c7a 96 spi.frequency(1600 * 1000);
kentasaito 0:e095b8164c7a 97
kentasaito 0:e095b8164c7a 98 // Input
kentasaito 0:e095b8164c7a 99 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';
kentasaito 0:e095b8164c7a 100 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';
kentasaito 0:e095b8164c7a 101 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';
kentasaito 0:e095b8164c7a 102 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';
kentasaito 0:e095b8164c7a 103 ps2_ticker.attach_us(&onTicker, 100);
kentasaito 0:e095b8164c7a 104 while (1) {
kentasaito 0:e095b8164c7a 105 while (kb_clk) ;
kentasaito 0:e095b8164c7a 106 onKbClkFall();
kentasaito 0:e095b8164c7a 107 while (!kb_clk) ;
kentasaito 0:e095b8164c7a 108 }
kentasaito 0:e095b8164c7a 109 }