Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CMSIS_DSP_401 DHT22 MPU9150_DMP QuaternionMath MODSERIAL mbed-src FATFileSystem111 SDFileSystem11 Camera_LS_Y201_CANSAT
Revision 4:dbb8e901826d, committed 2015-09-09
- Comitter:
- Hagrass
- Date:
- Wed Sep 09 14:38:04 2015 +0000
- Parent:
- 2:0658372379c5
- Commit message:
- cansat 3;
Changed in this revision
diff -r 0658372379c5 -r dbb8e901826d extlib/FATFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extlib/FATFileSystem.lib Wed Sep 09 14:38:04 2015 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/Hagrass/code/FATFileSystem111/#55389ae4eec8
diff -r 0658372379c5 -r dbb8e901826d extlib/SDFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extlib/SDFileSystem.lib Wed Sep 09 14:38:04 2015 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/Hagrass/code/SDFileSystem11/#c9ea64029ca8
diff -r 0658372379c5 -r dbb8e901826d extlibbb/FATFileSystem.lib --- a/extlibbb/FATFileSystem.lib Tue Aug 18 00:42:31 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/users/Hagrass/code/FATFileSystem/#7b45d92e5c5a
diff -r 0658372379c5 -r dbb8e901826d extlibbb/SDFileSystem.lib --- a/extlibbb/SDFileSystem.lib Tue Aug 18 00:42:31 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/users/Hagrass/code/SDFileSystem/#a66a7f783ef0
diff -r 0658372379c5 -r dbb8e901826d main.cpp
--- a/main.cpp Tue Aug 18 00:42:31 2015 +0000
+++ b/main.cpp Wed Sep 09 14:38:04 2015 +0000
@@ -3,28 +3,287 @@
#include "BMP085.h"
#include "DHT22.h"
#include "main.h"
+
+
+#include "Camera_LS_Y201.h"
+#include "SDFileSystem.h"
char ns, ew, tf, status;
int fq, nst, fix, date; // fix quality, Number of satellites being tracked, 3D fix
float latitude, longitude, timefix, speed, altitude;
-
+Serial xbee(p28,p27);
DHT22 dht22(p23);
-BMP085 bmp085(p28, p27,BMP085_oss8);
-Serial xbee(p9,p10);
-DigitalOut rst(p11,PullUp);
-DigitalOut myled(LED1);
+BMP085 bmp085(p9, p10,BMP085_oss8);
+
+
+//DigitalOut myled(LED1);
Serial debug(USBTX, USBRX);
-MPU9150 imu(p27, p28, p15);
+MPU9150 imu(p10, p9, p15);
+/////////////////////////////////////////////////////
+#define DEBMSG debug.printf
+#define NEWLINE() debug.printf("\r\n")
+
+#define USE_SDCARD 0
+
+#if USE_SDCARD
+#define FILENAME "/sd/IMG_%04d.jpg"
+SDFileSystem fs(p5, p6, p7, p8, "sd");
+#else
+#define FILENAME "/local/IMG_%04d.jpg"
+LocalFileSystem fs("local");
+#endif
+Camera_LS_Y201 cam1(p17, p18);
+
+int pow(int x,int y)
+{
+ int z=x;
+ for ( i=1;i<y;i++)
+ {
+ z *=x;
+ }
+
+ return z;
+}
+typedef struct work {
+ FILE *fp;
+} work_t;
+
+work_t work;
+void converter(double x)
+{
+ int i;
+ x*=pow(10,6);
+ int z;
+ for(i=9;i>=0;i--)
+ {
+ if(i==5){
+ xbee.printf(".");
+ wait(0.02);
+ }
+ z = x/(pow(10,i));
+ x =x-(z*pow(10,i));
+ xbee.printf("%d",z);
+ wait(0.02);
+ }
+
+}
+
+
+ uint8_t send[16] = {
+ 0x56,
+ 0x00,
+ 0x32,
+ 0x0C,
+ 0x00,
+ 0x0A,
+ 0x00,
+ 0x00,
+ 0x00, // MH
+ 0x00, // ML
+ 0x00,
+ 0x00,
+ 0x00, // KH
+ 0x00, // KL
+ 0x00, // XX
+ 0x00 // XX
+ };
+
+ uint16_t x = 10; // Interval time. XX XX * 0.01m[sec]
+ bool end = true;
+ uint16_t m = 0; // Staring address.
+ /*
+ * Get the data size.
+ */
+uint8_t body[16000];
+uint16_t k = sizeof(body);
+ int siz_done = 0;
+ int siz_total = 0;
+ int cnt = 0;
+ int z;
+//////////////////////////////////////////
+void callback_func(int done, int total, uint8_t *buf, size_t siz) {
+
+ fwrite(buf, siz, 1, work.fp);
+
+//for(int i=0;i<siz;i++)
+//{
+//xbee.printf("%x",buf[i]);
+//fprintf(work.fp,"%c",buf[i]);
+ //}
+
+ static int n = 0;
+ int tmp = done * 100 / total;
+ if (n != tmp) {
+ n = tmp;
+ DEBMSG("Writ%3d%%", n);
+ NEWLINE();
+ }
+}
+
+
+
+////////////////////////////////////////////
+
+
+
+
+ void readdJpegFileContent(void (*func)(int done, int total, uint8_t *buf, size_t siz)) {
+
+
+
+if(m==0)
+{
+z=sizeof(body);
+ }
+
+ //if (r != NoError) {
+ // return r;
+ //}
+
+ send[8] = (m >> 8) & 0xff;
+ send[9] = (m >> 0) & 0xff;
+ send[12] = (k >> 8) & 0xff;
+ send[13] = (k >> 0) & 0xff;
+ send[14] = (x >> 8) & 0xff;
+ send[15] = (x >> 0) & 0xff;
+ /*
+ * Send a command.
+ */
+ cam1.sendBytes(send, sizeof(send), 200 * 1000) ;
+ // printf("sended header");
+ // return SendError;
+
+ /*
+ * Read the header of the response.
+ */
+ uint8_t header[5];
+ cam1.recvBytes(header, sizeof(header), 2 * 1000 * 1000);
+ // return RecvError;
+ //printf("recved header");
+ /*
+ * Check the response and fetch an image data.
+ */
+
+ if ((header[0] == 0x76)
+ && (header[1] == 0x00)
+ && (header[2] == 0x32)
+ && (header[3] == 0x00)
+ && (header[4] == 0x00)) {
+
+ cam1.recvBytes(body, z, 2 * 1000 * 1000); //{
+ //return RecvError;
+ // }
+ // printf("saved");
+
+ siz_done += z;
+
+ if (func != NULL) {
+ if (siz_done > siz_total) {
+ z=sizeof(body)-siz_done+siz_total+3;
+ siz_done = siz_total;
+
+
+ }
+ func(siz_done, siz_total, body, z);
+ }
+ for (int i = 1; i < z; i++) {
+ if ((body[i - 1] == 0xFF) && (body[i - 0] == 0xD9)) {
+ end = true;
+ //printf("saved%d",i);
+ }
+ }
+ } //else {
+ // return UnexpectedReply;
+ //}
+ /*
+ * Read the footer of the response.
+ */
+ uint8_t footer[5];
+ cam1.recvBytes(footer, sizeof(footer), 2 * 1000 * 1000);// {
+ // return RecvError;
+ //}
+
+ m += z;
+
+ // return NoError;
+}
+
+//////////////////
+/**
+ * Capture.
+ *
+ * @param cam A pointer to a camera object.
+ * @param filename The file name.
+ *
+ * @return Return 0 if it succeed.
+ */
+int capture(Camera_LS_Y201 *cam, char *filename) {
+ /*
+ * Take a picture.
+ */
+if(end==true)
+{
+ if (cam->takePicture() != 0) {
+ return -1;
+ }
+ cam1.readJpegFileSize(&siz_total);
+// printf("%d",siz_total);
+ siz_done = 0;
+
+
+ DEBMSG("Captured.");
+ NEWLINE();
+ work.fp = fopen(filename, "wb");
+ //p1= fopen("/sd/IMG_11111.txt", "wb");
+ if (work.fp == NULL) {
+ return -2;
+ }
+
+ /*
+ * Read the content.
+ */
+ DEBMSG("%s", filename);
+ NEWLINE();
+end=false;
+}
+ /*
+ * Open file.
+ */
+
+ readdJpegFileContent(callback_func);
+ // fclose(work.fp);
+ //return -3;
+
+
+
+ /*
+ * Stop taking pictures.
+ */
+ if(end== true)
+ {
+ fclose(work.fp);
+ cam->stopTakingPictures();
+
+DEBMSG("[%04d]:OK.", cnt);
+ NEWLINE();
+m=0;
+cnt++;
+//wait(1);
+//xbee.printf("saved");
+}
+ return 0;
+}
+//////////////////////////////////////////////////////
DigitalOut led(LED1);
void Init()
{
gps.baud(9600);
- // pc.baud(115200);
+ debug.baud(115200);
- xbee.printf("Init OK\n");
+ // xbee.printf("Init OK\n");
printf("Init OK\n");
}
@@ -32,16 +291,38 @@
int e=6;
int n=0;
int main(){
+ xbee.baud(115200);
+ pc.baud(115200);
+DEBMSG("Camera module");
+ NEWLINE();
+ DEBMSG("Resetting...");
+ NEWLINE();
+ wait(1);
+
+ if (cam1.reset() == 0) {
+ DEBMSG("Reset OK.");
+ NEWLINE();
+ } else {
+ DEBMSG("Reset fail.");
+ NEWLINE();
+ error("Reset fail.");
+ }
+
+
+ wait(1);
+ cam1.baud();
+ int j=1;
+ int g=1;
Init();
char c;
//debug.baud(115200);
if(imu.isReady()){
- xbee.printf("MPU9150 is ready\r\n");
+ //xbee.printf("MPU9150 is ready\r\n");
printf("MPU9150 is ready\r\n");
} else {
- xbee.printf("MPU9150 initialisation failure\r\n");
+ //xbee.printf("MPU9150 initialisation failure\r\n");
printf("MPU9150 initialisation failure\r\n");
}
@@ -59,19 +340,21 @@
// int g=10;
while(true){
- n++;
+ Timer timer1;
+ timer1.start();
+ // n++;
// wait(0.5);
bmp085.update();
float allltitude=bmp085.calcAltitude(bmp085.get_pressure()*100);
//wait(0.2);
- if(e==6)
- {
+ //if(e==6)
+ //{
dht22.sample() ;
hum=dht22.getHumidity()/10.0;
temp=dht22.getTemperature()/10.0;
- e=1;
- }
+ //e=1;
+ //}
if(imu.getFifoCount() >= 48){
@@ -139,32 +422,130 @@
}
- if(n==10)
- {
- xbee.printf("w:%f, v.x:%f, v.y:%f, v.z:%f\r\n", q1.w, q1.v.x, q1.v.y, q1.v.z);
-
+ // if(n==10)
+ //{
+ // xbee.printf("w:%f, v.x:%f, v.y:%f, v.z:%f\r\n", q1.w, q1.v.x, q1.v.y, q1.v.z);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("p");
+wait(0.02);
+float x =bmp085.get_pressure();
+converter( x);
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("t");
+wait(0.02);
+x =(bmp085.get_temperature()+temp)/2;
+
+
+converter( x);
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("h");
+wait(0.02);
+x=hum;
+converter( x);
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("A"); //A for altitude from pressure sensor
+wait(0.02);
+x =allltitude;
+
+converter( x);
+//imu variables q1.w, q1.v.x, q1.v.y, q1.v.z
+
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("w");
+wait(0.02);
+x =q1.w;
-xbee.printf("p:%f hPa / t:%f / altitude=%f \n\r",bmp085.get_pressure() , bmp085.get_temperature(),allltitude);
+converter( x);
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("x");
+wait(0.02);
+x =q1.v.x;
+
- xbee.printf("temp: %f , hum:%f \n\r",temp,hum);
+converter( x);
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("y");
+wait(0.02);
+x =q1.v.y;
+converter(x);
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("z");
+wait(0.02);
+x =q1.v.z;
+converter(x);
+// gps variables latitude,longitude
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("a");
+wait(0.02);
+x = latitude;
+converter(x);
+wait(0.02);
+xbee.printf(",");
+wait(0.02);
+xbee.printf("o");
+wait(0.02);
+x = longitude;
+converter(x);
+//xbee.printf("p:%f hPa / t:%f / altitude=%f \n\r",bmp085.get_pressure() , bmp085.get_temperature(),allltitude);
+
+ // xbee.printf("temp: %f , hum:%f \n\r",temp,hum);
- xbee.printf("GPGGA Fix taken at: %f, Latitude: %f %c, Longitude: %f %c, Fix quality: %d, Number of sat: %d, Altitude: %f M\n", timefix, latitude, ns, longitude, ew, fq, nst, altitude);
- xbee.printf("GPGSA Type fix: %c, 3D fix: %d, number of sat: %d\r\n", tf, fix, nst);
- xbee.printf("GPGLL Latitude: %f %c, Longitude: %f %c, Fix taken at: %f\n", latitude, ns, longitude, ew, timefix);
- xbee.printf("GPRMC Fix taken at: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n\n\r\n\n\n", timefix, status, latitude, ns, longitude, ew, speed, date);
-n=1;
+ // xbee.printf("a: %f, o: %f", latitude,longitude);
+ ////////////////////////////////////////////////////////
+ //xbee.printf("GPGSA Type fix: %c, 3D fix: %d, number of sat: %d\r\n", tf, fix, nst);
+ // xbee.printf("GPGLL Latitude: %f %c, Longitude: %f %c, Fix taken at: %f\n", latitude, ns, longitude, ew, timefix);
+ // xbee.printf("GPRMC Fix taken at: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n\n\r\n\n\n", timefix, status, latitude, ns, longitude, ew, speed, date);
+//n=1;
- }
+ //}
+
printf("w:%f, v.x:%f, v.y:%f, v.z:%f\r\n", q1.w, q1.v.x, q1.v.y, q1.v.z);
-printf("p:%f hPa / t:%f / altitude=%f \n\r",bmp085.get_pressure() , bmp085.get_temperature(),allltitude);
+ printf("p:%f hPa / t:%f / altitude=%f \n\r",x , bmp085.get_temperature(),allltitude);
printf("temp: %f , hum:%f \n\r",temp,hum);
- printf("GPGGA Fix taken at: %f, Latitude: %f %c, Longitude: %f %c, Fix quality: %d, Number of sat: %d, Altitude: %f M\n", timefix, latitude, ns, longitude, ew, fq, nst, altitude);
+ printf("GPGGA Fix taken at: %f, Latitude: %f %c, Longitude: %f %c, Fix quality: %d, Number of sat: %d, Altitude: %f M\n", timefix, latitude, ns, longitude, ew, fq, nst, altitude);
printf("GPGSA Type fix: %c, 3D fix: %d, number of sat: %d\r\n", tf, fix, nst);
printf("GPGLL Latitude: %f %c, Longitude: %f %c, Fix taken at: %f\n", latitude, ns, longitude, ew, timefix);
printf("GPRMC Fix taken at: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n\n\r\n\n\n", timefix, status, latitude, ns, longitude, ew, speed, date);
-
+
+ char fname[64];
+ // xbee.printf("hello%d\n\r",g);
+
+ if((end==true)||(j==1))
+ {
+
+ snprintf(fname, sizeof(fname) - 1, FILENAME, cnt);
+ j=0;
+ }
+ capture(&cam1, fname);
+ //if (r == 0) {
+
+
+ // }
+ //} else {
+ //DEBMSG("[%04d]:NG. (code=%d)", cnt, r);
+ // NEWLINE();
+ // error("Failure.");
+ //}
+ g++;
@@ -182,9 +563,18 @@
debug.putc((char)0);
}
*/
- }
- //wait(1);
-e++;
+ }
+
+ while(1)
+ {
+ if(timer1.read_ms()>=2000)
+ {
+ timer1.reset();
+ break;
+ }
+ }
+
+//e++;
//g++;
//xbee.printf("this is the end");
//rst=1;
diff -r 0658372379c5 -r dbb8e901826d mylib/Camera_LS_Y201.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mylib/Camera_LS_Y201.lib Wed Sep 09 14:38:04 2015 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/Hagrass/code/Camera_LS_Y201_CANSAT/#96169dcaaa1f
diff -r 0658372379c5 -r dbb8e901826d mylibbb/Camera_LS_Y201.lib --- a/mylibbb/Camera_LS_Y201.lib Tue Aug 18 00:42:31 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/users/Hagrass/code/Camera_LS_Y201_CANSAT/#44403a8e4f44