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

Dependencies:   BME280 SI1145 mbed

Committer:
jonathanyost
Date:
Tue Jul 18 20:34:59 2017 +0000
Revision:
2:dd4d53687372
Parent:
1:d0db255b07a8
Child:
3:07fd499e96b4
7/18/2017 2:34 PM; ; Currently sort of working, but still blocking on getc(); screw getc().;

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 0:7daf9b751759 26
jonathanyost 0:7daf9b751759 27 // I/O Delarations
jonathanyost 0:7daf9b751759 28 I2C i2c(I2C_SDA, I2C_SCL); // D4, D5
jonathanyost 0:7daf9b751759 29 BME280 *thp_sensor = new BME280(i2c);
jonathanyost 0:7daf9b751759 30 SI1145 *uiv_sensor = new SI1145(i2c);
jonathanyost 2:dd4d53687372 31 AnalogIn adc_noise(noise_pin);
jonathanyost 2:dd4d53687372 32
jonathanyost 0:7daf9b751759 33
jonathanyost 0:7daf9b751759 34 // Declare the PIR interface
jonathanyost 1:d0db255b07a8 35 InterruptIn PIR_sensor(PA_5);
jonathanyost 1:d0db255b07a8 36 Ticker pir_timer;
jonathanyost 2:dd4d53687372 37 bool pir_enable = false;
jonathanyost 0:7daf9b751759 38 bool pir_trigger = false;
jonathanyost 0:7daf9b751759 39
jonathanyost 0:7daf9b751759 40 // Declare Serial Interfaces
jonathanyost 0:7daf9b751759 41 Serial xb(tx, rx); // Serial 1
jonathanyost 0:7daf9b751759 42 Serial pc(PB_3, PB_4); // Serial 2
jonathanyost 0:7daf9b751759 43
jonathanyost 0:7daf9b751759 44 // send_sensor_data(temp, pressure, humidity, motion, uv, ir, vis, noise);
jonathanyost 0:7daf9b751759 45 // "id:2,te:2,pr:3,mo:4,uv:5,ir:6,vi:7,no:8"
jonathanyost 0:7daf9b751759 46 void SendSensorData(int t, int p, int h, int u, int ir, int v, int n){
jonathanyost 0:7daf9b751759 47 //" ni:XX, te:XX,pr:XX,hu:XX,uv:XX,ir:XX,vi:XX,no:XX"
jonathanyost 0:7daf9b751759 48 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 49 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 50 }
jonathanyost 0:7daf9b751759 51
jonathanyost 0:7daf9b751759 52 void SendPirFlag(){
jonathanyost 2:dd4d53687372 53 if(xb.writeable() && pir_enable){
jonathanyost 0:7daf9b751759 54 xb.printf("ni:%c,mo:1\r\n",nodeID);
jonathanyost 0:7daf9b751759 55 pc.printf("ni:%c,mo:1\r\n",nodeID);
jonathanyost 0:7daf9b751759 56 pir_trigger = false;
jonathanyost 0:7daf9b751759 57 }
jonathanyost 0:7daf9b751759 58 }
jonathanyost 0:7daf9b751759 59
jonathanyost 0:7daf9b751759 60 // PIR interrupt. Set the pir_trigger to true when interrupted.
jonathanyost 0:7daf9b751759 61 void PIR(void){
jonathanyost 1:d0db255b07a8 62 //pc.printf("void PIR(void){}\r\n");
jonathanyost 0:7daf9b751759 63 pir_trigger = true;
jonathanyost 1:d0db255b07a8 64 }
jonathanyost 1:d0db255b07a8 65
jonathanyost 1:d0db255b07a8 66 // This method is attached to a timer
jonathanyost 1:d0db255b07a8 67 void PIR_timed_send(){
jonathanyost 1:d0db255b07a8 68 //pc.printf("PIR_timed_send();\r\n");
jonathanyost 1:d0db255b07a8 69 if(pir_enable && pir_trigger){
jonathanyost 0:7daf9b751759 70 SendPirFlag();
jonathanyost 1:d0db255b07a8 71 pir_trigger = false;
jonathanyost 0:7daf9b751759 72 }
jonathanyost 0:7daf9b751759 73 }
jonathanyost 0:7daf9b751759 74
jonathanyost 0:7daf9b751759 75 void initialize_serial_connections(){
jonathanyost 0:7daf9b751759 76 xb.baud(57600);
jonathanyost 0:7daf9b751759 77 pc.baud(115200);
jonathanyost 0:7daf9b751759 78 }
jonathanyost 0:7daf9b751759 79
jonathanyost 0:7daf9b751759 80 int main() {
jonathanyost 0:7daf9b751759 81 initialize_serial_connections();
jonathanyost 0:7daf9b751759 82
jonathanyost 0:7daf9b751759 83 pc.printf("\n\rMic test 1-2, 1-2\n\r");
jonathanyost 0:7daf9b751759 84
jonathanyost 0:7daf9b751759 85 // Attach the PIR function to interrupt
jonathanyost 1:d0db255b07a8 86 PIR_sensor.rise(&PIR);
jonathanyost 1:d0db255b07a8 87 pir_timer.attach(&PIR_timed_send,3);
jonathanyost 0:7daf9b751759 88
jonathanyost 0:7daf9b751759 89 char pc_data = 'e';
jonathanyost 0:7daf9b751759 90 char buffer[10];
jonathanyost 0:7daf9b751759 91
jonathanyost 0:7daf9b751759 92 int temp = 1;
jonathanyost 0:7daf9b751759 93 int pressure = 2;
jonathanyost 0:7daf9b751759 94 int humidity = 3;
jonathanyost 0:7daf9b751759 95 int uv = 5;
jonathanyost 0:7daf9b751759 96 int ir = 6;
jonathanyost 0:7daf9b751759 97 int vis = 7;
jonathanyost 0:7daf9b751759 98 int noise = 8;
jonathanyost 2:dd4d53687372 99 t.reset();
jonathanyost 2:dd4d53687372 100
jonathanyost 2:dd4d53687372 101 int wait_times[32];
jonathanyost 0:7daf9b751759 102
jonathanyost 0:7daf9b751759 103 bool send_enable = false;
jonathanyost 0:7daf9b751759 104
jonathanyost 0:7daf9b751759 105 while(true){
jonathanyost 2:dd4d53687372 106 //pc.printf("top of loop \r\n");
jonathanyost 2:dd4d53687372 107
jonathanyost 0:7daf9b751759 108 // Debug Controls Input
jonathanyost 0:7daf9b751759 109 if(pc.readable()){
jonathanyost 0:7daf9b751759 110 pc_data = pc.getc();
jonathanyost 0:7daf9b751759 111 pc.printf("%c", pc_data);
jonathanyost 0:7daf9b751759 112 if(xb.writeable()){xb.printf("%c", pc_data);}
jonathanyost 0:7daf9b751759 113 }
jonathanyost 0:7daf9b751759 114
jonathanyost 2:dd4d53687372 115 // First Message: "id:1,____"
jonathanyost 2:dd4d53687372 116 // char test_char;
jonathanyost 2:dd4d53687372 117 // "123456789"
jonathanyost 2:dd4d53687372 118 // "12345 78 "
jonathanyost 2:dd4d53687372 119 /*
jonathanyost 2:dd4d53687372 120 while(true){
jonathanyost 2:dd4d53687372 121 //test_char = xb.getc();
jonathanyost 1:d0db255b07a8 122
jonathanyost 2:dd4d53687372 123 //pc.printf("%c,%d\r\n", test_char, test_char);
jonathanyost 2:dd4d53687372 124 pc.printf("%c\r\n", xb.getc());
jonathanyost 2:dd4d53687372 125
jonathanyost 2:dd4d53687372 126 }
jonathanyost 2:dd4d53687372 127 */
jonathanyost 2:dd4d53687372 128
jonathanyost 2:dd4d53687372 129
jonathanyost 2:dd4d53687372 130
jonathanyost 2:dd4d53687372 131
jonathanyost 2:dd4d53687372 132 if(xb.readable()){
jonathanyost 2:dd4d53687372 133 pc.printf("=========================================\r\n");
jonathanyost 1:d0db255b07a8 134
jonathanyost 0:7daf9b751759 135 for(int i = 0; i < sizeof(buffer); i++){
jonathanyost 2:dd4d53687372 136 t.start();
jonathanyost 2:dd4d53687372 137 while(!xb.readable()){
jonathanyost 2:dd4d53687372 138 // DO NOTHING
jonathanyost 2:dd4d53687372 139 //wait(0.01);
jonathanyost 2:dd4d53687372 140 //pc.printf("XBee no read\r\n");
jonathanyost 2:dd4d53687372 141 }
jonathanyost 0:7daf9b751759 142 buffer[i] = xb.getc();
jonathanyost 2:dd4d53687372 143 t.stop();
jonathanyost 2:dd4d53687372 144 wait_times[i] = t.read_ms();
jonathanyost 2:dd4d53687372 145 t.reset();
jonathanyost 0:7daf9b751759 146 }
jonathanyost 1:d0db255b07a8 147
jonathanyost 1:d0db255b07a8 148 pc.printf("after the read loop\r\n");
jonathanyost 1:d0db255b07a8 149
jonathanyost 2:dd4d53687372 150 for(int i = 0; i < sizeof(buffer); i++){
jonathanyost 2:dd4d53687372 151 pc.printf("%c, t = %i\r\n",buffer[i],wait_times[i]);
jonathanyost 2:dd4d53687372 152
jonathanyost 2:dd4d53687372 153 }
jonathanyost 2:dd4d53687372 154
jonathanyost 1:d0db255b07a8 155 // Print out a bunch of stuff
jonathanyost 2:dd4d53687372 156
jonathanyost 0:7daf9b751759 157 // Print out received message in char and int format
jonathanyost 1:d0db255b07a8 158 pc.printf("RECV: ");
jonathanyost 1:d0db255b07a8 159 for(int i = 1; i < sizeof(buffer); i++){
jonathanyost 1:d0db255b07a8 160 pc.printf("%c", buffer[i]);
jonathanyost 1:d0db255b07a8 161 }
jonathanyost 1:d0db255b07a8 162 pc.printf("\r\nRECV: ");
jonathanyost 1:d0db255b07a8 163 // Print out message (INT)
jonathanyost 1:d0db255b07a8 164 for(int i = 0; i < sizeof(buffer); i++){
jonathanyost 1:d0db255b07a8 165 pc.printf("%i,", buffer[i]);
jonathanyost 1:d0db255b07a8 166 }
jonathanyost 1:d0db255b07a8 167 pc.printf("\r\n");
jonathanyost 1:d0db255b07a8 168
jonathanyost 1:d0db255b07a8 169 //Check the node id
jonathanyost 0:7daf9b751759 170 if(buffer[4] == nodeID){
jonathanyost 0:7daf9b751759 171 send_enable = true;
jonathanyost 0:7daf9b751759 172 } else {
jonathanyost 0:7daf9b751759 173 pc.printf("Ignore, Target Node: #%c\r\n", buffer[4]);
jonathanyost 0:7daf9b751759 174 }
jonathanyost 0:7daf9b751759 175
jonathanyost 0:7daf9b751759 176 if(buffer[9] == '1'){
jonathanyost 0:7daf9b751759 177 pir_enable = true;
jonathanyost 0:7daf9b751759 178 pc.printf("pir_enable = true\r\n");
jonathanyost 0:7daf9b751759 179 } else if (buffer[9] == '0'){
jonathanyost 0:7daf9b751759 180 pir_enable = false;
jonathanyost 0:7daf9b751759 181 pc.printf("pir_enable = false\r\n");
jonathanyost 0:7daf9b751759 182 }
jonathanyost 1:d0db255b07a8 183
jonathanyost 0:7daf9b751759 184 memset(buffer, '\0', sizeof(buffer));
jonathanyost 2:dd4d53687372 185
jonathanyost 2:dd4d53687372 186 pc.printf("*****************************************\r\n");
jonathanyost 0:7daf9b751759 187 }
jonathanyost 0:7daf9b751759 188
jonathanyost 0:7daf9b751759 189 // Take in new measurements
jonathanyost 0:7daf9b751759 190 // Read in values from the BME280 board
jonathanyost 0:7daf9b751759 191 temp = thp_sensor->getTemperature();
jonathanyost 0:7daf9b751759 192 pressure = thp_sensor->getPressure();
jonathanyost 0:7daf9b751759 193 humidity = thp_sensor->getHumidity();
jonathanyost 0:7daf9b751759 194
jonathanyost 0:7daf9b751759 195 //Sensor data from the SI1145 board
jonathanyost 0:7daf9b751759 196 uv = uiv_sensor->getUV(); // Reads from the SI1145
jonathanyost 0:7daf9b751759 197 ir = uiv_sensor->getIR(); // Reads from the SI1145
jonathanyost 0:7daf9b751759 198 vis = uiv_sensor->getVIS(); // Reads from the SI1145
jonathanyost 0:7daf9b751759 199
jonathanyost 2:dd4d53687372 200 noise = adc_noise.read();
jonathanyost 0:7daf9b751759 201
jonathanyost 0:7daf9b751759 202 // Transmit over the xbee if possible and necessary
jonathanyost 0:7daf9b751759 203 if(xb.writeable() && send_enable){
jonathanyost 0:7daf9b751759 204 SendSensorData(temp, pressure, humidity, uv, ir, vis, noise);
jonathanyost 0:7daf9b751759 205 send_enable = false;
jonathanyost 0:7daf9b751759 206 }
jonathanyost 0:7daf9b751759 207
jonathanyost 2:dd4d53687372 208 //pc.printf("bottom of loop \r\n");
jonathanyost 0:7daf9b751759 209 }
jonathanyost 0:7daf9b751759 210 }
jonathanyost 0:7daf9b751759 211