Audi part of project 2
Dependencies: mbed
main.cpp@0:1e4fc03c1d61, 2018-03-12 (annotated)
- Committer:
- gabinader
- Date:
- Mon Mar 12 12:33:22 2018 +0000
- Revision:
- 0:1e4fc03c1d61
audio program;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gabinader | 0:1e4fc03c1d61 | 1 | /*---------------------------------------------------------------------------- |
gabinader | 0:1e4fc03c1d61 | 2 | LAB EXERCISE 9 - Analog input and PWM |
gabinader | 0:1e4fc03c1d61 | 3 | ---------------------------------------- |
gabinader | 0:1e4fc03c1d61 | 4 | Use two potentiometers to adjust the volume and pitch of the output sound wave. |
gabinader | 0:1e4fc03c1d61 | 5 | |
gabinader | 0:1e4fc03c1d61 | 6 | Inputs: Virtual potentiometers 1 and 2 |
gabinader | 0:1e4fc03c1d61 | 7 | Output: Virtual speaker, Real PC |
gabinader | 0:1e4fc03c1d61 | 8 | |
gabinader | 0:1e4fc03c1d61 | 9 | GOOD LUCK! |
gabinader | 0:1e4fc03c1d61 | 10 | *----------------------------------------------------------------------------*/ |
gabinader | 0:1e4fc03c1d61 | 11 | |
gabinader | 0:1e4fc03c1d61 | 12 | #include "mbed.h" |
gabinader | 0:1e4fc03c1d61 | 13 | #include "pindef.h" |
gabinader | 0:1e4fc03c1d61 | 14 | |
gabinader | 0:1e4fc03c1d61 | 15 | /* |
gabinader | 0:1e4fc03c1d61 | 16 | Define the PWM speaker output |
gabinader | 0:1e4fc03c1d61 | 17 | Define analog inputs |
gabinader | 0:1e4fc03c1d61 | 18 | Define serial output |
gabinader | 0:1e4fc03c1d61 | 19 | */ |
gabinader | 0:1e4fc03c1d61 | 20 | |
gabinader | 0:1e4fc03c1d61 | 21 | PwmOut Audio(PB_10); // Audi out |
gabinader | 0:1e4fc03c1d61 | 22 | AnalogIn Pot1(PA_0); //linear potentiomenter 1 |
gabinader | 0:1e4fc03c1d61 | 23 | AnalogIn Pot2(PA_1); //linear potentiomenter 2 |
gabinader | 0:1e4fc03c1d61 | 24 | |
gabinader | 0:1e4fc03c1d61 | 25 | |
gabinader | 0:1e4fc03c1d61 | 26 | |
gabinader | 0:1e4fc03c1d61 | 27 | //Define variables |
gabinader | 0:1e4fc03c1d61 | 28 | float i; |
gabinader | 0:1e4fc03c1d61 | 29 | |
gabinader | 0:1e4fc03c1d61 | 30 | /*---------------------------------------------------------------------------- |
gabinader | 0:1e4fc03c1d61 | 31 | MAIN function |
gabinader | 0:1e4fc03c1d61 | 32 | *----------------------------------------------------------------------------*/ |
gabinader | 0:1e4fc03c1d61 | 33 | |
gabinader | 0:1e4fc03c1d61 | 34 | int main(){ |
gabinader | 0:1e4fc03c1d61 | 35 | double i=0; //incrementor for saw-tooth |
gabinader | 0:1e4fc03c1d61 | 36 | uint16_t Freq_set, Duty_set; // Values to store potentiometer settings for Duty cyle and frequency |
gabinader | 0:1e4fc03c1d61 | 37 | float period, PulseW; |
gabinader | 0:1e4fc03c1d61 | 38 | |
gabinader | 0:1e4fc03c1d61 | 39 | |
gabinader | 0:1e4fc03c1d61 | 40 | while(1){ |
gabinader | 0:1e4fc03c1d61 | 41 | /* |
gabinader | 0:1e4fc03c1d61 | 42 | Print values of the potentiometers to the PC serial terminal |
gabinader | 0:1e4fc03c1d61 | 43 | Create a saw-tooth sound wave |
gabinader | 0:1e4fc03c1d61 | 44 | Make the period and volume adjustable using the potentiometers |
gabinader | 0:1e4fc03c1d61 | 45 | */ |
gabinader | 0:1e4fc03c1d61 | 46 | Freq_set = Pot1.read_u16(); |
gabinader | 0:1e4fc03c1d61 | 47 | Duty_set = Pot2.read_u16(); |
gabinader | 0:1e4fc03c1d61 | 48 | |
gabinader | 0:1e4fc03c1d61 | 49 | printf(" value at Potentiometer 1: %u\r\n", Freq_set); |
gabinader | 0:1e4fc03c1d61 | 50 | printf(" value at Potentiometer 2: %u\r\n", Duty_set ); |
gabinader | 0:1e4fc03c1d61 | 51 | |
gabinader | 0:1e4fc03c1d61 | 52 | if (i<1){ |
gabinader | 0:1e4fc03c1d61 | 53 | i+=0.05; //increment saw-tooth |
gabinader | 0:1e4fc03c1d61 | 54 | |
gabinader | 0:1e4fc03c1d61 | 55 | } |
gabinader | 0:1e4fc03c1d61 | 56 | else{ |
gabinader | 0:1e4fc03c1d61 | 57 | i=0; //reset saw-tooth |
gabinader | 0:1e4fc03c1d61 | 58 | } |
gabinader | 0:1e4fc03c1d61 | 59 | |
gabinader | 0:1e4fc03c1d61 | 60 | |
gabinader | 0:1e4fc03c1d61 | 61 | //Calcuate period in us for freq between 320Hz and 8KHz |
gabinader | 0:1e4fc03c1d61 | 62 | period = 3125 - 3* ((float)Freq_set *1000) / 65535; |
gabinader | 0:1e4fc03c1d61 | 63 | |
gabinader | 0:1e4fc03c1d61 | 64 | |
gabinader | 0:1e4fc03c1d61 | 65 | |
gabinader | 0:1e4fc03c1d61 | 66 | //Calculate duty cycle from 0 to 1 scaled by i |
gabinader | 0:1e4fc03c1d61 | 67 | PulseW = (float)Duty_set / 65535 * period*i; |
gabinader | 0:1e4fc03c1d61 | 68 | |
gabinader | 0:1e4fc03c1d61 | 69 | |
gabinader | 0:1e4fc03c1d61 | 70 | |
gabinader | 0:1e4fc03c1d61 | 71 | |
gabinader | 0:1e4fc03c1d61 | 72 | //Generate PWM |
gabinader | 0:1e4fc03c1d61 | 73 | Audio.period_us((int)(period)); |
gabinader | 0:1e4fc03c1d61 | 74 | Audio.pulsewidth_us((int)PulseW); |
gabinader | 0:1e4fc03c1d61 | 75 | //Audio.period_ms(100); |
gabinader | 0:1e4fc03c1d61 | 76 | //Audio.pulsewidth_us((int)(period/2)); |
gabinader | 0:1e4fc03c1d61 | 77 | |
gabinader | 0:1e4fc03c1d61 | 78 | wait_us((int)(period)); |
gabinader | 0:1e4fc03c1d61 | 79 | |
gabinader | 0:1e4fc03c1d61 | 80 | } |
gabinader | 0:1e4fc03c1d61 | 81 | } |
gabinader | 0:1e4fc03c1d61 | 82 | |
gabinader | 0:1e4fc03c1d61 | 83 | // *******************************ARM University Program Copyright © ARM Ltd 2014************************************* |