Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SmartSwitch TMRh20 mbed
Diff: main.cpp
- Revision:
- 0:7f49ac69d623
- Child:
- 1:2b938172cef5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Mar 17 11:15:02 2016 +0000
@@ -0,0 +1,136 @@
+#include "mbed.h"
+#include "DeafNode.h"
+
+AnalogIn adc0(A0);
+AnalogIn adc1(A1);
+AnalogIn adc2(A2);
+AnalogIn adc3(A3);
+
+DigitalOut led(PA_8);
+DeafNode *deafNode;
+Serial pc(USBTX, USBRX);
+
+#define SAMPLE_SIZE 240
+#define PRESAMPLE_SIZE 10
+// Buffers to store the samples of the 4 channels
+uint8_t buffer0[SAMPLE_SIZE];
+uint8_t buffer1[SAMPLE_SIZE];
+uint8_t buffer2[SAMPLE_SIZE];
+uint8_t buffer3[SAMPLE_SIZE];
+
+int sample_start;
+int sample_size;
+int sample_pointer;
+
+#define DCVAL 118
+#define THRESHOLD 34
+
+uint8_t datapacket[32];
+
+volatile unsigned int TickCount;
+extern "C" void SysTick_Handler (void)
+{
+ TickCount+= 1;
+}
+
+void readMics()
+{
+ buffer0[sample_pointer] = adc0.read_u16() >> 8;
+ buffer1[sample_pointer] = adc1.read_u16() >> 8;
+ buffer2[sample_pointer] = adc2.read_u16() >> 8;
+ buffer3[sample_pointer] = adc3.read_u16() >> 8;
+}
+
+bool checkThreshold()
+{
+ bool threshold = false;
+
+ if (buffer0[sample_pointer] > DCVAL + THRESHOLD || buffer0[sample_pointer] < DCVAL - THRESHOLD) threshold = true;
+ else if (buffer1[sample_pointer] > DCVAL + THRESHOLD || buffer1[sample_pointer] < DCVAL - THRESHOLD) threshold = true;
+ else if (buffer2[sample_pointer] > DCVAL + THRESHOLD || buffer2[sample_pointer] < DCVAL - THRESHOLD) threshold = true;
+ else if (buffer3[sample_pointer] > DCVAL + THRESHOLD || buffer3[sample_pointer] < DCVAL - THRESHOLD) threshold = true;
+
+ return threshold;
+}
+
+void sendSamples(uint8_t id, uint8_t *samples, int length, int pointer)
+{
+ datapacket[0] = id;
+ int c = 0;
+ while (c < length) {
+ int j;
+ for (j = 0; j < 24; j++) {
+ datapacket[1 + j] = samples[pointer];
+ pointer++;
+ if (pointer > length) pointer = 0;
+ c++;
+ if (c > length) break;
+ }
+ deafNode->sendData(0, datapacket, j + 1);
+ }
+}
+
+int main()
+{
+ SysTick_Config(SystemCoreClock / 1000); // Systick in ms
+
+ pc.baud(115200);
+ pc.printf("Node started (%d MHz).\n", SystemCoreClock / 1000000);
+
+ NodeConfig nc;
+ nc.address = 0x4D31;
+ nc.netprefix = 0x424D45L;
+ nc.radioCE = D7;
+ nc.radioCS = D8;
+ nc.spi_sck = SPI_SCK;
+ nc.spi_miso = SPI_MISO;
+ nc.spi_mosi = SPI_MOSI;
+ nc.radioChannel = 96;
+ nc.radioSpeed = RF24_2MBPS;
+
+ deafNode = new DeafNode(&nc);
+ deafNode->setup();
+
+ sample_start = 0;
+ sample_size = 0;
+ sample_pointer = 0;
+
+ bool action = false;
+
+ while(1) {
+
+ readMics();
+ pc.puts(".");
+
+ if (!action) {
+ // Not in action, just listening
+ if (checkThreshold()) {
+ pc.puts("\nThreshold reached!\n");
+ action = true;
+ if (sample_size > PRESAMPLE_SIZE) {
+ sample_size = PRESAMPLE_SIZE;
+ }
+ sample_start = sample_pointer - sample_size;
+ }
+ sample_pointer++;
+ if (sample_pointer > SAMPLE_SIZE) sample_pointer = 0;
+ if (sample_size < SAMPLE_SIZE) sample_size++;
+ } else {
+ // In action, collecting
+ sample_pointer++;
+ if (sample_pointer > SAMPLE_SIZE) sample_pointer = 0;
+ sample_size++;
+ if (sample_size == SAMPLE_SIZE) {
+ // Stop collecting, send samples
+ action = false;
+ printf("\nSending samples.\n");
+ sendSamples(0, buffer0, SAMPLE_SIZE, sample_pointer);
+ sendSamples(1, buffer1, SAMPLE_SIZE, sample_pointer);
+ sendSamples(2, buffer2, SAMPLE_SIZE, sample_pointer);
+ sendSamples(3, buffer3, SAMPLE_SIZE, sample_pointer);
+ sample_size = 0;
+ sample_pointer = 0;
+ }
+ }
+ }
+}