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
Diff: main.cpp
- Revision:
- 3:598af964f16c
- Parent:
- 1:339ebc8786ca
diff -r 0658372379c5 -r 598af964f16c main.cpp
--- a/main.cpp Tue Aug 18 00:42:31 2015 +0000
+++ b/main.cpp Tue Aug 18 14:40:03 2015 +0000
@@ -3,26 +3,257 @@
#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);
+
+typedef struct work {
+ FILE *fp;
+} work_t;
+
+work_t work;
+
+
+
+ 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");
printf("Init OK\n");
@@ -32,7 +263,29 @@
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);
@@ -59,19 +312,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){
@@ -165,6 +420,26 @@
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 +457,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;