integration with sensors

Dependencies:   JPEGCamera MODGPS RHT03 mbed

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?

UserRevisionLine numberNew 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 }