ReSpeaker Switch V02
Dependencies: mbed MbedJSONValue
Diff: main.cpp
- Revision:
- 13:b80d07c4f6e6
- Parent:
- 12:1b8560db3dff
--- a/main.cpp Mon Aug 27 12:18:51 2018 +0000 +++ b/main.cpp Sat Jun 08 11:04:53 2019 +0000 @@ -1,6 +1,6 @@ //////////////////////////////////////// -// Tau_ReSpeaker_Sitch_V01 // -// Arkadiraf@gmail.com - 26/08/2018 // +// Tau_ReSpeaker_Sitch_V02 // +// Arkadiraf@gmail.com - 08/06/2019 // //////////////////////////////////////// /* json format: json:{"name":"auto"} - automatic mode @@ -8,25 +8,19 @@ */ /* - Bugs: - PA_14 and PA_13 are share with stlink - not available as interrupt pins - Used in polling mode instead - didnt switch to spk 5 - changed spk limits in auto switch perhaps this was the issue. -*/ -/* Board : Nucleo STM32F446RE - Power Source : USB || Jumper 5V source from STM32 DSP board + Power Source : DC-DC 5V Regulator E5V Jumper */ /* Nucleo board modification: - to use PH_0(MUX_S2) as IO modify boards as followed: + XBee UART Shield + SB13 , SB14 Off + SB62 , SB63 On + + to use PH_0 / PH_1 (MUX_S2/S3) as IO modify boards as followed: SB54 and SB55 ON SB16 and SB50 (MCO) OFF - - For use GPIO PC15 , PC14 - SB48 and SB49 ON - R34 and R36 removed http://www.st.com/content/ccc/resource/technical/document/user_manual/98/2e/fa/4b/e0/82/43/b7/DM00105823.pdf/files/DM00105823.pdf/jcr:content/translations/en.DM00105823.pdf */ @@ -40,12 +34,12 @@ PC_10 (Tx) --> SW_Rx PC_11 (Rx) --> SW_Tx - I2C_Bus - PB_8 --> SCL - PB_9 --> SDA + Digital output : + PA_5 --> led + PC_8 --> led1 + PC_6 --> led2 + PA_15 --> TRIG - Digital output : - PA_5 --> led (DigitalOut) MUX: CD74HC4067 PC_12 --> MUX_S0 @@ -64,11 +58,11 @@ PA_10 --> DSP_Trigger MIC Interrupts: - PC_15 --> INTER_1 - PC_14 --> INTER_2 - PA_15 --> INTER_3 - PA_14 --> INTER_4 - PA_13 --> INTER_5 + PA_6 --> INTER_1 + PA_7 --> INTER_2 + PB_6 --> INTER_3 + PC_7 --> INTER_4 + PA_9 --> INTER_5 Digital Input PC_13 --> BTN (Blue) @@ -132,6 +126,9 @@ // digital output DigitalOut led(PA_5); +DigitalOut led1(PC_8); +DigitalOut led2(PC_6); +DigitalOut trigger(PA_15); // interrup from dsp mcu (frequency counter) InterruptIn dsp_trigger(PA_10); @@ -150,11 +147,11 @@ DigitalOut en_spk_5(PB_13); // MIC interrupts -DigitalIn inter_1(PC_15 , PullDown); -DigitalIn inter_2(PC_14 , PullDown); -DigitalIn inter_3(PA_15 , PullDown); -DigitalIn inter_4(PA_14 , PullDown); -DigitalIn inter_5(PA_13 , PullDown); +DigitalIn inter_1(PA_6, PullDown); +DigitalIn inter_2(PA_7, PullDown); +DigitalIn inter_3(PB_6, PullDown); +DigitalIn inter_4(PC_7, PullDown); +DigitalIn inter_5(PA_9, PullDown); // analog input AnalogIn a_data_1(PA_0); @@ -302,11 +299,12 @@ pc.printf("{\"event\":\"micInt\",\"mic\":%d,\"time\":%.3f}\r\n",micInterrupt,callTime); // Printf generates delay of about 5 millis // led blink - led = !led; + led2 = !led2; //wait(0.1); - // reset micInterrupt flag - micInterrupt=0; } + // reset micInterrupt flag + trigger = 0; // pull trigger down + micInterrupt=0; } }// end main loop }// end main @@ -339,6 +337,10 @@ // update hardware // update mic select mux uint8_t micByte = (uint8_t) micChannle; + // flip mic order around 3, I guess it is the stupidest implementation but hey :) tada. + if (micByte != 0) { + micByte = ((~(micByte + 0b00001001)) & 0b00001111); + } mux_s0.write((bool)(micByte & 0b00000001)); mux_s1.write((bool)(micByte & 0b00000010)); mux_s2.write((bool)(micByte & 0b00000100)); @@ -398,22 +400,27 @@ if (inter_1.read() && (micInterrupt != 1)) { eventFlag=1; micInterrupt=1; + trigger=1; } if (inter_2.read() && (micInterrupt != 2)) { eventFlag=1; micInterrupt=2; + trigger=1; } if (inter_3.read() && (micInterrupt != 3)) { eventFlag=1; micInterrupt=3; + trigger=1; } if (inter_4.read() && (micInterrupt != 4)) { eventFlag=1; micInterrupt=4; + trigger=1; } if (inter_5.read() && (micInterrupt != 5)) { eventFlag=1; micInterrupt=5; + trigger=1; } return eventFlag; } @@ -432,14 +439,14 @@ { while (pc.readable()) { // read icoming - //led = !led; + led = !led; uint8_t in_byte = pc.getc(); #ifdef DEBUG_MOD1 pc.putc(in_byte); #endif // detect start message , end message switch (packetMSG.syncFlag) { - // waiting for header + // waiting for header case 0: { if (packetMSG.header[packetMSG.syncIndex] == in_byte) { packetMSG.syncIndex++; @@ -565,7 +572,13 @@ autoFlag=0; // update controls switchPacket(); - } else if ((targetName == "dsp") || (targetName == "dspParam") || (targetName == "dspFilter")) { + } else if ((targetName == "dsp") || (targetName == "dspParam") || (targetName == "dspFilter") || (targetName == "dspPlay")) { + if (targetName == "dspPlay"){ + // if target is to play a sound, trigger the daq to record. + trigger = 1; + wait(0.001); + trigger = 0; + } // send msg to dsp dsp.printf("json:%s", json); #ifdef DEBUG_MOD2 @@ -586,7 +599,7 @@ pc.printf("Error: %s", json); } // led blink - led = !led; + led1 = !led1; }// end parse // switch Packet Handler @@ -603,7 +616,7 @@ // get loop frequency calculator flag loopFreqFlag = guiCmd["LoopFreq"].get<bool>(); - + // get speakers output for (int ii=0 ; ii < 5 ; ii++) { spkChannle[ii] = guiCmd["spk"][ii].get<bool>(); @@ -615,6 +628,10 @@ // update hardware // update mic select mux uint8_t micByte = (uint8_t) micChannle; + // flip mic order around 3, I guess it is the stupidest implementation but hey :) tada. + if (micByte != 0) { + micByte = ((~(micByte + 0b00001001)) & 0b00001111); + } mux_s0.write((bool)(micByte & 0b00000001)); mux_s1.write((bool)(micByte & 0b00000010)); mux_s2.write((bool)(micByte & 0b00000100));