Audi part of project 2

Dependencies:   mbed

Committer:
gabinader
Date:
Mon Mar 12 12:33:22 2018 +0000
Revision:
0:1e4fc03c1d61
audio program;

Who changed what in which revision?

UserRevisionLine numberNew 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*************************************