Source-code for cansat implementation in Bibliotheca Alexandrina, Alexandria, Egypt.

Dependencies:   JPEGCamera MODGPS RHT03 mbed

Committer:
Mohammed_Abo_Arais
Date:
Thu Sep 12 14:26:57 2013 +0000
Revision:
0:292a5636b86d
initial revision

Who changed what in which revision?

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