Taking picture and uploading to sd card
Dependencies: Ethernet_Camera_LS_Y201_SDcard SDFileSystem mbed
Fork of VC0706_jins by
main.cpp@6:ffdac31f6106, 2018-02-08 (annotated)
- Committer:
- Dxmanas
- Date:
- Thu Feb 08 06:26:22 2018 +0000
- Revision:
- 6:ffdac31f6106
- Parent:
- 5:57b806fe3b8c
xzcvdv
Who changed what in which revision?
User | Revision | Line number | New 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 | } |