
integration with sensors
Dependencies: JPEGCamera MODGPS RHT03 mbed
main.cpp@0:a93721ad3c1a, 2013-09-16 (annotated)
- Committer:
- aldih
- Date:
- Mon Sep 16 14:02:57 2013 +0000
- Revision:
- 0:a93721ad3c1a
integration between camera , Gps ,temperature sensor ,humidity and zigbee.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aldih | 0:a93721ad3c1a | 1 | #include "mbed.h" |
aldih | 0:a93721ad3c1a | 2 | #include "JPEGCamera.h" |
aldih | 0:a93721ad3c1a | 3 | #include "RHT03.h" |
aldih | 0:a93721ad3c1a | 4 | #include "GPS.h" |
aldih | 0:a93721ad3c1a | 5 | |
aldih | 0:a93721ad3c1a | 6 | |
aldih | 0:a93721ad3c1a | 7 | DigitalOut myled1(LED1); //show successful picture was taken |
aldih | 0:a93721ad3c1a | 8 | DigitalOut myled2(LED2); //show end of sequence |
aldih | 0:a93721ad3c1a | 9 | DigitalOut myled3(LED3); //show picture take failed |
aldih | 0:a93721ad3c1a | 10 | DigitalOut myled4(LED4); //show camera is not ready |
aldih | 0:a93721ad3c1a | 11 | |
aldih | 0:a93721ad3c1a | 12 | Serial pc(USBTX, USBRX); // tx, rx |
aldih | 0:a93721ad3c1a | 13 | /*Xbee Start*/ |
aldih | 0:a93721ad3c1a | 14 | |
aldih | 0:a93721ad3c1a | 15 | Serial XBee(p13, p14); |
aldih | 0:a93721ad3c1a | 16 | GPS gps(NC,p27); |
aldih | 0:a93721ad3c1a | 17 | |
aldih | 0:a93721ad3c1a | 18 | // SET THIS. |
aldih | 0:a93721ad3c1a | 19 | // Create an instance of the GPS object. You will need to |
aldih | 0:a93721ad3c1a | 20 | |
aldih | 0:a93721ad3c1a | 21 | // your GPS module to. |
aldih | 0:a93721ad3c1a | 22 | |
aldih | 0:a93721ad3c1a | 23 | |
aldih | 0:a93721ad3c1a | 24 | char rmc[GPS_BUFFER_LEN]; |
aldih | 0:a93721ad3c1a | 25 | char gga[GPS_BUFFER_LEN]; |
aldih | 0:a93721ad3c1a | 26 | char vtg[GPS_BUFFER_LEN]; |
aldih | 0:a93721ad3c1a | 27 | char ukn[GPS_BUFFER_LEN]; |
aldih | 0:a93721ad3c1a | 28 | |
aldih | 0:a93721ad3c1a | 29 | // 0.1 second flash of LED2 |
aldih | 0:a93721ad3c1a | 30 | DigitalOut led2(LED2); |
aldih | 0:a93721ad3c1a | 31 | Timeout t2; |
aldih | 0:a93721ad3c1a | 32 | int j=0;// camera variable |
aldih | 0:a93721ad3c1a | 33 | void t2out(void) |
aldih | 0:a93721ad3c1a | 34 | { |
aldih | 0:a93721ad3c1a | 35 | led2 = 0; |
aldih | 0:a93721ad3c1a | 36 | } |
aldih | 0:a93721ad3c1a | 37 | void blip2(void) |
aldih | 0:a93721ad3c1a | 38 | { |
aldih | 0:a93721ad3c1a | 39 | led2 = 1; |
aldih | 0:a93721ad3c1a | 40 | t2.attach(&t2out, 0.1); |
aldih | 0:a93721ad3c1a | 41 | } |
aldih | 0:a93721ad3c1a | 42 | |
aldih | 0:a93721ad3c1a | 43 | // 0.1 second flash of LED3 |
aldih | 0:a93721ad3c1a | 44 | DigitalOut led3(LED3); |
aldih | 0:a93721ad3c1a | 45 | Timeout t3; |
aldih | 0:a93721ad3c1a | 46 | void t3out(void) |
aldih | 0:a93721ad3c1a | 47 | { |
aldih | 0:a93721ad3c1a | 48 | led3 = 0; |
aldih | 0:a93721ad3c1a | 49 | } |
aldih | 0:a93721ad3c1a | 50 | void blip3(void) |
aldih | 0:a93721ad3c1a | 51 | { |
aldih | 0:a93721ad3c1a | 52 | led3 = 1; |
aldih | 0:a93721ad3c1a | 53 | t3.attach(&t3out, 0.1); |
aldih | 0:a93721ad3c1a | 54 | } |
aldih | 0:a93721ad3c1a | 55 | |
aldih | 0:a93721ad3c1a | 56 | // 0.1 second flash of LED4 |
aldih | 0:a93721ad3c1a | 57 | DigitalOut led4(LED4); |
aldih | 0:a93721ad3c1a | 58 | |
aldih | 0:a93721ad3c1a | 59 | Timeout t4; |
aldih | 0:a93721ad3c1a | 60 | void t4out(void) |
aldih | 0:a93721ad3c1a | 61 | { |
aldih | 0:a93721ad3c1a | 62 | led4 = 0; |
aldih | 0:a93721ad3c1a | 63 | } |
aldih | 0:a93721ad3c1a | 64 | void blip4(void) |
aldih | 0:a93721ad3c1a | 65 | { |
aldih | 0:a93721ad3c1a | 66 | led4 = 1; |
aldih | 0:a93721ad3c1a | 67 | t4.attach(&t4out, 0.1); |
aldih | 0:a93721ad3c1a | 68 | } |
aldih | 0:a93721ad3c1a | 69 | ///////////////////////////////////////////////////////////// |
aldih | 0:a93721ad3c1a | 70 | void gps_call(void); |
aldih | 0:a93721ad3c1a | 71 | |
aldih | 0:a93721ad3c1a | 72 | void temp_hum(void); |
aldih | 0:a93721ad3c1a | 73 | |
aldih | 0:a93721ad3c1a | 74 | void cam_call(void); |
aldih | 0:a93721ad3c1a | 75 | |
aldih | 0:a93721ad3c1a | 76 | GPS_Time q1; |
aldih | 0:a93721ad3c1a | 77 | JPEGCamera camera(p9, p10); // TX, RX |
aldih | 0:a93721ad3c1a | 78 | |
aldih | 0:a93721ad3c1a | 79 | int main() |
aldih | 0:a93721ad3c1a | 80 | { |
aldih | 0:a93721ad3c1a | 81 | |
aldih | 0:a93721ad3c1a | 82 | //////////////////////////////////////////////////////////////////// |
aldih | 0:a93721ad3c1a | 83 | |
aldih | 0:a93721ad3c1a | 84 | // SET THIS. |
aldih | 0:a93721ad3c1a | 85 | // Ensure you set the baud rate to match your serial |
aldih | 0:a93721ad3c1a | 86 | // communications to your PC/Max/Linux host so you |
aldih | 0:a93721ad3c1a | 87 | // can read the messages. |
aldih | 0:a93721ad3c1a | 88 | pc.printf("setting the PC baud rate \n"); |
aldih | 0:a93721ad3c1a | 89 | pc.baud(9600); |
aldih | 0:a93721ad3c1a | 90 | |
aldih | 0:a93721ad3c1a | 91 | |
aldih | 0:a93721ad3c1a | 92 | // Tell MODGPS "we want copies of the NMEA sentences". When a callback |
aldih | 0:a93721ad3c1a | 93 | // is made our buffers will contain a copy of the last received sentence |
aldih | 0:a93721ad3c1a | 94 | // before it was processed/destroyed. |
aldih | 0:a93721ad3c1a | 95 | gps.setRmc(rmc); |
aldih | 0:a93721ad3c1a | 96 | gps.setGga(gga); |
aldih | 0:a93721ad3c1a | 97 | gps.setVtg(vtg); |
aldih | 0:a93721ad3c1a | 98 | gps.setUkn(ukn); |
aldih | 0:a93721ad3c1a | 99 | |
aldih | 0:a93721ad3c1a | 100 | |
aldih | 0:a93721ad3c1a | 101 | // SET THIS. |
aldih | 0:a93721ad3c1a | 102 | // Most GPS modules use 9600,8,n,1 so that's what |
aldih | 0:a93721ad3c1a | 103 | // we default to here. Ensure your GPS module matches |
aldih | 0:a93721ad3c1a | 104 | // this, otherwise set it to match. |
aldih | 0:a93721ad3c1a | 105 | pc.printf("setting the GPS baud rate \n"); |
aldih | 0:a93721ad3c1a | 106 | gps.baud(9600); |
aldih | 0:a93721ad3c1a | 107 | gps.format(8, GPS::None, 1); |
aldih | 0:a93721ad3c1a | 108 | |
aldih | 0:a93721ad3c1a | 109 | // OPTIONAL |
aldih | 0:a93721ad3c1a | 110 | // If you GPS has a 1 pulse per second output you can |
aldih | 0:a93721ad3c1a | 111 | // connect it to an Mbed pin. Here you specify what pin |
aldih | 0:a93721ad3c1a | 112 | // and on what "edge" teh signal is active. If your GPS |
aldih | 0:a93721ad3c1a | 113 | // module has a rising edge at the one second point then |
aldih | 0:a93721ad3c1a | 114 | // use GPS::ppsRise |
aldih | 0:a93721ad3c1a | 115 | #ifdef PPSPIN |
aldih | 0:a93721ad3c1a | 116 | gps.ppsAttach(PPSPIN, GPS::ppsFall); |
aldih | 0:a93721ad3c1a | 117 | #endif |
aldih | 0:a93721ad3c1a | 118 | |
aldih | 0:a93721ad3c1a | 119 | // Sample of a callback to a function when the 1PPS activates. |
aldih | 0:a93721ad3c1a | 120 | // For this example, we flash LED2 for 0.1 second. |
aldih | 0:a93721ad3c1a | 121 | gps.attach_pps(&blip2); |
aldih | 0:a93721ad3c1a | 122 | |
aldih | 0:a93721ad3c1a | 123 | // Sample of a callback to a function when a NMEA GGA message is recieved. |
aldih | 0:a93721ad3c1a | 124 | // For this example, we flash LED2 for 0.1 second. |
aldih | 0:a93721ad3c1a | 125 | gps.attach_gga(&blip3); |
aldih | 0:a93721ad3c1a | 126 | |
aldih | 0:a93721ad3c1a | 127 | // Sample of a callback to a function when a NMEA RMC message is recieved. |
aldih | 0:a93721ad3c1a | 128 | // For this example, we flash LED2 for 0.1 second. |
aldih | 0:a93721ad3c1a | 129 | gps.attach_rmc(&blip4); |
aldih | 0:a93721ad3c1a | 130 | |
aldih | 0:a93721ad3c1a | 131 | |
aldih | 0:a93721ad3c1a | 132 | |
aldih | 0:a93721ad3c1a | 133 | // Camera Code |
aldih | 0:a93721ad3c1a | 134 | pc.printf("Loading camera module \n"); |
aldih | 0:a93721ad3c1a | 135 | LocalFileSystem local("local"); //save images on mbed |
aldih | 0:a93721ad3c1a | 136 | camera.setPictureSize(JPEGCamera::SIZE320x240); |
aldih | 0:a93721ad3c1a | 137 | pc.printf("getting ready for the while loop! \n"); |
aldih | 0:a93721ad3c1a | 138 | |
aldih | 0:a93721ad3c1a | 139 | //////////////////////////////////////////////////////////////////// |
aldih | 0:a93721ad3c1a | 140 | int i; |
aldih | 0:a93721ad3c1a | 141 | for(i=1;i<11;i++) |
aldih | 0:a93721ad3c1a | 142 | {//gps |
aldih | 0:a93721ad3c1a | 143 | gps_call(); |
aldih | 0:a93721ad3c1a | 144 | |
aldih | 0:a93721ad3c1a | 145 | |
aldih | 0:a93721ad3c1a | 146 | |
aldih | 0:a93721ad3c1a | 147 | if(i==1||i==5||i==10) |
aldih | 0:a93721ad3c1a | 148 | {//temp&hum |
aldih | 0:a93721ad3c1a | 149 | temp_hum(); |
aldih | 0:a93721ad3c1a | 150 | } |
aldih | 0:a93721ad3c1a | 151 | if(i%2==0) |
aldih | 0:a93721ad3c1a | 152 | {//camera |
aldih | 0:a93721ad3c1a | 153 | cam_call(); |
aldih | 0:a93721ad3c1a | 154 | |
aldih | 0:a93721ad3c1a | 155 | } |
aldih | 0:a93721ad3c1a | 156 | |
aldih | 0:a93721ad3c1a | 157 | } |
aldih | 0:a93721ad3c1a | 158 | } |
aldih | 0:a93721ad3c1a | 159 | |
aldih | 0:a93721ad3c1a | 160 | void gps_call(void) |
aldih | 0:a93721ad3c1a | 161 | { |
aldih | 0:a93721ad3c1a | 162 | // GPS Code |
aldih | 0:a93721ad3c1a | 163 | pc.printf("Turning inside the loop() \n"); |
aldih | 0:a93721ad3c1a | 164 | // Every 3 seconds, flip LED1 and print the basic GPS info. |
aldih | 0:a93721ad3c1a | 165 | pc.printf("hello GPS \n"); |
aldih | 0:a93721ad3c1a | 166 | |
aldih | 0:a93721ad3c1a | 167 | myled1 = 1; |
aldih | 0:a93721ad3c1a | 168 | |
aldih | 0:a93721ad3c1a | 169 | // Demonstrate how to find out the GPS location co-ords. |
aldih | 0:a93721ad3c1a | 170 | pc.printf("Method 1. Lat = %.4f ", gps.latitude()); |
aldih | 0:a93721ad3c1a | 171 | XBee.printf("Method 1. Lat = %.4f ", gps.latitude()); |
aldih | 0:a93721ad3c1a | 172 | |
aldih | 0:a93721ad3c1a | 173 | pc.printf("Lon = %.4f ", gps.longitude()); |
aldih | 0:a93721ad3c1a | 174 | XBee.printf("Lon = %.4f ", gps.longitude()); |
aldih | 0:a93721ad3c1a | 175 | |
aldih | 0:a93721ad3c1a | 176 | pc.printf("Alt = %.4f ", gps.altitude()); |
aldih | 0:a93721ad3c1a | 177 | XBee.printf("Alt = %.4f ", gps.altitude()); |
aldih | 0:a93721ad3c1a | 178 | |
aldih | 0:a93721ad3c1a | 179 | |
aldih | 0:a93721ad3c1a | 180 | // Gran a snapshot of the current time. |
aldih | 0:a93721ad3c1a | 181 | gps.timeNow(&q1); |
aldih | 0:a93721ad3c1a | 182 | pc.printf("%02d:%02d:%02d %02d/%02d/%04d\r\n", |
aldih | 0:a93721ad3c1a | 183 | q1.hour, q1.minute, q1.second, q1.day, q1.month, q1.year); |
aldih | 0:a93721ad3c1a | 184 | XBee.printf("%02d:%02d:%02d %02d/%02d/%04d\r\n", |
aldih | 0:a93721ad3c1a | 185 | q1.hour, q1.minute, q1.second, q1.day, q1.month, q1.year); |
aldih | 0:a93721ad3c1a | 186 | } |
aldih | 0:a93721ad3c1a | 187 | void temp_hum(void) |
aldih | 0:a93721ad3c1a | 188 | { |
aldih | 0:a93721ad3c1a | 189 | //Temperature Sensor Code |
aldih | 0:a93721ad3c1a | 190 | pc.printf("hello TEMP"); |
aldih | 0:a93721ad3c1a | 191 | |
aldih | 0:a93721ad3c1a | 192 | int done=0; |
aldih | 0:a93721ad3c1a | 193 | float temp,hum; |
aldih | 0:a93721ad3c1a | 194 | |
aldih | 0:a93721ad3c1a | 195 | RHT03 humtemp(p24); //Initalise the RHT03 (change pin number to the pin its connected to) |
aldih | 0:a93721ad3c1a | 196 | |
aldih | 0:a93721ad3c1a | 197 | while(!done) { //Loop keeps running until RHT03 is read succesfully |
aldih | 0:a93721ad3c1a | 198 | wait(2); //Needed to make sure the sensor has time to initalise and so its not polled too quickly |
aldih | 0:a93721ad3c1a | 199 | if(humtemp.readData() == RHT_ERROR_NONE) done=1; //Request data from the RHT03 |
aldih | 0:a93721ad3c1a | 200 | } |
aldih | 0:a93721ad3c1a | 201 | |
aldih | 0:a93721ad3c1a | 202 | temp = humtemp.getTemperatureC(); //Gets the current temperature in centigrade |
aldih | 0:a93721ad3c1a | 203 | hum = humtemp.getHumidity(); //Gets the current humidity in percentage |
aldih | 0:a93721ad3c1a | 204 | |
aldih | 0:a93721ad3c1a | 205 | pc.printf("Temperature is %f C \r",temp); |
aldih | 0:a93721ad3c1a | 206 | XBee.printf("Temperature is %f C \r\n",temp); |
aldih | 0:a93721ad3c1a | 207 | |
aldih | 0:a93721ad3c1a | 208 | |
aldih | 0:a93721ad3c1a | 209 | pc.printf("Humidity is %f % \r\n",hum); |
aldih | 0:a93721ad3c1a | 210 | XBee.printf("Humidity is %f % \r\n",hum); |
aldih | 0:a93721ad3c1a | 211 | |
aldih | 0:a93721ad3c1a | 212 | |
aldih | 0:a93721ad3c1a | 213 | |
aldih | 0:a93721ad3c1a | 214 | ///////////////////////////////////////////////// |
aldih | 0:a93721ad3c1a | 215 | |
aldih | 0:a93721ad3c1a | 216 | } |
aldih | 0:a93721ad3c1a | 217 | |
aldih | 0:a93721ad3c1a | 218 | void cam_call(void) |
aldih | 0:a93721ad3c1a | 219 | { |
aldih | 0:a93721ad3c1a | 220 | //camera Code |
aldih | 0:a93721ad3c1a | 221 | j++; |
aldih | 0:a93721ad3c1a | 222 | Timer timer; |
aldih | 0:a93721ad3c1a | 223 | pc.printf("starting timer..."); |
aldih | 0:a93721ad3c1a | 224 | timer.start(); |
aldih | 0:a93721ad3c1a | 225 | pc.printf("hello CAMERA"); |
aldih | 0:a93721ad3c1a | 226 | |
aldih | 0:a93721ad3c1a | 227 | if (camera.isReady()) { |
aldih | 0:a93721ad3c1a | 228 | char filename[32]; |
aldih | 0:a93721ad3c1a | 229 | sprintf(filename, "/local/pict%03d.jpg", j); |
aldih | 0:a93721ad3c1a | 230 | printf("Picture: %s ", filename); |
aldih | 0:a93721ad3c1a | 231 | if (camera.takePicture(filename)) { |
aldih | 0:a93721ad3c1a | 232 | while (camera.isProcessing()) { |
aldih | 0:a93721ad3c1a | 233 | camera.processPicture(); |
aldih | 0:a93721ad3c1a | 234 | } |
aldih | 0:a93721ad3c1a | 235 | myled1 = 1; //show successful picture was taken |
aldih | 0:a93721ad3c1a | 236 | |
aldih | 0:a93721ad3c1a | 237 | myled1 = 0; |
aldih | 0:a93721ad3c1a | 238 | } else { |
aldih | 0:a93721ad3c1a | 239 | printf("take picture failed "); |
aldih | 0:a93721ad3c1a | 240 | myled3 = 1; //show picture take failed |
aldih | 0:a93721ad3c1a | 241 | |
aldih | 0:a93721ad3c1a | 242 | myled3 = 0; |
aldih | 0:a93721ad3c1a | 243 | } |
aldih | 0:a93721ad3c1a | 244 | } else { |
aldih | 0:a93721ad3c1a | 245 | printf("camera is not ready "); |
aldih | 0:a93721ad3c1a | 246 | myled4 = 1; //show camera is not ready |
aldih | 0:a93721ad3c1a | 247 | |
aldih | 0:a93721ad3c1a | 248 | myled4 = 0; |
aldih | 0:a93721ad3c1a | 249 | } |
aldih | 0:a93721ad3c1a | 250 | |
aldih | 0:a93721ad3c1a | 251 | myled2 = 1; //show end of sequence |
aldih | 0:a93721ad3c1a | 252 | |
aldih | 0:a93721ad3c1a | 253 | myled2 = 0; |
aldih | 0:a93721ad3c1a | 254 | printf("time = %f\n", timer.read()); |
aldih | 0:a93721ad3c1a | 255 | //////////////////////////////////////////////////// |
aldih | 0:a93721ad3c1a | 256 | |
aldih | 0:a93721ad3c1a | 257 | //Xbee Code |
aldih | 0:a93721ad3c1a | 258 | |
aldih | 0:a93721ad3c1a | 259 | pc.printf("i'm Sending......."); |
aldih | 0:a93721ad3c1a | 260 | |
aldih | 0:a93721ad3c1a | 261 | |
aldih | 0:a93721ad3c1a | 262 | |
aldih | 0:a93721ad3c1a | 263 | |
aldih | 0:a93721ad3c1a | 264 | ///////////////////////////////////////////// |
aldih | 0:a93721ad3c1a | 265 | |
aldih | 0:a93721ad3c1a | 266 | } |