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

Dependencies:   BME280 SI1145 mbed

Committer:
jonathanyost
Date:
Tue Jul 18 23:23:52 2017 +0000
Revision:
4:7335cd74f3bc
Parent:
3:07fd499e96b4
Child:
5:0e4d19f6ba45
PIR is working;

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 0:7daf9b751759 25 const char nodeID = '1';
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 // "id:2,te:2,pr:3,mo:4,uv:5,ir:6,vi:7,no:8"
jonathanyost 0:7daf9b751759 52 void SendSensorData(int t, int p, int h, int u, int ir, int v, int n){
jonathanyost 0:7daf9b751759 53 //" ni:XX, te:XX,pr:XX,hu:XX,uv:XX,ir:XX,vi:XX,no:XX"
jonathanyost 0:7daf9b751759 54 xb.printf( ",ni:%d,te:%d,pr:%d,hu:%d,uv:%d,ir:%d,vi:%d,no:%d\n\r",1,t,p,h,u,ir,v,n);
jonathanyost 0:7daf9b751759 55 pc.printf("SEND: ni:%d,te:%d,pr:%d,hu:%d,uv:%d,ir:%d,vi:%d,no:%d\n\r",1,t,p,h,u,ir,v,n);
jonathanyost 0:7daf9b751759 56 }
jonathanyost 0:7daf9b751759 57
jonathanyost 0:7daf9b751759 58 void SendPirFlag(){
jonathanyost 2:dd4d53687372 59 if(xb.writeable() && pir_enable){
jonathanyost 0:7daf9b751759 60 xb.printf("ni:%c,mo:1\r\n",nodeID);
jonathanyost 0:7daf9b751759 61 pc.printf("ni:%c,mo:1\r\n",nodeID);
jonathanyost 0:7daf9b751759 62 pir_trigger = false;
jonathanyost 0:7daf9b751759 63 }
jonathanyost 0:7daf9b751759 64 }
jonathanyost 0:7daf9b751759 65
jonathanyost 0:7daf9b751759 66 // PIR interrupt. Set the pir_trigger to true when interrupted.
jonathanyost 0:7daf9b751759 67 void PIR(void){
jonathanyost 1:d0db255b07a8 68 //pc.printf("void PIR(void){}\r\n");
jonathanyost 0:7daf9b751759 69 pir_trigger = true;
jonathanyost 1:d0db255b07a8 70 }
jonathanyost 1:d0db255b07a8 71
jonathanyost 1:d0db255b07a8 72 // This method is attached to a timer
jonathanyost 1:d0db255b07a8 73 void PIR_timed_send(){
jonathanyost 1:d0db255b07a8 74 //pc.printf("PIR_timed_send();\r\n");
jonathanyost 1:d0db255b07a8 75 if(pir_enable && pir_trigger){
jonathanyost 0:7daf9b751759 76 SendPirFlag();
jonathanyost 1:d0db255b07a8 77 pir_trigger = false;
jonathanyost 0:7daf9b751759 78 }
jonathanyost 0:7daf9b751759 79 }
jonathanyost 0:7daf9b751759 80
jonathanyost 0:7daf9b751759 81 void initialize_serial_connections(){
jonathanyost 0:7daf9b751759 82 xb.baud(57600);
jonathanyost 0:7daf9b751759 83 pc.baud(115200);
jonathanyost 0:7daf9b751759 84 }
jonathanyost 0:7daf9b751759 85
jonathanyost 3:07fd499e96b4 86 void rx_read_callback(){
jonathanyost 4:7335cd74f3bc 87 char c = xb.getc();
jonathanyost 4:7335cd74f3bc 88
jonathanyost 4:7335cd74f3bc 89 if(c == '\n'){
jonathanyost 4:7335cd74f3bc 90 rx_index++;
jonathanyost 4:7335cd74f3bc 91 rx_flag = true;
jonathanyost 4:7335cd74f3bc 92 rx_index = 0;
jonathanyost 4:7335cd74f3bc 93 pc.printf(" EOM \r\n");
jonathanyost 4:7335cd74f3bc 94 } else {
jonathanyost 4:7335cd74f3bc 95 pc.printf("%c", c);
jonathanyost 4:7335cd74f3bc 96 rx_buffer[rx_index] = c;
jonathanyost 4:7335cd74f3bc 97 rx_index++;
jonathanyost 4:7335cd74f3bc 98 }
jonathanyost 4:7335cd74f3bc 99
jonathanyost 4:7335cd74f3bc 100 if(rx_index > 63){
jonathanyost 4:7335cd74f3bc 101 rx_index = 0;
jonathanyost 4:7335cd74f3bc 102 }
jonathanyost 4:7335cd74f3bc 103
jonathanyost 3:07fd499e96b4 104 }
jonathanyost 3:07fd499e96b4 105
jonathanyost 0:7daf9b751759 106 int main() {
jonathanyost 0:7daf9b751759 107 initialize_serial_connections();
jonathanyost 3:07fd499e96b4 108 memset(rx_buffer, '\0', 64);
jonathanyost 3:07fd499e96b4 109 pc.printf("\n\rMic test 1-2, 1-2\n\r");
jonathanyost 0:7daf9b751759 110
jonathanyost 3:07fd499e96b4 111 xb.attach(&rx_read_callback, Serial::RxIrq);
jonathanyost 0:7daf9b751759 112
jonathanyost 0:7daf9b751759 113 // Attach the PIR function to interrupt
jonathanyost 1:d0db255b07a8 114 PIR_sensor.rise(&PIR);
jonathanyost 1:d0db255b07a8 115 pir_timer.attach(&PIR_timed_send,3);
jonathanyost 0:7daf9b751759 116
jonathanyost 0:7daf9b751759 117 char pc_data = 'e';
jonathanyost 0:7daf9b751759 118 char buffer[10];
jonathanyost 0:7daf9b751759 119
jonathanyost 0:7daf9b751759 120 int temp = 1;
jonathanyost 0:7daf9b751759 121 int pressure = 2;
jonathanyost 0:7daf9b751759 122 int humidity = 3;
jonathanyost 0:7daf9b751759 123 int uv = 5;
jonathanyost 0:7daf9b751759 124 int ir = 6;
jonathanyost 0:7daf9b751759 125 int vis = 7;
jonathanyost 0:7daf9b751759 126 int noise = 8;
jonathanyost 2:dd4d53687372 127 t.reset();
jonathanyost 2:dd4d53687372 128
jonathanyost 0:7daf9b751759 129 bool send_enable = false;
jonathanyost 0:7daf9b751759 130
jonathanyost 0:7daf9b751759 131 while(true){
jonathanyost 2:dd4d53687372 132 //pc.printf("top of loop \r\n");
jonathanyost 2:dd4d53687372 133
jonathanyost 0:7daf9b751759 134 // Debug Controls Input
jonathanyost 0:7daf9b751759 135 if(pc.readable()){
jonathanyost 0:7daf9b751759 136 pc_data = pc.getc();
jonathanyost 0:7daf9b751759 137 pc.printf("%c", pc_data);
jonathanyost 0:7daf9b751759 138 if(xb.writeable()){xb.printf("%c", pc_data);}
jonathanyost 0:7daf9b751759 139 }
jonathanyost 0:7daf9b751759 140
jonathanyost 4:7335cd74f3bc 141 /* Handle the received data
jonathanyost 4:7335cd74f3bc 142 * Execute only when the full message has been received.
jonathanyost 4:7335cd74f3bc 143 *
jonathanyost 4:7335cd74f3bc 144 *
jonathanyost 4:7335cd74f3bc 145 *
jonathanyost 4:7335cd74f3bc 146 */
jonathanyost 3:07fd499e96b4 147 if(rx_flag){
jonathanyost 4:7335cd74f3bc 148 pc.printf("IND: 0123456789ABCDEF\r\n"); // Show indices
jonathanyost 4:7335cd74f3bc 149 pc.printf("RECV: %s\r\n", rx_buffer); // Show received message
jonathanyost 4:7335cd74f3bc 150 rx_flag = false;
jonathanyost 1:d0db255b07a8 151
jonathanyost 4:7335cd74f3bc 152 if(rx_buffer[3] == nodeID){
jonathanyost 4:7335cd74f3bc 153 send_enable = true;
jonathanyost 4:7335cd74f3bc 154 } else {
jonathanyost 4:7335cd74f3bc 155 pc.printf("Target: NODE %c\r\n", rx_buffer[3]);
jonathanyost 3:07fd499e96b4 156 }
jonathanyost 2:dd4d53687372 157
jonathanyost 4:7335cd74f3bc 158 if(rx_buffer[5] == 'm' && rx_buffer[6] == 's'){
jonathanyost 4:7335cd74f3bc 159 send_enable = false;
jonathanyost 4:7335cd74f3bc 160 if(rx_buffer[8] == '1'){
jonathanyost 4:7335cd74f3bc 161 pir_enable = true;
jonathanyost 4:7335cd74f3bc 162 pc.printf("PIR enabled\r\n");
jonathanyost 4:7335cd74f3bc 163 } else {
jonathanyost 4:7335cd74f3bc 164 pir_enable = false;
jonathanyost 4:7335cd74f3bc 165 pc.printf("PIR disabled\r\n");
jonathanyost 4:7335cd74f3bc 166 }
jonathanyost 4:7335cd74f3bc 167 }
jonathanyost 4:7335cd74f3bc 168 memset(rx_buffer, '\0', sizeof(rx_buffer));
jonathanyost 2:dd4d53687372 169 }
jonathanyost 2:dd4d53687372 170
jonathanyost 2:dd4d53687372 171
jonathanyost 3:07fd499e96b4 172 /*
jonathanyost 2:dd4d53687372 173 if(xb.readable()){
jonathanyost 2:dd4d53687372 174 pc.printf("=========================================\r\n");
jonathanyost 1:d0db255b07a8 175
jonathanyost 0:7daf9b751759 176 for(int i = 0; i < sizeof(buffer); i++){
jonathanyost 2:dd4d53687372 177 t.start();
jonathanyost 2:dd4d53687372 178 while(!xb.readable()){
jonathanyost 2:dd4d53687372 179 // DO NOTHING
jonathanyost 2:dd4d53687372 180 //wait(0.01);
jonathanyost 2:dd4d53687372 181 //pc.printf("XBee no read\r\n");
jonathanyost 2:dd4d53687372 182 }
jonathanyost 0:7daf9b751759 183 buffer[i] = xb.getc();
jonathanyost 2:dd4d53687372 184 t.stop();
jonathanyost 2:dd4d53687372 185 wait_times[i] = t.read_ms();
jonathanyost 2:dd4d53687372 186 t.reset();
jonathanyost 0:7daf9b751759 187 }
jonathanyost 1:d0db255b07a8 188
jonathanyost 1:d0db255b07a8 189 pc.printf("after the read loop\r\n");
jonathanyost 1:d0db255b07a8 190
jonathanyost 2:dd4d53687372 191 for(int i = 0; i < sizeof(buffer); i++){
jonathanyost 2:dd4d53687372 192 pc.printf("%c, t = %i\r\n",buffer[i],wait_times[i]);
jonathanyost 2:dd4d53687372 193
jonathanyost 2:dd4d53687372 194 }
jonathanyost 2:dd4d53687372 195
jonathanyost 1:d0db255b07a8 196 // Print out a bunch of stuff
jonathanyost 2:dd4d53687372 197
jonathanyost 0:7daf9b751759 198 // Print out received message in char and int format
jonathanyost 1:d0db255b07a8 199 pc.printf("RECV: ");
jonathanyost 1:d0db255b07a8 200 for(int i = 1; i < sizeof(buffer); i++){
jonathanyost 1:d0db255b07a8 201 pc.printf("%c", buffer[i]);
jonathanyost 1:d0db255b07a8 202 }
jonathanyost 1:d0db255b07a8 203 pc.printf("\r\nRECV: ");
jonathanyost 1:d0db255b07a8 204 // Print out message (INT)
jonathanyost 1:d0db255b07a8 205 for(int i = 0; i < sizeof(buffer); i++){
jonathanyost 1:d0db255b07a8 206 pc.printf("%i,", buffer[i]);
jonathanyost 1:d0db255b07a8 207 }
jonathanyost 1:d0db255b07a8 208 pc.printf("\r\n");
jonathanyost 1:d0db255b07a8 209
jonathanyost 1:d0db255b07a8 210 //Check the node id
jonathanyost 0:7daf9b751759 211 if(buffer[4] == nodeID){
jonathanyost 0:7daf9b751759 212 send_enable = true;
jonathanyost 0:7daf9b751759 213 } else {
jonathanyost 0:7daf9b751759 214 pc.printf("Ignore, Target Node: #%c\r\n", buffer[4]);
jonathanyost 0:7daf9b751759 215 }
jonathanyost 0:7daf9b751759 216
jonathanyost 0:7daf9b751759 217 if(buffer[9] == '1'){
jonathanyost 0:7daf9b751759 218 pir_enable = true;
jonathanyost 0:7daf9b751759 219 pc.printf("pir_enable = true\r\n");
jonathanyost 0:7daf9b751759 220 } else if (buffer[9] == '0'){
jonathanyost 0:7daf9b751759 221 pir_enable = false;
jonathanyost 0:7daf9b751759 222 pc.printf("pir_enable = false\r\n");
jonathanyost 0:7daf9b751759 223 }
jonathanyost 1:d0db255b07a8 224
jonathanyost 0:7daf9b751759 225 memset(buffer, '\0', sizeof(buffer));
jonathanyost 2:dd4d53687372 226
jonathanyost 2:dd4d53687372 227 pc.printf("*****************************************\r\n");
jonathanyost 0:7daf9b751759 228 }
jonathanyost 3:07fd499e96b4 229 */
jonathanyost 0:7daf9b751759 230
jonathanyost 0:7daf9b751759 231 // Take in new measurements
jonathanyost 0:7daf9b751759 232 // Read in values from the BME280 board
jonathanyost 0:7daf9b751759 233 temp = thp_sensor->getTemperature();
jonathanyost 0:7daf9b751759 234 pressure = thp_sensor->getPressure();
jonathanyost 0:7daf9b751759 235 humidity = thp_sensor->getHumidity();
jonathanyost 0:7daf9b751759 236
jonathanyost 0:7daf9b751759 237 //Sensor data from the SI1145 board
jonathanyost 0:7daf9b751759 238 uv = uiv_sensor->getUV(); // Reads from the SI1145
jonathanyost 0:7daf9b751759 239 ir = uiv_sensor->getIR(); // Reads from the SI1145
jonathanyost 0:7daf9b751759 240 vis = uiv_sensor->getVIS(); // Reads from the SI1145
jonathanyost 0:7daf9b751759 241
jonathanyost 2:dd4d53687372 242 noise = adc_noise.read();
jonathanyost 0:7daf9b751759 243
jonathanyost 0:7daf9b751759 244 // Transmit over the xbee if possible and necessary
jonathanyost 0:7daf9b751759 245 if(xb.writeable() && send_enable){
jonathanyost 0:7daf9b751759 246 SendSensorData(temp, pressure, humidity, uv, ir, vis, noise);
jonathanyost 0:7daf9b751759 247 send_enable = false;
jonathanyost 0:7daf9b751759 248 }
jonathanyost 0:7daf9b751759 249
jonathanyost 2:dd4d53687372 250 //pc.printf("bottom of loop \r\n");
jonathanyost 0:7daf9b751759 251 }
jonathanyost 0:7daf9b751759 252 }
jonathanyost 0:7daf9b751759 253