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

Dependencies:   BME280 SI1145 mbed

Committer:
jonathanyost
Date:
Tue Jul 18 22:26:52 2017 +0000
Revision:
3:07fd499e96b4
Parent:
2:dd4d53687372
Child:
4:7335cd74f3bc
reading on an interrupt;

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