slave2

Dependencies:   PinDetect dsp mbed-rtos mbed

Committer:
cpark308
Date:
Mon Apr 25 21:42:00 2016 +0000
Revision:
2:919431d2e1a7
Parent:
1:caeb5792f292
Child:
3:18d0a7397658
mbed slave2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cpark308 0:7ee25b048596 1 #include "mbed.h"
cpark308 0:7ee25b048596 2 #include "PinDetect.h"
cpark308 0:7ee25b048596 3 #include "rtos.h"
cpark308 0:7ee25b048596 4
cpark308 2:919431d2e1a7 5 //stuff from mike
cpark308 2:919431d2e1a7 6 #include "Phase_Finder.h"
cpark308 2:919431d2e1a7 7 #include "arm_math.h"
cpark308 2:919431d2e1a7 8 //Filter coefficients. DO NOT DELETE.
cpark308 2:919431d2e1a7 9 float b[51] = {-0.007772, -0.003741, -0.004376, -0.004861, -0.005128, -0.005108, -0.004726, -0.003925, -0.002650, -0.000867, 0.001443, 0.004277, 0.007607, 0.011379, 0.015521, 0.019940, 0.024525, 0.029149, 0.033671, 0.037953, 0.041851, 0.045248, 0.048020, 0.050070, 0.051335, 0.251747, 0.051335, 0.050070, 0.048020, 0.045248, 0.041851, 0.037953, 0.033671, 0.029149, 0.024525, 0.019940, 0.015521, 0.011379, 0.007607, 0.004277, 0.001443, -0.000867, -0.002650, -0.003925, -0.004726, -0.005108, -0.005128, -0.004861, -0.004376, -0.003741, -0.007772};
cpark308 2:919431d2e1a7 10
cpark308 2:919431d2e1a7 11
cpark308 1:caeb5792f292 12 DigitalOut myled(LED1); //LEDS for debug purposes
cpark308 0:7ee25b048596 13 DigitalOut myled2(LED2);
cpark308 0:7ee25b048596 14 DigitalOut myled4(LED4);
cpark308 1:caeb5792f292 15 AnalogIn audioIn(p20);//pin for sound capture
cpark308 1:caeb5792f292 16 //AnalogOut outfunction(p18);
cpark308 1:caeb5792f292 17 //DigitalOut masterSignalOut(p26);
cpark308 1:caeb5792f292 18 InterruptIn startButton(p21);
cpark308 1:caeb5792f292 19 InterruptIn printButton(p22);
cpark308 2:919431d2e1a7 20 InterruptIn sendToMasterButton(p23);
cpark308 1:caeb5792f292 21 //InterruptIn trigger(p25);
cpark308 1:caeb5792f292 22 Serial pc(USBTX,USBRX);//serial to computer
cpark308 2:919431d2e1a7 23 Serial master(p13,p14);//serial to master
cpark308 2:919431d2e1a7 24 #define samples 301 //how many samples to take
cpark308 2:919431d2e1a7 25 float* signal; //set up the recording array
cpark308 1:caeb5792f292 26 float* dataSlave1; //set up array for slave1's data
cpark308 1:caeb5792f292 27 Timer ti; //Timer to determine sampling rate
cpark308 1:caeb5792f292 28 int startTime;
cpark308 1:caeb5792f292 29 int endTime;
cpark308 1:caeb5792f292 30 int sampleRate;
cpark308 0:7ee25b048596 31 int counter;
cpark308 1:caeb5792f292 32 int start;
cpark308 1:caeb5792f292 33 int print;
cpark308 2:919431d2e1a7 34 int send;
cpark308 0:7ee25b048596 35
cpark308 1:caeb5792f292 36 void startRecording(void){
cpark308 1:caeb5792f292 37 start = 1;
cpark308 1:caeb5792f292 38 myled2 = 1;
cpark308 1:caeb5792f292 39 }
cpark308 1:caeb5792f292 40 void startPrint(void){
cpark308 1:caeb5792f292 41 print = 1;
cpark308 1:caeb5792f292 42 myled4 = 1;
cpark308 0:7ee25b048596 43 }
cpark308 2:919431d2e1a7 44 void startSend(void){
cpark308 2:919431d2e1a7 45 send = 1;
cpark308 2:919431d2e1a7 46 }
cpark308 0:7ee25b048596 47 int main() {
cpark308 2:919431d2e1a7 48
cpark308 2:919431d2e1a7 49
cpark308 2:919431d2e1a7 50
cpark308 2:919431d2e1a7 51 //from mikes code
cpark308 2:919431d2e1a7 52 float phases;
cpark308 2:919431d2e1a7 53 float filteredSignal[351] = {}; //this array holds the signal after filtering. Make sure the input signal is > 300 samples.
cpark308 2:919431d2e1a7 54 Phase_Finder phase(50000, 900); //Create phase object
cpark308 2:919431d2e1a7 55
cpark308 2:919431d2e1a7 56
cpark308 2:919431d2e1a7 57
cpark308 0:7ee25b048596 58 ti.reset();
cpark308 1:caeb5792f292 59 start = 0;
cpark308 0:7ee25b048596 60 myled2 = 0;
cpark308 0:7ee25b048596 61 myled4 = 0;
cpark308 2:919431d2e1a7 62 myled = 0;
cpark308 1:caeb5792f292 63 //allocate memory to the data arrays
cpark308 2:919431d2e1a7 64 signal = (float*) malloc(sizeof(float)*samples);
cpark308 1:caeb5792f292 65 dataSlave1 = (float*) malloc(sizeof(float)*samples);
cpark308 1:caeb5792f292 66 startButton.fall(&startRecording);
cpark308 1:caeb5792f292 67 printButton.fall(&startPrint);
cpark308 2:919431d2e1a7 68 sendToMasterButton.fall(&startSend);
cpark308 1:caeb5792f292 69 //trigger.rise(&interruptrecv);
cpark308 1:caeb5792f292 70 //Thread threadanalog(analogScope);
cpark308 1:caeb5792f292 71 //threadanalog.set_priority(osPriorityLow);
cpark308 0:7ee25b048596 72 while(1) {
cpark308 1:caeb5792f292 73 if(start){ //once button is pressed
cpark308 1:caeb5792f292 74 startTime = ti.read_us(); //get start time
cpark308 1:caeb5792f292 75 for(int i = 0;i<samples;i++){ //record 300 samples
cpark308 2:919431d2e1a7 76 signal[i] = audioIn;
cpark308 1:caeb5792f292 77 }
cpark308 1:caeb5792f292 78 endTime = ti.read_us(); //get end time
cpark308 1:caeb5792f292 79 sampleRate = (int)(samples*1000000/(endTime-startTime)); //calculate sample rate
cpark308 2:919431d2e1a7 80
cpark308 2:919431d2e1a7 81
cpark308 2:919431d2e1a7 82 arm_conv_f32(signal, 301 , b, 51, filteredSignal ) ; //Filtering operation
cpark308 2:919431d2e1a7 83 float calcSignal[251] = {};
cpark308 2:919431d2e1a7 84 for (int i = 0; i<251; i++){
cpark308 2:919431d2e1a7 85 calcSignal[i] = filteredSignal[i+51];
cpark308 2:919431d2e1a7 86 }
cpark308 2:919431d2e1a7 87 //Determine phase
cpark308 2:919431d2e1a7 88 phases = phase.estimate(calcSignal, 251);
cpark308 2:919431d2e1a7 89
cpark308 2:919431d2e1a7 90
cpark308 1:caeb5792f292 91 start = 0; //stop
cpark308 2:919431d2e1a7 92 //send = 1; //set send to high to automatically start sending data
cpark308 2:919431d2e1a7 93
cpark308 2:919431d2e1a7 94
cpark308 2:919431d2e1a7 95
cpark308 1:caeb5792f292 96 }
cpark308 1:caeb5792f292 97 if(print){
cpark308 1:caeb5792f292 98 for(int i = 0;i<samples;i++){
cpark308 2:919431d2e1a7 99 pc.printf("%5f ",signal[i]);
cpark308 1:caeb5792f292 100 }
cpark308 1:caeb5792f292 101 pc.printf("\n %5d",sampleRate);
cpark308 1:caeb5792f292 102 print = 0;
cpark308 1:caeb5792f292 103 }
cpark308 2:919431d2e1a7 104 if(send){
cpark308 2:919431d2e1a7 105 myled = 1;
cpark308 2:919431d2e1a7 106 wait(0.15);
cpark308 2:919431d2e1a7 107 char buffer[128];
cpark308 2:919431d2e1a7 108 //for(int i =0;i<samples;i++){
cpark308 2:919431d2e1a7 109 pc.printf("%7f\n",phases);
cpark308 2:919431d2e1a7 110 master.printf("%7f\n",phases);
cpark308 2:919431d2e1a7 111 //master.printf("291.313\n",phases);
cpark308 2:919431d2e1a7 112
cpark308 2:919431d2e1a7 113 //}
cpark308 2:919431d2e1a7 114 send = 0;
cpark308 2:919431d2e1a7 115 myled = 0;
cpark308 2:919431d2e1a7 116 }
cpark308 0:7ee25b048596 117 }
cpark308 0:7ee25b048596 118 }