Taking picture and uploading to sd card

Dependencies:   Ethernet_Camera_LS_Y201_SDcard SDFileSystem mbed

Fork of VC0706_jins by Albin Sebastian

Committer:
Dxmanas
Date:
Thu Feb 08 06:26:22 2018 +0000
Revision:
6:ffdac31f6106
Parent:
5:57b806fe3b8c
xzcvdv

Who changed what in which revision?

UserRevisionLine numberNew contents of line
azsymaivan 0:fbb29d9ea96b 1 #include "mbed.h"
WizLeo 2:f2d70f552a3e 2 #include "Camera_LS_Y201.h"
azsymaivan 0:fbb29d9ea96b 3 #include "SDFileSystem.h"
azsymaivan 0:fbb29d9ea96b 4
WizLeo 2:f2d70f552a3e 5 #define EnDebugMSG true //true-> print debug message to PC USB terminal, false->not print
azsymaivan 0:fbb29d9ea96b 6 #include "filelib.h"
Albinarackal 5:57b806fe3b8c 7
Albinarackal 5:57b806fe3b8c 8 #define DEBMSG pc.printf
Albinarackal 5:57b806fe3b8c 9 #define NEWLINE() pc.printf("\r\n")
WizLeo 2:f2d70f552a3e 10
WizLeo 2:f2d70f552a3e 11 #define USE_SDCARD 1
WizLeo 2:f2d70f552a3e 12
WizLeo 2:f2d70f552a3e 13 #if USE_SDCARD
WizLeo 2:f2d70f552a3e 14 #define FILENAME "/wfs/IMG_%04d.jpg"
WizLeo 2:f2d70f552a3e 15 SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "wfs");
WizLeo 2:f2d70f552a3e 16 #else
WizLeo 2:f2d70f552a3e 17 #define FILENAME "/local/IMG_%04d.jpg"
WizLeo 2:f2d70f552a3e 18 LocalFileSystem fs("local");
WizLeo 2:f2d70f552a3e 19 #endif
Albinarackal 5:57b806fe3b8c 20 Camera_LS_Y201 cam1(PA_14, PA_13); //rx tx
azsymaivan 0:fbb29d9ea96b 21
azsymaivan 0:fbb29d9ea96b 22 Serial pc (USBTX,USBRX); // tx, rx
azsymaivan 0:fbb29d9ea96b 23
azsymaivan 0:fbb29d9ea96b 24
WizLeo 2:f2d70f552a3e 25 DigitalOut lede (PC_8);
azsymaivan 0:fbb29d9ea96b 26
azsymaivan 0:fbb29d9ea96b 27
WizLeo 2:f2d70f552a3e 28 typedef struct work {
WizLeo 2:f2d70f552a3e 29 FILE *fp;
WizLeo 2:f2d70f552a3e 30 } work_t;
WizLeo 2:f2d70f552a3e 31
WizLeo 2:f2d70f552a3e 32 work_t work;
WizLeo 2:f2d70f552a3e 33
WizLeo 2:f2d70f552a3e 34 int take_picture = 0;
WizLeo 2:f2d70f552a3e 35
WizLeo 2:f2d70f552a3e 36 /**
WizLeo 2:f2d70f552a3e 37 * Callback function for readJpegFileContent.
WizLeo 2:f2d70f552a3e 38 *
WizLeo 2:f2d70f552a3e 39 * @param buf A pointer to a buffer.
WizLeo 2:f2d70f552a3e 40 * @param siz A size of the buffer.
WizLeo 2:f2d70f552a3e 41 */
WizLeo 2:f2d70f552a3e 42 void callback_func(int done, int total, uint8_t *buf, size_t siz) {
WizLeo 2:f2d70f552a3e 43 fwrite(buf, siz, 1, work.fp);
WizLeo 2:f2d70f552a3e 44
WizLeo 2:f2d70f552a3e 45 static int n = 0;
WizLeo 2:f2d70f552a3e 46 int tmp = done * 100 / total;
WizLeo 2:f2d70f552a3e 47 if (n != tmp) {
WizLeo 2:f2d70f552a3e 48 n = tmp;
WizLeo 2:f2d70f552a3e 49 DEBMSG("Writing...: %3d%%", n);
WizLeo 2:f2d70f552a3e 50 NEWLINE();
WizLeo 2:f2d70f552a3e 51 }
WizLeo 2:f2d70f552a3e 52 }
WizLeo 2:f2d70f552a3e 53
WizLeo 2:f2d70f552a3e 54 /**
WizLeo 2:f2d70f552a3e 55 * Capture.
WizLeo 2:f2d70f552a3e 56 *
WizLeo 2:f2d70f552a3e 57 * @param cam A pointer to a camera object.
WizLeo 2:f2d70f552a3e 58 * @param filename The file name.
WizLeo 2:f2d70f552a3e 59 *
WizLeo 2:f2d70f552a3e 60 * @return Return 0 if it succeed.
WizLeo 2:f2d70f552a3e 61 */
WizLeo 2:f2d70f552a3e 62 int capture(Camera_LS_Y201 *cam, char *filename) {
WizLeo 2:f2d70f552a3e 63 /*
WizLeo 2:f2d70f552a3e 64 * Take a picture.
WizLeo 2:f2d70f552a3e 65 */
WizLeo 2:f2d70f552a3e 66 if (cam->takePicture() != 0) {
WizLeo 2:f2d70f552a3e 67 return -1;
WizLeo 2:f2d70f552a3e 68 }
WizLeo 2:f2d70f552a3e 69 DEBMSG("Captured.");
WizLeo 2:f2d70f552a3e 70 NEWLINE();
WizLeo 2:f2d70f552a3e 71
WizLeo 2:f2d70f552a3e 72 /*
WizLeo 2:f2d70f552a3e 73 * Open file.
WizLeo 2:f2d70f552a3e 74 */
WizLeo 2:f2d70f552a3e 75 work.fp = fopen(filename, "wb");
WizLeo 2:f2d70f552a3e 76 if (work.fp == NULL) {
WizLeo 2:f2d70f552a3e 77 return -2;
WizLeo 2:f2d70f552a3e 78 }
WizLeo 2:f2d70f552a3e 79
WizLeo 2:f2d70f552a3e 80 /*
WizLeo 2:f2d70f552a3e 81 * Read the content.
WizLeo 2:f2d70f552a3e 82 */
WizLeo 2:f2d70f552a3e 83 DEBMSG("%s", filename);
WizLeo 2:f2d70f552a3e 84 NEWLINE();
WizLeo 2:f2d70f552a3e 85 if (cam->readJpegFileContent(callback_func) != 0) {
WizLeo 2:f2d70f552a3e 86 fclose(work.fp);
WizLeo 2:f2d70f552a3e 87 return -3;
WizLeo 2:f2d70f552a3e 88 }
WizLeo 2:f2d70f552a3e 89 fclose(work.fp);
WizLeo 2:f2d70f552a3e 90
Albinarackal 5:57b806fe3b8c 91 // Stop taking pictures.
Albinarackal 5:57b806fe3b8c 92
WizLeo 2:f2d70f552a3e 93 cam->stopTakingPictures();
WizLeo 2:f2d70f552a3e 94
WizLeo 2:f2d70f552a3e 95 return 0;
WizLeo 2:f2d70f552a3e 96 }
WizLeo 2:f2d70f552a3e 97
azsymaivan 0:fbb29d9ea96b 98
azsymaivan 0:fbb29d9ea96b 99
azsymaivan 0:fbb29d9ea96b 100 int main()
azsymaivan 0:fbb29d9ea96b 101 {
Albinarackal 5:57b806fe3b8c 102
Albinarackal 5:57b806fe3b8c 103 pc.baud(38400);
Albinarackal 5:57b806fe3b8c 104
WizLeo 2:f2d70f552a3e 105 DEBMSG("Camera module");
WizLeo 2:f2d70f552a3e 106 NEWLINE();
WizLeo 2:f2d70f552a3e 107 DEBMSG("Resetting...");
WizLeo 2:f2d70f552a3e 108 NEWLINE();
WizLeo 2:f2d70f552a3e 109 lede = true;
WizLeo 2:f2d70f552a3e 110 if (cam1.reset() == 0) {
WizLeo 2:f2d70f552a3e 111 DEBMSG("Reset OK.");
WizLeo 2:f2d70f552a3e 112 NEWLINE();
WizLeo 2:f2d70f552a3e 113 } else {
WizLeo 2:f2d70f552a3e 114 DEBMSG("Reset fail.");
WizLeo 2:f2d70f552a3e 115 NEWLINE();
WizLeo 2:f2d70f552a3e 116 error("Reset fail.");
WizLeo 2:f2d70f552a3e 117 lede = false;
WizLeo 2:f2d70f552a3e 118 }
azsymaivan 0:fbb29d9ea96b 119
WizLeo 2:f2d70f552a3e 120 if (cam1.setImageSize() == 0) {
WizLeo 2:f2d70f552a3e 121 DEBMSG("Set image OK.");
WizLeo 2:f2d70f552a3e 122 NEWLINE();
WizLeo 2:f2d70f552a3e 123 } else {
WizLeo 2:f2d70f552a3e 124 DEBMSG("Set image fail.");
WizLeo 2:f2d70f552a3e 125 NEWLINE();
WizLeo 2:f2d70f552a3e 126 error("Set image fail.");
WizLeo 2:f2d70f552a3e 127 lede = false;
WizLeo 2:f2d70f552a3e 128 }
WizLeo 2:f2d70f552a3e 129 wait(1);
WizLeo 2:f2d70f552a3e 130
WizLeo 2:f2d70f552a3e 131 int cnt = 0;
Dxmanas 6:ffdac31f6106 132 while (cnt < 1) {
WizLeo 2:f2d70f552a3e 133 lede = false;
WizLeo 2:f2d70f552a3e 134 char fname[64];
WizLeo 2:f2d70f552a3e 135 snprintf(fname, sizeof(fname) - 1, FILENAME, cnt);
WizLeo 2:f2d70f552a3e 136 int r = capture(&cam1, fname);
WizLeo 2:f2d70f552a3e 137 if (r == 0) {
WizLeo 2:f2d70f552a3e 138 DEBMSG("[%04d]:OK.", cnt);
WizLeo 2:f2d70f552a3e 139 NEWLINE();
WizLeo 2:f2d70f552a3e 140 } else {
WizLeo 2:f2d70f552a3e 141 DEBMSG("[%04d]:NG. (code=%d)", cnt, r);
WizLeo 2:f2d70f552a3e 142 NEWLINE();
WizLeo 2:f2d70f552a3e 143 error("Failure.");
WizLeo 2:f2d70f552a3e 144 }
WizLeo 2:f2d70f552a3e 145 cnt++;
WizLeo 2:f2d70f552a3e 146 }
WizLeo 2:f2d70f552a3e 147 lede = true;
azsymaivan 0:fbb29d9ea96b 148
azsymaivan 0:fbb29d9ea96b 149 }