PIR still blocked by the XBee reading. Audio sensor not configured yet.

Dependencies:   BME280 SI1145 mbed

Committer:
jonathanyost
Date:
Wed Jul 26 13:22:03 2017 +0000
Revision:
5:0e4d19f6ba45
Parent:
4:7335cd74f3bc
Child:
6:002e8a4809eb
It's working sans PIR;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jonathanyost 0:7daf9b751759 1 /*
jonathanyost 0:7daf9b751759 2 Author: Jonathan Yost
jonathanyost 0:7daf9b751759 3 Title: END_NODE_REQUEST_POC
jonathanyost 0:7daf9b751759 4 Date: 6/28/17
jonathanyost 0:7daf9b751759 5
jonathanyost 0:7daf9b751759 6 Desc: Reads in data from the sensors and sends to the gateway.
jonathanyost 0:7daf9b751759 7 yeah.
jonathanyost 0:7daf9b751759 8 */
jonathanyost 0:7daf9b751759 9
jonathanyost 0:7daf9b751759 10 // Libraries
jonathanyost 1:d0db255b07a8 11 #include "mbed.h"
jonathanyost 0:7daf9b751759 12 #include "BME280.h"
jonathanyost 0:7daf9b751759 13 #include "SI1145.h"
jonathanyost 0:7daf9b751759 14
jonathanyost 0:7daf9b751759 15 // Define Constants / Macros
jonathanyost 0:7daf9b751759 16 #define node_id (0x01)
jonathanyost 0:7daf9b751759 17 #define tx (PA_9)
jonathanyost 0:7daf9b751759 18 #define rx (PA_10)
jonathanyost 0:7daf9b751759 19
jonathanyost 2:dd4d53687372 20 // Declare Noise Sensor Stuff
jonathanyost 2:dd4d53687372 21 #define noise_pin (PA_1)
jonathanyost 2:dd4d53687372 22
jonathanyost 2:dd4d53687372 23 Timer t;
jonathanyost 2:dd4d53687372 24
jonathanyost 5:0e4d19f6ba45 25 const char nodeID = '3';
jonathanyost 4:7335cd74f3bc 26
jonathanyost 4:7335cd74f3bc 27 // RX declarations
jonathanyost 3:07fd499e96b4 28 uint8_t rx_buffer[64];
jonathanyost 3:07fd499e96b4 29 bool rx_flag = false;
jonathanyost 4:7335cd74f3bc 30 int rx_index = 0;
jonathanyost 3:07fd499e96b4 31
jonathanyost 0:7daf9b751759 32
jonathanyost 0:7daf9b751759 33 // I/O Delarations
jonathanyost 0:7daf9b751759 34 I2C i2c(I2C_SDA, I2C_SCL); // D4, D5
jonathanyost 0:7daf9b751759 35 BME280 *thp_sensor = new BME280(i2c);
jonathanyost 0:7daf9b751759 36 SI1145 *uiv_sensor = new SI1145(i2c);
jonathanyost 2:dd4d53687372 37 AnalogIn adc_noise(noise_pin);
jonathanyost 2:dd4d53687372 38
jonathanyost 0:7daf9b751759 39
jonathanyost 0:7daf9b751759 40 // Declare the PIR interface
jonathanyost 1:d0db255b07a8 41 InterruptIn PIR_sensor(PA_5);
jonathanyost 1:d0db255b07a8 42 Ticker pir_timer;
jonathanyost 2:dd4d53687372 43 bool pir_enable = false;
jonathanyost 0:7daf9b751759 44 bool pir_trigger = false;
jonathanyost 0:7daf9b751759 45
jonathanyost 0:7daf9b751759 46 // Declare Serial Interfaces
jonathanyost 0:7daf9b751759 47 Serial xb(tx, rx); // Serial 1
jonathanyost 0:7daf9b751759 48 Serial pc(PB_3, PB_4); // Serial 2
jonathanyost 0:7daf9b751759 49
jonathanyost 0:7daf9b751759 50 // send_sensor_data(temp, pressure, humidity, motion, uv, ir, vis, noise);
jonathanyost 0:7daf9b751759 51 void SendSensorData(int t, int p, int h, int u, int ir, int v, int n){
jonathanyost 0:7daf9b751759 52 //" ni:XX, te:XX,pr:XX,hu:XX,uv:XX,ir:XX,vi:XX,no:XX"
jonathanyost 5:0e4d19f6ba45 53 xb.printf( ",ni:%c,te:%d,pr:%d,hu:%d,uv:%d,ir:%d,vi:%d,no:%d\n\r",nodeID,t,p,h,u,ir,v,n);
jonathanyost 5:0e4d19f6ba45 54 pc.printf("SEND: ,ni:%c,te:%d,pr:%d,hu:%d,uv:%d,ir:%d,vi:%d,no:%d\n\r",nodeID,t,p,h,u,ir,v,n);
jonathanyost 0:7daf9b751759 55 }
jonathanyost 0:7daf9b751759 56
jonathanyost 0:7daf9b751759 57 void SendPirFlag(){
jonathanyost 2:dd4d53687372 58 if(xb.writeable() && pir_enable){
jonathanyost 0:7daf9b751759 59 xb.printf("ni:%c,mo:1\r\n",nodeID);
jonathanyost 0:7daf9b751759 60 pc.printf("ni:%c,mo:1\r\n",nodeID);
jonathanyost 0:7daf9b751759 61 pir_trigger = false;
jonathanyost 0:7daf9b751759 62 }
jonathanyost 0:7daf9b751759 63 }
jonathanyost 0:7daf9b751759 64
jonathanyost 0:7daf9b751759 65 // PIR interrupt. Set the pir_trigger to true when interrupted.
jonathanyost 0:7daf9b751759 66 void PIR(void){
jonathanyost 5:0e4d19f6ba45 67 //pc.printf(" !! ");
jonathanyost 0:7daf9b751759 68 pir_trigger = true;
jonathanyost 1:d0db255b07a8 69 }
jonathanyost 1:d0db255b07a8 70
jonathanyost 1:d0db255b07a8 71 // This method is attached to a timer
jonathanyost 1:d0db255b07a8 72 void PIR_timed_send(){
jonathanyost 1:d0db255b07a8 73 if(pir_enable && pir_trigger){
jonathanyost 0:7daf9b751759 74 SendPirFlag();
jonathanyost 1:d0db255b07a8 75 pir_trigger = false;
jonathanyost 0:7daf9b751759 76 }
jonathanyost 0:7daf9b751759 77 }
jonathanyost 0:7daf9b751759 78
jonathanyost 0:7daf9b751759 79 void initialize_serial_connections(){
jonathanyost 0:7daf9b751759 80 xb.baud(57600);
jonathanyost 0:7daf9b751759 81 pc.baud(115200);
jonathanyost 0:7daf9b751759 82 }
jonathanyost 0:7daf9b751759 83
jonathanyost 3:07fd499e96b4 84 void rx_read_callback(){
jonathanyost 4:7335cd74f3bc 85 char c = xb.getc();
jonathanyost 5:0e4d19f6ba45 86 pc.printf("%c", c);
jonathanyost 4:7335cd74f3bc 87
jonathanyost 4:7335cd74f3bc 88 if(c == '\n'){
jonathanyost 4:7335cd74f3bc 89 rx_index++;
jonathanyost 4:7335cd74f3bc 90 rx_flag = true;
jonathanyost 4:7335cd74f3bc 91 rx_index = 0;
jonathanyost 4:7335cd74f3bc 92 pc.printf(" EOM \r\n");
jonathanyost 5:0e4d19f6ba45 93 } else {
jonathanyost 4:7335cd74f3bc 94 rx_buffer[rx_index] = c;
jonathanyost 4:7335cd74f3bc 95 rx_index++;
jonathanyost 5:0e4d19f6ba45 96 }
jonathanyost 4:7335cd74f3bc 97
jonathanyost 4:7335cd74f3bc 98 if(rx_index > 63){
jonathanyost 4:7335cd74f3bc 99 rx_index = 0;
jonathanyost 4:7335cd74f3bc 100 }
jonathanyost 4:7335cd74f3bc 101
jonathanyost 3:07fd499e96b4 102 }
jonathanyost 3:07fd499e96b4 103
jonathanyost 0:7daf9b751759 104 int main() {
jonathanyost 0:7daf9b751759 105 initialize_serial_connections();
jonathanyost 3:07fd499e96b4 106 memset(rx_buffer, '\0', 64);
jonathanyost 3:07fd499e96b4 107 pc.printf("\n\rMic test 1-2, 1-2\n\r");
jonathanyost 0:7daf9b751759 108
jonathanyost 3:07fd499e96b4 109 xb.attach(&rx_read_callback, Serial::RxIrq);
jonathanyost 0:7daf9b751759 110
jonathanyost 0:7daf9b751759 111 // Attach the PIR function to interrupt
jonathanyost 5:0e4d19f6ba45 112 //PIR_sensor.rise(&PIR);
jonathanyost 1:d0db255b07a8 113 pir_timer.attach(&PIR_timed_send,3);
jonathanyost 0:7daf9b751759 114
jonathanyost 0:7daf9b751759 115 char pc_data = 'e';
jonathanyost 0:7daf9b751759 116
jonathanyost 0:7daf9b751759 117 int temp = 1;
jonathanyost 0:7daf9b751759 118 int pressure = 2;
jonathanyost 0:7daf9b751759 119 int humidity = 3;
jonathanyost 0:7daf9b751759 120 int uv = 5;
jonathanyost 0:7daf9b751759 121 int ir = 6;
jonathanyost 0:7daf9b751759 122 int vis = 7;
jonathanyost 0:7daf9b751759 123 int noise = 8;
jonathanyost 2:dd4d53687372 124 t.reset();
jonathanyost 2:dd4d53687372 125
jonathanyost 0:7daf9b751759 126 bool send_enable = false;
jonathanyost 0:7daf9b751759 127
jonathanyost 0:7daf9b751759 128 while(true){
jonathanyost 2:dd4d53687372 129 //pc.printf("top of loop \r\n");
jonathanyost 2:dd4d53687372 130
jonathanyost 0:7daf9b751759 131 // Debug Controls Input
jonathanyost 0:7daf9b751759 132 if(pc.readable()){
jonathanyost 0:7daf9b751759 133 pc_data = pc.getc();
jonathanyost 0:7daf9b751759 134 pc.printf("%c", pc_data);
jonathanyost 0:7daf9b751759 135 if(xb.writeable()){xb.printf("%c", pc_data);}
jonathanyost 0:7daf9b751759 136 }
jonathanyost 0:7daf9b751759 137
jonathanyost 5:0e4d19f6ba45 138 // Read in values from the BME280 board
jonathanyost 5:0e4d19f6ba45 139 temp = thp_sensor->getTemperature();
jonathanyost 5:0e4d19f6ba45 140 pressure = thp_sensor->getPressure();
jonathanyost 5:0e4d19f6ba45 141 humidity = thp_sensor->getHumidity();
jonathanyost 5:0e4d19f6ba45 142
jonathanyost 5:0e4d19f6ba45 143 //Sensor data from the SI1145 board
jonathanyost 5:0e4d19f6ba45 144 uv = uiv_sensor->getUV(); // Reads from the SI1145
jonathanyost 5:0e4d19f6ba45 145 ir = uiv_sensor->getIR(); // Reads from the SI1145
jonathanyost 5:0e4d19f6ba45 146 vis = uiv_sensor->getVIS(); // Reads from the SI1145
jonathanyost 5:0e4d19f6ba45 147
jonathanyost 5:0e4d19f6ba45 148 noise = adc_noise.read();
jonathanyost 5:0e4d19f6ba45 149
jonathanyost 3:07fd499e96b4 150 if(rx_flag){
jonathanyost 4:7335cd74f3bc 151 pc.printf("IND: 0123456789ABCDEF\r\n"); // Show indices
jonathanyost 4:7335cd74f3bc 152 pc.printf("RECV: %s\r\n", rx_buffer); // Show received message
jonathanyost 4:7335cd74f3bc 153 rx_flag = false;
jonathanyost 1:d0db255b07a8 154
jonathanyost 4:7335cd74f3bc 155 if(rx_buffer[3] == nodeID){
jonathanyost 4:7335cd74f3bc 156 send_enable = true;
jonathanyost 4:7335cd74f3bc 157 } else {
jonathanyost 4:7335cd74f3bc 158 pc.printf("Target: NODE %c\r\n", rx_buffer[3]);
jonathanyost 3:07fd499e96b4 159 }
jonathanyost 2:dd4d53687372 160
jonathanyost 4:7335cd74f3bc 161 if(rx_buffer[5] == 'm' && rx_buffer[6] == 's'){
jonathanyost 4:7335cd74f3bc 162 send_enable = false;
jonathanyost 4:7335cd74f3bc 163 if(rx_buffer[8] == '1'){
jonathanyost 4:7335cd74f3bc 164 pir_enable = true;
jonathanyost 4:7335cd74f3bc 165 pc.printf("PIR enabled\r\n");
jonathanyost 4:7335cd74f3bc 166 } else {
jonathanyost 4:7335cd74f3bc 167 pir_enable = false;
jonathanyost 4:7335cd74f3bc 168 pc.printf("PIR disabled\r\n");
jonathanyost 4:7335cd74f3bc 169 }
jonathanyost 4:7335cd74f3bc 170 }
jonathanyost 4:7335cd74f3bc 171 memset(rx_buffer, '\0', sizeof(rx_buffer));
jonathanyost 2:dd4d53687372 172 }
jonathanyost 2:dd4d53687372 173
jonathanyost 5:0e4d19f6ba45 174 // Transmit over the xbee if possible and necessary
jonathanyost 5:0e4d19f6ba45 175 if(xb.writeable() && send_enable) {
jonathanyost 2:dd4d53687372 176
jonathanyost 0:7daf9b751759 177 SendSensorData(temp, pressure, humidity, uv, ir, vis, noise);
jonathanyost 0:7daf9b751759 178 send_enable = false;
jonathanyost 0:7daf9b751759 179 }
jonathanyost 0:7daf9b751759 180
jonathanyost 2:dd4d53687372 181 //pc.printf("bottom of loop \r\n");
jonathanyost 0:7daf9b751759 182 }
jonathanyost 0:7daf9b751759 183 }
jonathanyost 0:7daf9b751759 184