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@1:2fa375aacece, 2013-05-14 (annotated)
- Committer:
- bikeNomad
- Date:
- Tue May 14 14:08:22 2013 +0000
- Revision:
- 1:2fa375aacece
- Parent:
- 0:1ddd40d843cb
- Child:
- 2:5bcd2f55a294
trying to get continuous conversion going
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| bikeNomad | 0:1ddd40d843cb | 1 | #include "mbed.h" |
| bikeNomad | 1:2fa375aacece | 2 | #include "FastAnalogIn.h" |
| bikeNomad | 1:2fa375aacece | 3 | using namespace NK; |
| bikeNomad | 1:2fa375aacece | 4 | |
| bikeNomad | 1:2fa375aacece | 5 | // Power: |
| bikeNomad | 1:2fa375aacece | 6 | // Power GND J9/14 |
| bikeNomad | 1:2fa375aacece | 7 | // Vin (6V) J9/16 |
| bikeNomad | 0:1ddd40d843cb | 8 | |
| bikeNomad | 1:2fa375aacece | 9 | // Digital: |
| bikeNomad | 1:2fa375aacece | 10 | DigitalOut tail(PTA13); // J3/2 |
| bikeNomad | 1:2fa375aacece | 11 | DigitalOut mouth(PTC12); // J3/1 |
| bikeNomad | 1:2fa375aacece | 12 | DigitalOut head(PTC13); // J3/3 |
| bikeNomad | 1:2fa375aacece | 13 | DigitalIn pushbutton(PTD5); // J3/4 |
| bikeNomad | 1:2fa375aacece | 14 | |
| bikeNomad | 1:2fa375aacece | 15 | PwmOut redLED(LED_RED); |
| bikeNomad | 1:2fa375aacece | 16 | PwmOut greenLED(LED_GREEN); |
| bikeNomad | 1:2fa375aacece | 17 | PwmOut blueLED(LED_BLUE); |
| bikeNomad | 0:1ddd40d843cb | 18 | |
| bikeNomad | 1:2fa375aacece | 19 | // Analog: |
| bikeNomad | 1:2fa375aacece | 20 | // GND J3/14 |
| bikeNomad | 1:2fa375aacece | 21 | // VrefH J3/16 |
| bikeNomad | 1:2fa375aacece | 22 | FastAnalogIn microphone(PTB0); // J10/2 |
| bikeNomad | 1:2fa375aacece | 23 | AnalogOut speaker(PTE30); // J10/11 |
| bikeNomad | 1:2fa375aacece | 24 | |
| bikeNomad | 1:2fa375aacece | 25 | // Communications: |
| bikeNomad | 1:2fa375aacece | 26 | // Serial uart1(PTC4, PTC3); |
| bikeNomad | 1:2fa375aacece | 27 | Serial pc(USBTX, USBRX); |
| bikeNomad | 1:2fa375aacece | 28 | |
| bikeNomad | 1:2fa375aacece | 29 | const unsigned SAMPLE_RATE_HZ = 7812; |
| bikeNomad | 1:2fa375aacece | 30 | const unsigned SAMPLE_PERIOD_US = (1000000U / SAMPLE_RATE_HZ); |
| bikeNomad | 1:2fa375aacece | 31 | |
| bikeNomad | 1:2fa375aacece | 32 | Ticker sampleTicker; |
| bikeNomad | 1:2fa375aacece | 33 | |
| bikeNomad | 1:2fa375aacece | 34 | uint8_t sampleBuffer[SAMPLE_RATE_HZ]; // 1 second buffer |
| bikeNomad | 1:2fa375aacece | 35 | uint8_t * volatile nextSample; |
| bikeNomad | 1:2fa375aacece | 36 | unsigned volatile samplesRemaining; |
| bikeNomad | 1:2fa375aacece | 37 | |
| bikeNomad | 1:2fa375aacece | 38 | extern "C" |
| bikeNomad | 1:2fa375aacece | 39 | void ADC0_IRQHandler(void) |
| bikeNomad | 0:1ddd40d843cb | 40 | { |
| bikeNomad | 1:2fa375aacece | 41 | pc.printf("irq\r\n"); |
| bikeNomad | 1:2fa375aacece | 42 | if (samplesRemaining) { |
| bikeNomad | 1:2fa375aacece | 43 | *nextSample++ = microphone.read_u16() >> 8; |
| bikeNomad | 1:2fa375aacece | 44 | samplesRemaining--; |
| bikeNomad | 1:2fa375aacece | 45 | } else { |
| bikeNomad | 1:2fa375aacece | 46 | microphone.disable_interrupt(); |
| bikeNomad | 0:1ddd40d843cb | 47 | } |
| bikeNomad | 0:1ddd40d843cb | 48 | } |
| bikeNomad | 0:1ddd40d843cb | 49 | |
| bikeNomad | 1:2fa375aacece | 50 | void playAudioSample() |
| bikeNomad | 1:2fa375aacece | 51 | { |
| bikeNomad | 1:2fa375aacece | 52 | if (samplesRemaining) { |
| bikeNomad | 1:2fa375aacece | 53 | speaker.write_u16(*nextSample++ << 8); |
| bikeNomad | 1:2fa375aacece | 54 | samplesRemaining--; |
| bikeNomad | 1:2fa375aacece | 55 | } else { |
| bikeNomad | 1:2fa375aacece | 56 | sampleTicker.detach(); |
| bikeNomad | 1:2fa375aacece | 57 | } |
| bikeNomad | 1:2fa375aacece | 58 | } |
| bikeNomad | 1:2fa375aacece | 59 | |
| bikeNomad | 1:2fa375aacece | 60 | void resetSampleBuffer() |
| bikeNomad | 1:2fa375aacece | 61 | { |
| bikeNomad | 1:2fa375aacece | 62 | nextSample = sampleBuffer; |
| bikeNomad | 1:2fa375aacece | 63 | samplesRemaining = sizeof(sampleBuffer); |
| bikeNomad | 1:2fa375aacece | 64 | } |
| bikeNomad | 1:2fa375aacece | 65 | |
| bikeNomad | 1:2fa375aacece | 66 | void recordAudio() |
| bikeNomad | 1:2fa375aacece | 67 | { |
| bikeNomad | 1:2fa375aacece | 68 | pc.printf("Recording %d samples... ", sizeof(sampleBuffer)); |
| bikeNomad | 1:2fa375aacece | 69 | blueLED = 0.0; |
| bikeNomad | 1:2fa375aacece | 70 | |
| bikeNomad | 1:2fa375aacece | 71 | resetSampleBuffer(); |
| bikeNomad | 1:2fa375aacece | 72 | microphone.enable_interrupt(); |
| bikeNomad | 1:2fa375aacece | 73 | |
| bikeNomad | 1:2fa375aacece | 74 | while (samplesRemaining) { |
| bikeNomad | 1:2fa375aacece | 75 | wait(0.05); |
| bikeNomad | 1:2fa375aacece | 76 | blueLED.write(1.0 - (1.0 * samplesRemaining / sizeof(sampleBuffer))); |
| bikeNomad | 1:2fa375aacece | 77 | } |
| bikeNomad | 1:2fa375aacece | 78 | |
| bikeNomad | 1:2fa375aacece | 79 | pc.printf("Done\r\n"); |
| bikeNomad | 1:2fa375aacece | 80 | } |
| bikeNomad | 1:2fa375aacece | 81 | |
| bikeNomad | 1:2fa375aacece | 82 | void playAudio() |
| bikeNomad | 1:2fa375aacece | 83 | { |
| bikeNomad | 1:2fa375aacece | 84 | pc.printf("Playing %d samples... ", sizeof(sampleBuffer)); |
| bikeNomad | 1:2fa375aacece | 85 | greenLED = 0.0; |
| bikeNomad | 1:2fa375aacece | 86 | resetSampleBuffer(); |
| bikeNomad | 1:2fa375aacece | 87 | sampleTicker.attach_us(&playAudioSample, SAMPLE_PERIOD_US); |
| bikeNomad | 1:2fa375aacece | 88 | while (samplesRemaining) { |
| bikeNomad | 1:2fa375aacece | 89 | wait(0.05); |
| bikeNomad | 1:2fa375aacece | 90 | greenLED.write(1.0 - (1.0 * samplesRemaining / sizeof(sampleBuffer))); |
| bikeNomad | 1:2fa375aacece | 91 | } |
| bikeNomad | 1:2fa375aacece | 92 | pc.printf("Done\r\n"); |
| bikeNomad | 1:2fa375aacece | 93 | |
| bikeNomad | 1:2fa375aacece | 94 | } |
| bikeNomad | 0:1ddd40d843cb | 95 | int main() |
| bikeNomad | 0:1ddd40d843cb | 96 | { |
| bikeNomad | 1:2fa375aacece | 97 | pc.baud(115200); |
| bikeNomad | 1:2fa375aacece | 98 | pc.printf("Sample buffer = %u samples; rate = %u Hz; period = %u usec\r\n", sizeof(sampleBuffer), SAMPLE_RATE_HZ, SAMPLE_PERIOD_US); |
| bikeNomad | 1:2fa375aacece | 99 | redLED = 1.0; |
| bikeNomad | 1:2fa375aacece | 100 | greenLED = 1.0; |
| bikeNomad | 1:2fa375aacece | 101 | blueLED = 1.0; |
| bikeNomad | 1:2fa375aacece | 102 | |
| bikeNomad | 1:2fa375aacece | 103 | microphone.enable_interrupt(); |
| bikeNomad | 1:2fa375aacece | 104 | microphone.start_read(); |
| bikeNomad | 1:2fa375aacece | 105 | |
| bikeNomad | 1:2fa375aacece | 106 | recordAudio(); |
| bikeNomad | 1:2fa375aacece | 107 | |
| bikeNomad | 1:2fa375aacece | 108 | playAudio(); |
| bikeNomad | 0:1ddd40d843cb | 109 | } |