Software for Sensor box, read analogue values and send using nRF
Dependencies: MMA8451Q mbed nRF24L01P
Fork of Acclerometer_node by
main.cpp
- Committer:
- henriwts
- Date:
- 2015-08-06
- Revision:
- 7:46da94ccfa67
- Parent:
- 6:7198985d3442
- Child:
- 8:412307ba78b0
File content as of revision 7:46da94ccfa67:
#include "mbed.h" #include "math.h" Serial pc (USBTX, USBRX); const int ARRAY_LENGTH = 500; float temperature_celsius, temperature_voltage, light_voltage, raw_pir_reading, noise_voltage, noise_maximum, noise_average, noise_total, noise_variance, noise_sd, presence_percentage, num_consecutive_runs; char publishString[40]; float noise_array[ARRAY_LENGTH]; int pir_array[ARRAY_LENGTH]; //bool DEBUG_MODE = false; AnalogIn light_ain(A0); AnalogIn temp_ain(A1); AnalogIn pir_ain(A2); AnalogIn noise_ain(A3); void publish_measurements() { temperature_voltage = temp_ain.read_u16(); // Convert DAC reading to millivolts temperature_voltage = (temperature_voltage * 3.3 * 1000) / 4095; // Convert millivolts to Celsius using datasheet equation temperature_celsius = (2103 - temperature_voltage) / 10.9; //if(DEBUG_MODE) { //Serial.println("Temperature (Celsius): " + String(temperature_celsius)); //} light_voltage = light_ain.read_u16(); sprintf(publishString,"%.1f, %.1f, %.1f, %.1f, %.1f", temperature_celsius, light_voltage, noise_maximum, noise_average, noise_variance); //Spark.publish("measurements", publishString); sprintf(publishString, "%.1f, %.1f", presence_percentage, num_consecutive_runs); //Spark.publish("measurements", publishString); } void measure_pir_and_noise() { noise_voltage = 0; for (int i = 0; i < ARRAY_LENGTH; i++) { raw_pir_reading = pir_ain.read_u16(); noise_voltage = noise_ain.read_u16(); noise_array[i] = noise_voltage; if (raw_pir_reading > 3000) { pir_array[i] = 1; } else { pir_array[i] = 0; } //if (DEBUG_MODE) { //Serial.println("PIR: " + String(raw_pir_reading)); //Serial.println("Noise: " + String(noise_voltage)); //} wait(0.1); } } void noise_analysis() { float residuals[ARRAY_LENGTH]; noise_maximum = 0; noise_average = 0; noise_variance = 0; noise_total = 0; for (int i = 0; i < ARRAY_LENGTH; i++) { if (noise_array[i] > noise_maximum) noise_maximum = noise_array[i]; noise_total += noise_array[i]; } noise_average = noise_total / (ARRAY_LENGTH * 1.0); for (int i = 0; i < ARRAY_LENGTH; i++) { residuals[i] = noise_array[i] - noise_average; noise_variance += residuals[i] * residuals[i]; } noise_variance = noise_variance / (ARRAY_LENGTH * 1.0); } void pir_analysis() { int counts_over_1s = 0; int longest_consecutive_run = 0; int curr_num_consecutive = 0; counts_over_1s = pir_array[0] == 1 ? 1 : 0; for (int i = 1; i < ARRAY_LENGTH; i++) { if (pir_array[i] == 1) { ++counts_over_1s; } if (pir_array[i] == 1 && pir_array[i-1] == 1) { ++curr_num_consecutive; } else { if (curr_num_consecutive > longest_consecutive_run) { longest_consecutive_run = curr_num_consecutive; curr_num_consecutive = 0; } } } presence_percentage = 100 * counts_over_1s * 1.0 / ARRAY_LENGTH; num_consecutive_runs = longest_consecutive_run; } int main() { while (1) { temperature_voltage = temp_ain.read_u16(); pc.printf("%f \n", temperature_voltage); light_voltage = light_ain.read_u16(); pc.printf("%f \n", light_voltage); wait(2); // measure_pir_and_noise(); // noise_analysis(); // pir_analysis(); // publish_measurements(); } }