test publish

Dependencies:   mbed GroveEarbudSensor

Committer:
antoineA
Date:
Thu Apr 14 12:18:49 2016 +0000
Revision:
11:e9d48f0a6b3e
Parent:
10:af58557a4d6c
Child:
12:a56f9fb318de
main updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
antoineA 0:8bec0f0b673a 1 #include "mbed.h"
age2pierre 3:b4f04b8b8797 2 #include "GroveEarbudSensor.h"
age2pierre 8:e1beb2a9454e 3 #include "GypsyScale.h"
age2pierre 8:e1beb2a9454e 4 #include "MajorScale.h"
age2pierre 8:e1beb2a9454e 5 #include "Speaker.h"
age2pierre 8:e1beb2a9454e 6 #include "MelodyGenerator.h"
age2pierre 8:e1beb2a9454e 7 #include "Notes.h"
antoineA 10:af58557a4d6c 8 #include "GSRSensor.h"
age2pierre 8:e1beb2a9454e 9 #include <vector>
age2pierre 3:b4f04b8b8797 10
antoineA 11:e9d48f0a6b3e 11 #define NBGSRVALUE 20
antoineA 11:e9d48f0a6b3e 12
age2pierre 8:e1beb2a9454e 13 using namespace std;
age2pierre 8:e1beb2a9454e 14
age2pierre 8:e1beb2a9454e 15 InterruptIn earSensorPin(p5);
antoineA 11:e9d48f0a6b3e 16 AnalogIn GSRPin(p15);
age2pierre 8:e1beb2a9454e 17 //DigitalOut led(LED1);
age2pierre 8:e1beb2a9454e 18 PwmOut speakerPin(p21);
antoineA 0:8bec0f0b673a 19
antoineA 0:8bec0f0b673a 20 int main()
antoineA 0:8bec0f0b673a 21 {
age2pierre 8:e1beb2a9454e 22 GroveEarbudSensor earbud(&earSensorPin);
age2pierre 8:e1beb2a9454e 23 Speaker speaker(&speakerPin);
age2pierre 8:e1beb2a9454e 24 MelodyGenerator melodyGen;
antoineA 11:e9d48f0a6b3e 25 GSRSensor GSRSens(&GSRPin);
antoineA 11:e9d48f0a6b3e 26
age2pierre 8:e1beb2a9454e 27 MajorScale scale1(SOL_4);
age2pierre 8:e1beb2a9454e 28 GypsyScale scale2(MI_4);
antoineA 11:e9d48f0a6b3e 29
antoineA 11:e9d48f0a6b3e 30 printf("Initialization.. waiting 14s");
antoineA 11:e9d48f0a6b3e 31 fflush(stdout);
antoineA 11:e9d48f0a6b3e 32 wait(4); // Time for GSR measure to stabilize
antoineA 11:e9d48f0a6b3e 33
antoineA 11:e9d48f0a6b3e 34 float sumGSR, sumHR = 0.0;
antoineA 11:e9d48f0a6b3e 35 float thresholdHR, thresholdGSR = 0.0;
antoineA 11:e9d48f0a6b3e 36 for(int i = 0 ; i<NBGSRVALUE ; i++){
antoineA 11:e9d48f0a6b3e 37 sumGSR += GSRSens.getGSRValue();
antoineA 11:e9d48f0a6b3e 38 sumHR += earbud.getHeartRate();
antoineA 11:e9d48f0a6b3e 39 wait(0.5);
antoineA 11:e9d48f0a6b3e 40
antoineA 11:e9d48f0a6b3e 41 }
antoineA 11:e9d48f0a6b3e 42 thresholdGSR = sumGSR/NBGSRVALUE;
antoineA 11:e9d48f0a6b3e 43 thresholdHR = sumHR/NBGSRVALUE;
antoineA 11:e9d48f0a6b3e 44
antoineA 11:e9d48f0a6b3e 45 vector<Notes>* melo;
antoineA 11:e9d48f0a6b3e 46 float heartRate, measureGSR;
age2pierre 3:b4f04b8b8797 47 while(true) {
antoineA 11:e9d48f0a6b3e 48
antoineA 11:e9d48f0a6b3e 49 heartRate = earbud.getHeartRate();
antoineA 11:e9d48f0a6b3e 50 measureGSR = GSRSens.getGSRValue();
antoineA 11:e9d48f0a6b3e 51 printf("\r\nHeartrate : %0.0f (nominal : %0.3f) \r\nGSR : %0.4f (nominal : %0.4f) \r\n", heartRate, thresholdHR, measureGSR, thresholdGSR); // for debug purpose
antoineA 11:e9d48f0a6b3e 52
age2pierre 8:e1beb2a9454e 53 if(heartRate <30) {
age2pierre 8:e1beb2a9454e 54 speaker.play(SILENCE);
age2pierre 8:e1beb2a9454e 55 heartRate = earbud.getHeartRate();
antoineA 11:e9d48f0a6b3e 56 wait(1);
age2pierre 8:e1beb2a9454e 57 } else {
antoineA 11:e9d48f0a6b3e 58 if (measureGSR < thresholdGSR){
antoineA 11:e9d48f0a6b3e 59 melo = melodyGen.getMeasure(scale1);
antoineA 11:e9d48f0a6b3e 60 printf("\tMajor scale\r\n");
antoineA 11:e9d48f0a6b3e 61 }
antoineA 11:e9d48f0a6b3e 62 else {
antoineA 11:e9d48f0a6b3e 63 melo = melodyGen.getMeasure(scale2);
antoineA 11:e9d48f0a6b3e 64 printf("\tGypsy scale\r\n");
antoineA 11:e9d48f0a6b3e 65 }
antoineA 11:e9d48f0a6b3e 66
age2pierre 8:e1beb2a9454e 67 for(vector<Notes>::iterator it = melo->begin(); it != melo->end(); ++it) {
age2pierre 8:e1beb2a9454e 68 speaker.play(*it);
antoineA 11:e9d48f0a6b3e 69 wait( 0.3 - ((heartRate - thresholdHR) * 0.0015));
age2pierre 8:e1beb2a9454e 70 }
age2pierre 8:e1beb2a9454e 71 }
antoineA 11:e9d48f0a6b3e 72
antoineA 11:e9d48f0a6b3e 73
antoineA 0:8bec0f0b673a 74 }
antoineA 0:8bec0f0b673a 75 }