cansat
Dependencies: Servo mbed-src FATFileSystem1515 SDFileSystem1515 Camera_LS_Y201_CANSAT
Fork of Camera_LS_Y201_TestProgram by
main2.cpp
- Committer:
- Hagrass
- Date:
- 2015-09-09
- Revision:
- 3:ff47827160f8
- Parent:
- 2:248e3594ca61
File content as of revision 3:ff47827160f8:
#include "mbed.h" #include "Camera_LS_Y201.h" #include "SDFileSystem.h" #include "Servo.h" Servo myservo(p23); //#include "FATFileSystem.h" Serial xbee(p28,p27); Serial pc(USBTX,USBRX); //FILE *p1; #define DEBMSG pc.printf #define NEWLINE() pc.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. */ float p=0.1;//////////////servo int flag=1;///////////////servo int capture(Camera_LS_Y201 *cam, char *filename) { /* * Take a picture. */ if(end==true) { ///////////////////////////////////////////servo myservo = p; //pc.printf("hhhhhhh%fhhhh",p); if (flag==1) { p+=0.1; } else { p-=0.1; } if(p>0.9) { flag=0; } if(p<0.1) { flag=1; } //////////////////////////////////////////servo 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; } //////////////////////////// ///////////////////////// ///////////////////////////////////////////////////// int main(void) { 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; while (1) { 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++; } }