Projet S5 Info - Advanced

Dependencies:   TextLCD XBeeLib mbed-rtos mbed

Fork of Coordinateur by Vincent Belanger

Committer:
vinbel93
Date:
Wed Apr 06 20:15:52 2016 +0000
Revision:
6:59b0b6c1b5bb
Parent:
5:08245a3e93a8
Child:
7:bd9bc9fa66c7
gp2d12

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jasmou 0:3acd447c12c0 1 #include "mbed.h"
vinbel93 2:a7820185e9a8 2 #include "rtos.h"
jasmou 0:3acd447c12c0 3 #include "XBeeLib.h"
vinbel93 1:33b4a3b5cdb5 4 #include "SDFileSystem.h"
vinbel93 1:33b4a3b5cdb5 5 #include "wave_player.h"
jasmou 0:3acd447c12c0 6
jasmou 0:3acd447c12c0 7 using namespace XBeeLib;
vinbel93 1:33b4a3b5cdb5 8
vinbel93 1:33b4a3b5cdb5 9 SDFileSystem sd(p5, p6, p7, p8, "sd"); // MOSI, MISO, SCLK, SSEL
vinbel93 5:08245a3e93a8 10 PwmOut speaker(p21);
vinbel93 5:08245a3e93a8 11 AnalogIn GP2D12(p16);
vinbel93 2:a7820185e9a8 12 //wave_player player(&DACout);
jasmou 0:3acd447c12c0 13 Serial pc(USBTX, USBRX);
vinbel93 6:59b0b6c1b5bb 14 float octaveMult=0.5;
vinbel93 2:a7820185e9a8 15 osThreadId threadIDC5;
vinbel93 2:a7820185e9a8 16 osThreadId threadIDG5;
jasmou 0:3acd447c12c0 17
jasmou 0:3acd447c12c0 18 bool capt_1;
jasmou 0:3acd447c12c0 19 bool capt_2;
jasmou 0:3acd447c12c0 20 bool capt_3;
jasmou 0:3acd447c12c0 21 bool capt_4;
jasmou 0:3acd447c12c0 22 bool capt_5;
jasmou 0:3acd447c12c0 23 bool capt_6;
vinbel93 5:08245a3e93a8 24
vinbel93 5:08245a3e93a8 25 // 261.63 hz do
vinbel93 5:08245a3e93a8 26 // 293.66 Ré
vinbel93 5:08245a3e93a8 27 // 329.63 mi
vinbel93 5:08245a3e93a8 28 // 369.99 fa#
vinbel93 5:08245a3e93a8 29 // 415.30 sol#
vinbel93 5:08245a3e93a8 30 // 466.16 la#
vinbel93 5:08245a3e93a8 31
vinbel93 5:08245a3e93a8 32 const float DO =261.63;
vinbel93 6:59b0b6c1b5bb 33 const float RE =293.66;
vinbel93 6:59b0b6c1b5bb 34 const float MI =329.63;
vinbel93 6:59b0b6c1b5bb 35 const float FA_SHARP =369.99;
vinbel93 6:59b0b6c1b5bb 36 const float SOL_SHARP =415.30;
vinbel93 6:59b0b6c1b5bb 37 const float LA_SHARP =466.16;
vinbel93 6:59b0b6c1b5bb 38
vinbel93 6:59b0b6c1b5bb 39 const float DEMI_TON = 0.05946;
vinbel93 6:59b0b6c1b5bb 40
vinbel93 6:59b0b6c1b5bb 41 uint8_t GP2D12_value = 0;
vinbel93 6:59b0b6c1b5bb 42
vinbel93 6:59b0b6c1b5bb 43 float dutyCycle = 0.0002;
vinbel93 6:59b0b6c1b5bb 44 int lastCapt=-1;
vinbel93 6:59b0b6c1b5bb 45
vinbel93 6:59b0b6c1b5bb 46 static float findPeriod(float frequency, float vibrato){
vinbel93 6:59b0b6c1b5bb 47 float freq = frequency * octaveMult;
vinbel93 6:59b0b6c1b5bb 48 if (vibrato != 0){
vinbel93 6:59b0b6c1b5bb 49 if(vibrato < 0.5){
vinbel93 6:59b0b6c1b5bb 50 freq = freq + (freq * ( (0.5 - vibrato) * 2 * DEMI_TON));
vinbel93 6:59b0b6c1b5bb 51 } else {
vinbel93 6:59b0b6c1b5bb 52 freq = freq - (freq * ( (vibrato - 0.5) * 2 * DEMI_TON));
vinbel93 6:59b0b6c1b5bb 53 }
vinbel93 6:59b0b6c1b5bb 54 }
vinbel93 6:59b0b6c1b5bb 55
vinbel93 6:59b0b6c1b5bb 56 pc.printf("freq = %f, vib = %f, freqF = %f\n\r ", frequency, vibrato, freq);
vinbel93 6:59b0b6c1b5bb 57
vinbel93 6:59b0b6c1b5bb 58 return 1.0/freq;
vinbel93 6:59b0b6c1b5bb 59 }
jasmou 0:3acd447c12c0 60
jasmou 0:3acd447c12c0 61 /** Callback function, invoked at packet reception */
jasmou 0:3acd447c12c0 62 static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
jasmou 0:3acd447c12c0 63 {
jasmou 0:3acd447c12c0 64 const uint64_t remote_addr64 = remote.get_addr64();
jasmou 0:3acd447c12c0 65
jasmou 0:3acd447c12c0 66 for (int i = 0; i < len; i++)
jasmou 0:3acd447c12c0 67 {
jasmou 0:3acd447c12c0 68 pc.printf("%02x ", data[i]);
jasmou 0:3acd447c12c0 69 }
jasmou 0:3acd447c12c0 70
vinbel93 1:33b4a3b5cdb5 71 capt_1 = (data[0] & 0b10000000);
vinbel93 1:33b4a3b5cdb5 72 capt_2 = (data[0] & 0b01000000);
vinbel93 1:33b4a3b5cdb5 73 capt_3 = (data[0] & 0b00100000);
vinbel93 1:33b4a3b5cdb5 74 capt_4 = (data[0] & 0b00010000);
vinbel93 1:33b4a3b5cdb5 75 capt_5 = (data[0] & 0b00001000);
vinbel93 1:33b4a3b5cdb5 76 capt_6 = (data[0] & 0b00000100);
vinbel93 1:33b4a3b5cdb5 77
vinbel93 6:59b0b6c1b5bb 78 GP2D12_value = data[1];
vinbel93 6:59b0b6c1b5bb 79
vinbel93 6:59b0b6c1b5bb 80 pc.printf("GP2D12(v1) = %x\r\n",GP2D12_value);
vinbel93 6:59b0b6c1b5bb 81
vinbel93 6:59b0b6c1b5bb 82 if(GP2D12_value < 0x50){
vinbel93 6:59b0b6c1b5bb 83 GP2D12_value = 0;
vinbel93 6:59b0b6c1b5bb 84 }else {
vinbel93 6:59b0b6c1b5bb 85 GP2D12_value -= 0x50;
vinbel93 6:59b0b6c1b5bb 86 }
vinbel93 6:59b0b6c1b5bb 87
vinbel93 6:59b0b6c1b5bb 88 pc.printf("GP2D12(v2) = %x\r\n",GP2D12_value);
vinbel93 6:59b0b6c1b5bb 89 float pourcentageGP2D12 = float(GP2D12_value) / float(0x70);
vinbel93 6:59b0b6c1b5bb 90
vinbel93 6:59b0b6c1b5bb 91 if(pourcentageGP2D12 > 1){
vinbel93 6:59b0b6c1b5bb 92 pourcentageGP2D12 = 1;
vinbel93 6:59b0b6c1b5bb 93 }
vinbel93 6:59b0b6c1b5bb 94 /*
vinbel93 1:33b4a3b5cdb5 95 pc.printf("\r\n%i ", capt_1);
vinbel93 1:33b4a3b5cdb5 96 pc.printf("%i ", capt_2);
vinbel93 1:33b4a3b5cdb5 97 pc.printf("%i ", capt_3);
vinbel93 1:33b4a3b5cdb5 98 pc.printf("%i ", capt_4);
vinbel93 1:33b4a3b5cdb5 99 pc.printf("%i ", capt_5);
vinbel93 1:33b4a3b5cdb5 100 pc.printf("%i ", capt_6);
vinbel93 1:33b4a3b5cdb5 101
vinbel93 6:59b0b6c1b5bb 102 pc.printf("\r\n");*/
vinbel93 2:a7820185e9a8 103
vinbel93 6:59b0b6c1b5bb 104 pc.printf("GP2D12(v3) = %x\r\n",GP2D12_value);
vinbel93 4:714484401021 105 if(capt_1){
vinbel93 6:59b0b6c1b5bb 106 speaker.period(findPeriod(DO, pourcentageGP2D12));
vinbel93 6:59b0b6c1b5bb 107
vinbel93 6:59b0b6c1b5bb 108 speaker=dutyCycle;
vinbel93 6:59b0b6c1b5bb 109 lastCapt = 1;
vinbel93 5:08245a3e93a8 110 } else if(capt_2) {
vinbel93 6:59b0b6c1b5bb 111 speaker.period(findPeriod(RE, pourcentageGP2D12));
vinbel93 6:59b0b6c1b5bb 112
vinbel93 6:59b0b6c1b5bb 113 speaker=dutyCycle;
vinbel93 6:59b0b6c1b5bb 114 lastCapt = 2;
vinbel93 5:08245a3e93a8 115 } else if(capt_3) {
vinbel93 6:59b0b6c1b5bb 116 speaker.period(findPeriod(MI, pourcentageGP2D12));
vinbel93 6:59b0b6c1b5bb 117
vinbel93 6:59b0b6c1b5bb 118 speaker=dutyCycle;
vinbel93 6:59b0b6c1b5bb 119 lastCapt = 3;
vinbel93 6:59b0b6c1b5bb 120 pc.printf("mi \r\n");
vinbel93 5:08245a3e93a8 121 } else if(capt_4) {
vinbel93 6:59b0b6c1b5bb 122 speaker.period(findPeriod(FA_SHARP, pourcentageGP2D12));
vinbel93 6:59b0b6c1b5bb 123
vinbel93 6:59b0b6c1b5bb 124 speaker=dutyCycle;
vinbel93 6:59b0b6c1b5bb 125 lastCapt = 4;
vinbel93 5:08245a3e93a8 126 } else if(capt_5) {
vinbel93 6:59b0b6c1b5bb 127 speaker.period(findPeriod(SOL_SHARP, pourcentageGP2D12));
vinbel93 6:59b0b6c1b5bb 128
vinbel93 6:59b0b6c1b5bb 129 speaker=dutyCycle;
vinbel93 6:59b0b6c1b5bb 130 lastCapt = 5;
vinbel93 5:08245a3e93a8 131 } else if(capt_6) {
vinbel93 6:59b0b6c1b5bb 132 speaker.period(findPeriod(LA_SHARP, pourcentageGP2D12));
vinbel93 6:59b0b6c1b5bb 133
vinbel93 6:59b0b6c1b5bb 134 speaker=dutyCycle;
vinbel93 6:59b0b6c1b5bb 135 lastCapt = 6;
vinbel93 4:714484401021 136 } else {
vinbel93 5:08245a3e93a8 137 speaker=0.0f;
vinbel93 4:714484401021 138 }
jasmou 0:3acd447c12c0 139 }
vinbel93 2:a7820185e9a8 140
vinbel93 2:a7820185e9a8 141 void playFile(const char* name)
vinbel93 1:33b4a3b5cdb5 142 {
vinbel93 2:a7820185e9a8 143 /*
vinbel93 2:a7820185e9a8 144 FILE *fp = fopen(name, "r");
vinbel93 1:33b4a3b5cdb5 145 if(fp == NULL) {
vinbel93 1:33b4a3b5cdb5 146 pc.printf("Could not open file for read\r\n");
vinbel93 1:33b4a3b5cdb5 147 }
vinbel93 1:33b4a3b5cdb5 148 else {
vinbel93 1:33b4a3b5cdb5 149 player.play(fp);
vinbel93 1:33b4a3b5cdb5 150 }
vinbel93 1:33b4a3b5cdb5 151 fclose(fp);
vinbel93 2:a7820185e9a8 152 */
vinbel93 2:a7820185e9a8 153 }
vinbel93 5:08245a3e93a8 154 /*
vinbel93 2:a7820185e9a8 155 void playC5(void const* args)
vinbel93 2:a7820185e9a8 156 {
vinbel93 2:a7820185e9a8 157 threadIDC5 = osThreadGetId();
vinbel93 4:714484401021 158 while(1){
vinbel93 4:714484401021 159 osSignalWait(0x1, osWaitForever);
vinbel93 4:714484401021 160 pc.printf("Wait done C5");
vinbel93 4:714484401021 161 //playFile("/sd/Synth/C5.wav");
vinbel93 4:714484401021 162 speaker2=0.50f; // 50% duty cycle
vinbel93 4:714484401021 163 //speaker2=1.0;
vinbel93 4:714484401021 164 wait(2);
vinbel93 4:714484401021 165 speaker2=0.0; // turn off audio
vinbel93 4:714484401021 166 wait(2);
vinbel93 4:714484401021 167 }
vinbel93 2:a7820185e9a8 168 }
vinbel93 2:a7820185e9a8 169
vinbel93 2:a7820185e9a8 170 void playG5(void const* args)
vinbel93 2:a7820185e9a8 171 {
vinbel93 2:a7820185e9a8 172 threadIDG5 = osThreadGetId();
vinbel93 2:a7820185e9a8 173
vinbel93 4:714484401021 174 while(1){
vinbel93 4:714484401021 175 osSignalWait(0x2, osWaitForever);
vinbel93 4:714484401021 176 pc.printf("Wait done G5");
vinbel93 4:714484401021 177 //wait(1);
vinbel93 4:714484401021 178 //playFile("/sd/Synth/A5.wav");
vinbel93 4:714484401021 179 speaker1=0.50f; // 50% duty cycle
vinbel93 4:714484401021 180 //speaker1=1.0;
vinbel93 4:714484401021 181 wait(3);
vinbel93 4:714484401021 182 speaker1=0.0; // turn off audio
vinbel93 4:714484401021 183 wait(1);
vinbel93 4:714484401021 184 }
vinbel93 2:a7820185e9a8 185 }
vinbel93 5:08245a3e93a8 186 */
vinbel93 2:a7820185e9a8 187 int main()
vinbel93 6:59b0b6c1b5bb 188 {
vinbel93 1:33b4a3b5cdb5 189 XBeeZB xbee = XBeeZB(p13, p14, p8, NC, NC, 9600);
vinbel93 2:a7820185e9a8 190
jasmou 0:3acd447c12c0 191 /* Register callbacks */
jasmou 0:3acd447c12c0 192 xbee.register_receive_cb(&receive_cb);
vinbel93 2:a7820185e9a8 193
jasmou 0:3acd447c12c0 194 RadioStatus const radioStatus = xbee.init();
vinbel93 2:a7820185e9a8 195
jasmou 0:3acd447c12c0 196 MBED_ASSERT(radioStatus == Success);
jasmou 0:3acd447c12c0 197
jasmou 0:3acd447c12c0 198 /* Wait until the device has joined the network */
jasmou 0:3acd447c12c0 199 pc.printf("Waiting for device to join the network: ");
jasmou 0:3acd447c12c0 200 while (!xbee.is_joined()) {
jasmou 0:3acd447c12c0 201 wait_ms(1000);
jasmou 0:3acd447c12c0 202 }
jasmou 0:3acd447c12c0 203 pc.printf("OK\r\n");
jasmou 0:3acd447c12c0 204
jasmou 0:3acd447c12c0 205 while (true) {
jasmou 0:3acd447c12c0 206 xbee.process_rx_frames();
vinbel93 5:08245a3e93a8 207 wait_ms(50);
jasmou 0:3acd447c12c0 208 }
jasmou 0:3acd447c12c0 209 }