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

Dependencies:   BME280 SI1145 mbed

Committer:
jonathanyost
Date:
Wed Jul 26 22:24:14 2017 +0000
Revision:
6:002e8a4809eb
Parent:
5:0e4d19f6ba45
Child:
7:5d217e208d3f
PIR working on all three test env nodes

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 6:002e8a4809eb 23 const char nodeID = '2';
jonathanyost 4:7335cd74f3bc 24
jonathanyost 4:7335cd74f3bc 25 // RX declarations
jonathanyost 6:002e8a4809eb 26 uint8_t rx_buffer[128];
jonathanyost 3:07fd499e96b4 27 bool rx_flag = false;
jonathanyost 4:7335cd74f3bc 28 int rx_index = 0;
jonathanyost 3:07fd499e96b4 29
jonathanyost 0:7daf9b751759 30
jonathanyost 0:7daf9b751759 31 // I/O Delarations
jonathanyost 0:7daf9b751759 32 I2C i2c(I2C_SDA, I2C_SCL); // D4, D5
jonathanyost 0:7daf9b751759 33 BME280 *thp_sensor = new BME280(i2c);
jonathanyost 0:7daf9b751759 34 SI1145 *uiv_sensor = new SI1145(i2c);
jonathanyost 2:dd4d53687372 35 AnalogIn adc_noise(noise_pin);
jonathanyost 2:dd4d53687372 36
jonathanyost 0:7daf9b751759 37
jonathanyost 0:7daf9b751759 38 // Declare the PIR interface
jonathanyost 6:002e8a4809eb 39 InterruptIn PIR_sensor(PB_5);
jonathanyost 1:d0db255b07a8 40 Ticker pir_timer;
jonathanyost 6:002e8a4809eb 41 Ticker pir_send_timer;
jonathanyost 2:dd4d53687372 42 bool pir_enable = false;
jonathanyost 0:7daf9b751759 43 bool pir_trigger = false;
jonathanyost 0:7daf9b751759 44
jonathanyost 0:7daf9b751759 45 // Declare Serial Interfaces
jonathanyost 0:7daf9b751759 46 Serial xb(tx, rx); // Serial 1
jonathanyost 0:7daf9b751759 47 Serial pc(PB_3, PB_4); // Serial 2
jonathanyost 0:7daf9b751759 48
jonathanyost 0:7daf9b751759 49 // send_sensor_data(temp, pressure, humidity, motion, uv, ir, vis, noise);
jonathanyost 0:7daf9b751759 50 void SendSensorData(int t, int p, int h, int u, int ir, int v, int n){
jonathanyost 0:7daf9b751759 51 //" ni:XX, te:XX,pr:XX,hu:XX,uv:XX,ir:XX,vi:XX,no:XX"
jonathanyost 5:0e4d19f6ba45 52 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 6:002e8a4809eb 53 pc.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 0:7daf9b751759 54 }
jonathanyost 0:7daf9b751759 55
jonathanyost 0:7daf9b751759 56 void SendPirFlag(){
jonathanyost 2:dd4d53687372 57 if(xb.writeable() && pir_enable){
jonathanyost 0:7daf9b751759 58 xb.printf("ni:%c,mo:1\r\n",nodeID);
jonathanyost 6:002e8a4809eb 59 pc.printf(" >> ni:%c,mo:1\r\n",nodeID);
jonathanyost 0:7daf9b751759 60 pir_trigger = false;
jonathanyost 0:7daf9b751759 61 }
jonathanyost 0:7daf9b751759 62 }
jonathanyost 0:7daf9b751759 63
jonathanyost 0:7daf9b751759 64 // PIR interrupt. Set the pir_trigger to true when interrupted.
jonathanyost 0:7daf9b751759 65 void PIR(void){
jonathanyost 6:002e8a4809eb 66
jonathanyost 6:002e8a4809eb 67 //pc.printf(" %d \r\n", PIR_sensor.read());
jonathanyost 6:002e8a4809eb 68 if(PIR_sensor.read() && !pir_trigger){
jonathanyost 6:002e8a4809eb 69 pc.printf("# \r\n");
jonathanyost 6:002e8a4809eb 70 pir_trigger = true;
jonathanyost 6:002e8a4809eb 71 }
jonathanyost 1:d0db255b07a8 72 }
jonathanyost 1:d0db255b07a8 73
jonathanyost 1:d0db255b07a8 74 // This method is attached to a timer
jonathanyost 1:d0db255b07a8 75 void PIR_timed_send(){
jonathanyost 6:002e8a4809eb 76 if(pir_trigger){
jonathanyost 0:7daf9b751759 77 SendPirFlag();
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 6:002e8a4809eb 88 //pc.printf("%c", c);
jonathanyost 4:7335cd74f3bc 89
jonathanyost 4:7335cd74f3bc 90 if(c == '\n'){
jonathanyost 4:7335cd74f3bc 91 rx_index++;
jonathanyost 4:7335cd74f3bc 92 rx_flag = true;
jonathanyost 4:7335cd74f3bc 93 rx_index = 0;
jonathanyost 6:002e8a4809eb 94 //pc.printf("EOM \r\n");
jonathanyost 5:0e4d19f6ba45 95 } else {
jonathanyost 4:7335cd74f3bc 96 rx_buffer[rx_index] = c;
jonathanyost 4:7335cd74f3bc 97 rx_index++;
jonathanyost 5:0e4d19f6ba45 98 }
jonathanyost 4:7335cd74f3bc 99
jonathanyost 6:002e8a4809eb 100 if(rx_index > 127){
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 6:002e8a4809eb 108 memset(rx_buffer, '\0', 128);
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 6:002e8a4809eb 113 // Attach the PIR function to ticker thing
jonathanyost 6:002e8a4809eb 114 pir_timer.attach(&PIR, 0.1);
jonathanyost 6:002e8a4809eb 115 pir_send_timer.attach(&PIR_timed_send, 1.5);
jonathanyost 6:002e8a4809eb 116
jonathanyost 0:7daf9b751759 117 char pc_data = 'e';
jonathanyost 0:7daf9b751759 118
jonathanyost 0:7daf9b751759 119 int temp = 1;
jonathanyost 0:7daf9b751759 120 int pressure = 2;
jonathanyost 0:7daf9b751759 121 int humidity = 3;
jonathanyost 0:7daf9b751759 122 int uv = 5;
jonathanyost 0:7daf9b751759 123 int ir = 6;
jonathanyost 0:7daf9b751759 124 int vis = 7;
jonathanyost 0:7daf9b751759 125 int noise = 8;
jonathanyost 2:dd4d53687372 126
jonathanyost 0:7daf9b751759 127 bool send_enable = false;
jonathanyost 0:7daf9b751759 128
jonathanyost 0:7daf9b751759 129 while(true){
jonathanyost 2:dd4d53687372 130 //pc.printf("top of loop \r\n");
jonathanyost 2:dd4d53687372 131
jonathanyost 0:7daf9b751759 132 // Debug Controls Input
jonathanyost 0:7daf9b751759 133 if(pc.readable()){
jonathanyost 0:7daf9b751759 134 pc_data = pc.getc();
jonathanyost 0:7daf9b751759 135 pc.printf("%c", pc_data);
jonathanyost 0:7daf9b751759 136 if(xb.writeable()){xb.printf("%c", pc_data);}
jonathanyost 0:7daf9b751759 137 }
jonathanyost 0:7daf9b751759 138
jonathanyost 5:0e4d19f6ba45 139 // Read in values from the BME280 board
jonathanyost 5:0e4d19f6ba45 140 temp = thp_sensor->getTemperature();
jonathanyost 5:0e4d19f6ba45 141 pressure = thp_sensor->getPressure();
jonathanyost 5:0e4d19f6ba45 142 humidity = thp_sensor->getHumidity();
jonathanyost 5:0e4d19f6ba45 143
jonathanyost 5:0e4d19f6ba45 144 //Sensor data from the SI1145 board
jonathanyost 5:0e4d19f6ba45 145 uv = uiv_sensor->getUV(); // Reads from the SI1145
jonathanyost 5:0e4d19f6ba45 146 ir = uiv_sensor->getIR(); // Reads from the SI1145
jonathanyost 5:0e4d19f6ba45 147 vis = uiv_sensor->getVIS(); // Reads from the SI1145
jonathanyost 5:0e4d19f6ba45 148
jonathanyost 5:0e4d19f6ba45 149 noise = adc_noise.read();
jonathanyost 5:0e4d19f6ba45 150
jonathanyost 3:07fd499e96b4 151 if(rx_flag){
jonathanyost 6:002e8a4809eb 152 //pc.printf("IND: 0123456789ABCDEF\r\n"); // Show indices
jonathanyost 6:002e8a4809eb 153 pc.printf("<< %s\r\n", rx_buffer); // Show received message
jonathanyost 4:7335cd74f3bc 154 rx_flag = false;
jonathanyost 1:d0db255b07a8 155
jonathanyost 4:7335cd74f3bc 156 if(rx_buffer[3] == nodeID){
jonathanyost 4:7335cd74f3bc 157 send_enable = true;
jonathanyost 4:7335cd74f3bc 158 } else {
jonathanyost 6:002e8a4809eb 159 //pc.printf("Target: NODE %c\r\n", rx_buffer[3]);
jonathanyost 3:07fd499e96b4 160 }
jonathanyost 2:dd4d53687372 161
jonathanyost 4:7335cd74f3bc 162 if(rx_buffer[5] == 'm' && rx_buffer[6] == 's'){
jonathanyost 4:7335cd74f3bc 163 send_enable = false;
jonathanyost 4:7335cd74f3bc 164 if(rx_buffer[8] == '1'){
jonathanyost 4:7335cd74f3bc 165 pir_enable = true;
jonathanyost 6:002e8a4809eb 166 pc.printf("PIR on\r\n");
jonathanyost 4:7335cd74f3bc 167 } else {
jonathanyost 4:7335cd74f3bc 168 pir_enable = false;
jonathanyost 6:002e8a4809eb 169 pc.printf("PIR off\r\n");
jonathanyost 4:7335cd74f3bc 170 }
jonathanyost 4:7335cd74f3bc 171 }
jonathanyost 4:7335cd74f3bc 172 memset(rx_buffer, '\0', sizeof(rx_buffer));
jonathanyost 2:dd4d53687372 173 }
jonathanyost 2:dd4d53687372 174
jonathanyost 5:0e4d19f6ba45 175 // Transmit over the xbee if possible and necessary
jonathanyost 5:0e4d19f6ba45 176 if(xb.writeable() && send_enable) {
jonathanyost 2:dd4d53687372 177
jonathanyost 0:7daf9b751759 178 SendSensorData(temp, pressure, humidity, uv, ir, vis, noise);
jonathanyost 0:7daf9b751759 179 send_enable = false;
jonathanyost 0:7daf9b751759 180 }
jonathanyost 0:7daf9b751759 181
jonathanyost 2:dd4d53687372 182 //pc.printf("bottom of loop \r\n");
jonathanyost 0:7daf9b751759 183 }
jonathanyost 0:7daf9b751759 184 }
jonathanyost 0:7daf9b751759 185