casat

Dependencies:   mbed-src FATFileSystem1515 SDFileSystem1515 Camera_LS_Y201_CANSAT

Fork of CANSAT_CAMERA_servo by Omar Hagrass

Committer:
Hagrass
Date:
Wed Sep 09 23:20:05 2015 +0000
Revision:
4:dfb4154c597b
Parent:
2:248e3594ca61
vvvvvv

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Hagrass 2:248e3594ca61 1 #include "mbed.h"
Hagrass 2:248e3594ca61 2 #include "Camera_LS_Y201.h"
Hagrass 2:248e3594ca61 3 #include "SDFileSystem.h"
Hagrass 4:dfb4154c597b 4
Hagrass 2:248e3594ca61 5
Hagrass 4:dfb4154c597b 6 DigitalOut myservo(p20);
Hagrass 2:248e3594ca61 7 //#include "FATFileSystem.h"
Hagrass 2:248e3594ca61 8 Serial xbee(p28,p27);
Hagrass 2:248e3594ca61 9 Serial pc(USBTX,USBRX);
Hagrass 2:248e3594ca61 10 //FILE *p1;
Hagrass 2:248e3594ca61 11
Hagrass 2:248e3594ca61 12 #define DEBMSG pc.printf
Hagrass 2:248e3594ca61 13 #define NEWLINE() pc.printf("\r\n")
Hagrass 2:248e3594ca61 14
Hagrass 2:248e3594ca61 15 #define USE_SDCARD 0
Hagrass 2:248e3594ca61 16
Hagrass 2:248e3594ca61 17 #if USE_SDCARD
Hagrass 2:248e3594ca61 18 #define FILENAME "/sd/IMG_%04d.jpg"
Hagrass 2:248e3594ca61 19 SDFileSystem fs(p5, p6, p7, p8, "sd");
Hagrass 2:248e3594ca61 20 #else
Hagrass 2:248e3594ca61 21 #define FILENAME "/local/IMG_%04d.jpg"
Hagrass 2:248e3594ca61 22 LocalFileSystem fs("local");
Hagrass 2:248e3594ca61 23 #endif
Hagrass 2:248e3594ca61 24 Camera_LS_Y201 cam1(p17, p18);
Hagrass 2:248e3594ca61 25
Hagrass 2:248e3594ca61 26 typedef struct work {
Hagrass 2:248e3594ca61 27 FILE *fp;
Hagrass 2:248e3594ca61 28 } work_t;
Hagrass 2:248e3594ca61 29
Hagrass 2:248e3594ca61 30 work_t work;
Hagrass 4:dfb4154c597b 31 /////////////////////////servo
Hagrass 4:dfb4154c597b 32 Timer timer1;
Hagrass 4:dfb4154c597b 33 void servo(float p)
Hagrass 4:dfb4154c597b 34 {
Hagrass 4:dfb4154c597b 35 int x=1;
Hagrass 4:dfb4154c597b 36 while(x<=10)
Hagrass 4:dfb4154c597b 37 {
Hagrass 2:248e3594ca61 38
Hagrass 4:dfb4154c597b 39 timer1.start();
Hagrass 4:dfb4154c597b 40
Hagrass 4:dfb4154c597b 41 while(timer1.read_ms()<p)
Hagrass 4:dfb4154c597b 42 {
Hagrass 4:dfb4154c597b 43 myservo=1;
Hagrass 4:dfb4154c597b 44 }
Hagrass 4:dfb4154c597b 45
Hagrass 4:dfb4154c597b 46
Hagrass 4:dfb4154c597b 47 while(timer1.read_ms()<20)
Hagrass 4:dfb4154c597b 48 {
Hagrass 4:dfb4154c597b 49 myservo=0;
Hagrass 4:dfb4154c597b 50 }
Hagrass 4:dfb4154c597b 51 timer1.reset();
Hagrass 4:dfb4154c597b 52
Hagrass 4:dfb4154c597b 53 x++;
Hagrass 4:dfb4154c597b 54 }
Hagrass 4:dfb4154c597b 55 }
Hagrass 4:dfb4154c597b 56
Hagrass 4:dfb4154c597b 57 ///////////////////////////servo
Hagrass 2:248e3594ca61 58
Hagrass 2:248e3594ca61 59
Hagrass 2:248e3594ca61 60 uint8_t send[16] = {
Hagrass 2:248e3594ca61 61 0x56,
Hagrass 2:248e3594ca61 62 0x00,
Hagrass 2:248e3594ca61 63 0x32,
Hagrass 2:248e3594ca61 64 0x0C,
Hagrass 2:248e3594ca61 65 0x00,
Hagrass 2:248e3594ca61 66 0x0A,
Hagrass 2:248e3594ca61 67 0x00,
Hagrass 2:248e3594ca61 68 0x00,
Hagrass 2:248e3594ca61 69 0x00, // MH
Hagrass 2:248e3594ca61 70 0x00, // ML
Hagrass 2:248e3594ca61 71 0x00,
Hagrass 2:248e3594ca61 72 0x00,
Hagrass 2:248e3594ca61 73 0x00, // KH
Hagrass 2:248e3594ca61 74 0x00, // KL
Hagrass 2:248e3594ca61 75 0x00, // XX
Hagrass 2:248e3594ca61 76 0x00 // XX
Hagrass 2:248e3594ca61 77 };
Hagrass 2:248e3594ca61 78
Hagrass 2:248e3594ca61 79 uint16_t x = 10; // Interval time. XX XX * 0.01m[sec]
Hagrass 2:248e3594ca61 80 bool end = true;
Hagrass 2:248e3594ca61 81 uint16_t m = 0; // Staring address.
Hagrass 2:248e3594ca61 82 /*
Hagrass 2:248e3594ca61 83 * Get the data size.
Hagrass 2:248e3594ca61 84 */
Hagrass 2:248e3594ca61 85 uint8_t body[16000];
Hagrass 2:248e3594ca61 86 uint16_t k = sizeof(body);
Hagrass 2:248e3594ca61 87 int siz_done = 0;
Hagrass 2:248e3594ca61 88 int siz_total = 0;
Hagrass 2:248e3594ca61 89 int cnt = 0;
Hagrass 2:248e3594ca61 90 int z;
Hagrass 2:248e3594ca61 91 //////////////////////////////////////////
Hagrass 2:248e3594ca61 92 void callback_func(int done, int total, uint8_t *buf, size_t siz) {
Hagrass 2:248e3594ca61 93
Hagrass 2:248e3594ca61 94 // fwrite(buf, siz, 1, work.fp);
Hagrass 2:248e3594ca61 95
Hagrass 2:248e3594ca61 96 for(int i=0;i<siz;i++)
Hagrass 2:248e3594ca61 97 {
Hagrass 2:248e3594ca61 98 //xbee.printf("%x",buf[i]);
Hagrass 2:248e3594ca61 99 fprintf(work.fp,"%c",buf[i]);
Hagrass 2:248e3594ca61 100 }
Hagrass 2:248e3594ca61 101
Hagrass 2:248e3594ca61 102 static int n = 0;
Hagrass 2:248e3594ca61 103 int tmp = done * 100 / total;
Hagrass 2:248e3594ca61 104 if (n != tmp) {
Hagrass 2:248e3594ca61 105 n = tmp;
Hagrass 2:248e3594ca61 106 DEBMSG("Writ%3d%%", n);
Hagrass 2:248e3594ca61 107 NEWLINE();
Hagrass 2:248e3594ca61 108 }
Hagrass 2:248e3594ca61 109 }
Hagrass 2:248e3594ca61 110
Hagrass 2:248e3594ca61 111
Hagrass 2:248e3594ca61 112
Hagrass 2:248e3594ca61 113 ////////////////////////////////////////////
Hagrass 2:248e3594ca61 114
Hagrass 2:248e3594ca61 115
Hagrass 2:248e3594ca61 116
Hagrass 2:248e3594ca61 117
Hagrass 2:248e3594ca61 118 void readdJpegFileContent(void (*func)(int done, int total, uint8_t *buf, size_t siz)) {
Hagrass 2:248e3594ca61 119
Hagrass 2:248e3594ca61 120
Hagrass 2:248e3594ca61 121
Hagrass 2:248e3594ca61 122 if(m==0)
Hagrass 2:248e3594ca61 123 {
Hagrass 2:248e3594ca61 124 z=sizeof(body);
Hagrass 2:248e3594ca61 125 }
Hagrass 2:248e3594ca61 126
Hagrass 2:248e3594ca61 127 //if (r != NoError) {
Hagrass 2:248e3594ca61 128 // return r;
Hagrass 2:248e3594ca61 129 //}
Hagrass 2:248e3594ca61 130
Hagrass 2:248e3594ca61 131
Hagrass 2:248e3594ca61 132 send[8] = (m >> 8) & 0xff;
Hagrass 2:248e3594ca61 133 send[9] = (m >> 0) & 0xff;
Hagrass 2:248e3594ca61 134 send[12] = (k >> 8) & 0xff;
Hagrass 2:248e3594ca61 135 send[13] = (k >> 0) & 0xff;
Hagrass 2:248e3594ca61 136 send[14] = (x >> 8) & 0xff;
Hagrass 2:248e3594ca61 137 send[15] = (x >> 0) & 0xff;
Hagrass 2:248e3594ca61 138 /*
Hagrass 2:248e3594ca61 139 * Send a command.
Hagrass 2:248e3594ca61 140 */
Hagrass 2:248e3594ca61 141 cam1.sendBytes(send, sizeof(send), 200 * 1000) ;
Hagrass 2:248e3594ca61 142 // printf("sended header");
Hagrass 2:248e3594ca61 143 // return SendError;
Hagrass 2:248e3594ca61 144
Hagrass 2:248e3594ca61 145 /*
Hagrass 2:248e3594ca61 146 * Read the header of the response.
Hagrass 2:248e3594ca61 147 */
Hagrass 2:248e3594ca61 148 uint8_t header[5];
Hagrass 2:248e3594ca61 149 cam1.recvBytes(header, sizeof(header), 2 * 1000 * 1000);
Hagrass 2:248e3594ca61 150 // return RecvError;
Hagrass 2:248e3594ca61 151 //printf("recved header");
Hagrass 2:248e3594ca61 152 /*
Hagrass 2:248e3594ca61 153 * Check the response and fetch an image data.
Hagrass 2:248e3594ca61 154 */
Hagrass 2:248e3594ca61 155
Hagrass 2:248e3594ca61 156 if ((header[0] == 0x76)
Hagrass 2:248e3594ca61 157 && (header[1] == 0x00)
Hagrass 2:248e3594ca61 158 && (header[2] == 0x32)
Hagrass 2:248e3594ca61 159 && (header[3] == 0x00)
Hagrass 2:248e3594ca61 160 && (header[4] == 0x00)) {
Hagrass 2:248e3594ca61 161
Hagrass 2:248e3594ca61 162 cam1.recvBytes(body, z, 2 * 1000 * 1000); //{
Hagrass 2:248e3594ca61 163 //return RecvError;
Hagrass 2:248e3594ca61 164 // }
Hagrass 2:248e3594ca61 165 // printf("saved");
Hagrass 2:248e3594ca61 166
Hagrass 2:248e3594ca61 167 siz_done += z;
Hagrass 2:248e3594ca61 168
Hagrass 2:248e3594ca61 169 if (func != NULL) {
Hagrass 2:248e3594ca61 170 if (siz_done > siz_total) {
Hagrass 2:248e3594ca61 171 z=sizeof(body)-siz_done+siz_total+3;
Hagrass 2:248e3594ca61 172 siz_done = siz_total;
Hagrass 2:248e3594ca61 173
Hagrass 2:248e3594ca61 174
Hagrass 2:248e3594ca61 175 }
Hagrass 2:248e3594ca61 176 func(siz_done, siz_total, body, z);
Hagrass 2:248e3594ca61 177 }
Hagrass 2:248e3594ca61 178 for (int i = 1; i < z; i++) {
Hagrass 2:248e3594ca61 179 if ((body[i - 1] == 0xFF) && (body[i - 0] == 0xD9)) {
Hagrass 2:248e3594ca61 180 end = true;
Hagrass 2:248e3594ca61 181 //printf("saved%d",i);
Hagrass 2:248e3594ca61 182 }
Hagrass 2:248e3594ca61 183 }
Hagrass 2:248e3594ca61 184 } //else {
Hagrass 2:248e3594ca61 185 // return UnexpectedReply;
Hagrass 2:248e3594ca61 186 //}
Hagrass 2:248e3594ca61 187 /*
Hagrass 2:248e3594ca61 188 * Read the footer of the response.
Hagrass 2:248e3594ca61 189 */
Hagrass 2:248e3594ca61 190 uint8_t footer[5];
Hagrass 2:248e3594ca61 191 cam1.recvBytes(footer, sizeof(footer), 2 * 1000 * 1000);// {
Hagrass 2:248e3594ca61 192 // return RecvError;
Hagrass 2:248e3594ca61 193 //}
Hagrass 2:248e3594ca61 194
Hagrass 2:248e3594ca61 195 m += z;
Hagrass 2:248e3594ca61 196
Hagrass 2:248e3594ca61 197 // return NoError;
Hagrass 2:248e3594ca61 198 }
Hagrass 2:248e3594ca61 199
Hagrass 2:248e3594ca61 200 //////////////////
Hagrass 2:248e3594ca61 201 /**
Hagrass 2:248e3594ca61 202 * Capture.
Hagrass 2:248e3594ca61 203 *
Hagrass 2:248e3594ca61 204 * @param cam A pointer to a camera object.
Hagrass 2:248e3594ca61 205 * @param filename The file name.
Hagrass 2:248e3594ca61 206 *
Hagrass 2:248e3594ca61 207 * @return Return 0 if it succeed.
Hagrass 2:248e3594ca61 208 */
Hagrass 4:dfb4154c597b 209 float p=0.9;//////////////servo
Hagrass 2:248e3594ca61 210 int flag=1;///////////////servo
Hagrass 2:248e3594ca61 211 int capture(Camera_LS_Y201 *cam, char *filename) {
Hagrass 2:248e3594ca61 212 /*
Hagrass 2:248e3594ca61 213 * Take a picture.
Hagrass 2:248e3594ca61 214 */
Hagrass 2:248e3594ca61 215 if(end==true)
Hagrass 2:248e3594ca61 216 {
Hagrass 2:248e3594ca61 217 ///////////////////////////////////////////servo
Hagrass 4:dfb4154c597b 218 servo(p);
Hagrass 4:dfb4154c597b 219 pc.printf("hhhhhhh%fhhhh",p);
Hagrass 2:248e3594ca61 220 if (flag==1)
Hagrass 2:248e3594ca61 221 {
Hagrass 4:dfb4154c597b 222 p+=0.6;
Hagrass 2:248e3594ca61 223 }
Hagrass 2:248e3594ca61 224 else
Hagrass 2:248e3594ca61 225 {
Hagrass 4:dfb4154c597b 226 p-=0.6;
Hagrass 2:248e3594ca61 227 }
Hagrass 4:dfb4154c597b 228 if(p>1.5)
Hagrass 2:248e3594ca61 229
Hagrass 2:248e3594ca61 230 {
Hagrass 2:248e3594ca61 231 flag=0;
Hagrass 2:248e3594ca61 232 }
Hagrass 2:248e3594ca61 233
Hagrass 4:dfb4154c597b 234 if(p<0.9)
Hagrass 2:248e3594ca61 235 {
Hagrass 2:248e3594ca61 236 flag=1;
Hagrass 2:248e3594ca61 237 }
Hagrass 2:248e3594ca61 238
Hagrass 2:248e3594ca61 239 //////////////////////////////////////////servo
Hagrass 2:248e3594ca61 240 if (cam->takePicture() != 0) {
Hagrass 2:248e3594ca61 241 return -1;
Hagrass 2:248e3594ca61 242 }
Hagrass 2:248e3594ca61 243 cam1.readJpegFileSize(&siz_total);
Hagrass 2:248e3594ca61 244 // printf("%d",siz_total);
Hagrass 2:248e3594ca61 245 siz_done = 0;
Hagrass 2:248e3594ca61 246
Hagrass 2:248e3594ca61 247
Hagrass 2:248e3594ca61 248 DEBMSG("Captured.");
Hagrass 2:248e3594ca61 249 NEWLINE();
Hagrass 2:248e3594ca61 250 work.fp = fopen(filename, "wb");
Hagrass 2:248e3594ca61 251 //p1= fopen("/sd/IMG_11111.txt", "wb");
Hagrass 2:248e3594ca61 252 if (work.fp == NULL) {
Hagrass 2:248e3594ca61 253 return -2;
Hagrass 2:248e3594ca61 254 }
Hagrass 2:248e3594ca61 255
Hagrass 2:248e3594ca61 256 /*
Hagrass 2:248e3594ca61 257 * Read the content.
Hagrass 2:248e3594ca61 258 */
Hagrass 2:248e3594ca61 259 DEBMSG("%s", filename);
Hagrass 2:248e3594ca61 260 NEWLINE();
Hagrass 2:248e3594ca61 261 end=false;
Hagrass 2:248e3594ca61 262 }
Hagrass 2:248e3594ca61 263 /*
Hagrass 2:248e3594ca61 264 * Open file.
Hagrass 2:248e3594ca61 265 */
Hagrass 2:248e3594ca61 266
Hagrass 2:248e3594ca61 267 readdJpegFileContent(callback_func);
Hagrass 2:248e3594ca61 268 // fclose(work.fp);
Hagrass 2:248e3594ca61 269 //return -3;
Hagrass 2:248e3594ca61 270
Hagrass 2:248e3594ca61 271
Hagrass 2:248e3594ca61 272
Hagrass 2:248e3594ca61 273 /*
Hagrass 2:248e3594ca61 274 * Stop taking pictures.
Hagrass 2:248e3594ca61 275 */
Hagrass 2:248e3594ca61 276 if(end== true)
Hagrass 2:248e3594ca61 277 {
Hagrass 2:248e3594ca61 278 fclose(work.fp);
Hagrass 2:248e3594ca61 279 cam->stopTakingPictures();
Hagrass 2:248e3594ca61 280
Hagrass 2:248e3594ca61 281 DEBMSG("[%04d]:OK.", cnt);
Hagrass 2:248e3594ca61 282 NEWLINE();
Hagrass 2:248e3594ca61 283 m=0;
Hagrass 2:248e3594ca61 284 cnt++;
Hagrass 2:248e3594ca61 285 //wait(1);
Hagrass 2:248e3594ca61 286 //xbee.printf("saved");
Hagrass 2:248e3594ca61 287 }
Hagrass 2:248e3594ca61 288 return 0;
Hagrass 2:248e3594ca61 289 }
Hagrass 2:248e3594ca61 290 ////////////////////////////
Hagrass 2:248e3594ca61 291 /////////////////////////
Hagrass 2:248e3594ca61 292
Hagrass 2:248e3594ca61 293 /////////////////////////////////////////////////////
Hagrass 2:248e3594ca61 294 int main(void) {
Hagrass 2:248e3594ca61 295
Hagrass 2:248e3594ca61 296 xbee.baud(115200);
Hagrass 2:248e3594ca61 297 pc.baud(115200);
Hagrass 2:248e3594ca61 298
Hagrass 2:248e3594ca61 299 DEBMSG("Camera module");
Hagrass 2:248e3594ca61 300 NEWLINE();
Hagrass 2:248e3594ca61 301 DEBMSG("Resetting...");
Hagrass 2:248e3594ca61 302 NEWLINE();
Hagrass 2:248e3594ca61 303 wait(1);
Hagrass 2:248e3594ca61 304
Hagrass 2:248e3594ca61 305 if (cam1.reset() == 0) {
Hagrass 2:248e3594ca61 306 DEBMSG("Reset OK.");
Hagrass 2:248e3594ca61 307 NEWLINE();
Hagrass 2:248e3594ca61 308 } else {
Hagrass 2:248e3594ca61 309 DEBMSG("Reset fail.");
Hagrass 2:248e3594ca61 310 NEWLINE();
Hagrass 2:248e3594ca61 311 error("Reset fail.");
Hagrass 2:248e3594ca61 312 }
Hagrass 2:248e3594ca61 313
Hagrass 2:248e3594ca61 314
Hagrass 2:248e3594ca61 315 wait(1);
Hagrass 2:248e3594ca61 316 cam1.baud();
Hagrass 2:248e3594ca61 317 int j=1;
Hagrass 2:248e3594ca61 318 int g=1;
Hagrass 2:248e3594ca61 319 while (1) {
Hagrass 2:248e3594ca61 320
Hagrass 2:248e3594ca61 321 char fname[64];
Hagrass 2:248e3594ca61 322 // xbee.printf("hello%d\n\r",g);
Hagrass 2:248e3594ca61 323
Hagrass 2:248e3594ca61 324 if((end==true)||(j==1))
Hagrass 2:248e3594ca61 325 {
Hagrass 2:248e3594ca61 326
Hagrass 2:248e3594ca61 327 snprintf(fname, sizeof(fname) - 1, FILENAME, cnt);
Hagrass 2:248e3594ca61 328 j=0;
Hagrass 2:248e3594ca61 329 }
Hagrass 2:248e3594ca61 330 capture(&cam1, fname);
Hagrass 2:248e3594ca61 331 //if (r == 0) {
Hagrass 2:248e3594ca61 332
Hagrass 2:248e3594ca61 333
Hagrass 2:248e3594ca61 334 // }
Hagrass 2:248e3594ca61 335 //} else {
Hagrass 2:248e3594ca61 336 //DEBMSG("[%04d]:NG. (code=%d)", cnt, r);
Hagrass 2:248e3594ca61 337 // NEWLINE();
Hagrass 2:248e3594ca61 338 // error("Failure.");
Hagrass 2:248e3594ca61 339 //}
Hagrass 2:248e3594ca61 340 g++;
Hagrass 2:248e3594ca61 341 }
Hagrass 2:248e3594ca61 342 }
Hagrass 2:248e3594ca61 343
Hagrass 2:248e3594ca61 344
Hagrass 2:248e3594ca61 345
Hagrass 2:248e3594ca61 346
Hagrass 2:248e3594ca61 347