エレキジャック Web版 マイコン・カーを製作してみよう<15> カメラで複数の画像サイズを撮影するプログラムです。http://www.eleki-jack.com/arm/2012/07/15.html

Dependencies:   FatFileSystem TextLCD mbed CameraC1098 SDHC_Lib

Committer:
sunifu
Date:
Fri Jul 27 14:37:21 2012 +0000
Revision:
1:06966e960702
Parent:
0:94c9a989767f
v1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sunifu 0:94c9a989767f 1 #include "mbed.h"
sunifu 0:94c9a989767f 2 #include "CameraC1098.h"
sunifu 0:94c9a989767f 3 #include "SDHCFileSystem.h"
sunifu 0:94c9a989767f 4 #include "TextLCD.h"
sunifu 1:06966e960702 5
sunifu 0:94c9a989767f 6 /*
sunifu 0:94c9a989767f 7 * Definitions.
sunifu 0:94c9a989767f 8 */
sunifu 0:94c9a989767f 9 #define USE_SD_CARD 1
sunifu 0:94c9a989767f 10
sunifu 0:94c9a989767f 11 /*
sunifu 0:94c9a989767f 12 * Variables.
sunifu 0:94c9a989767f 13 */
sunifu 0:94c9a989767f 14 static const int CAPTURE_FRAMES = 1;
sunifu 0:94c9a989767f 15 static char buf[256+1];
sunifu 0:94c9a989767f 16 static FILE *fp_jpeg;
sunifu 0:94c9a989767f 17
sunifu 0:94c9a989767f 18 /*
sunifu 0:94c9a989767f 19 * Modules.
sunifu 0:94c9a989767f 20 */
sunifu 0:94c9a989767f 21 #if USE_SD_CARD
sunifu 0:94c9a989767f 22 SDFileSystem sd(p5, p6, p7, p8, "fs");
sunifu 0:94c9a989767f 23 #else
sunifu 0:94c9a989767f 24 LocalFileSystem fs("fs");
sunifu 0:94c9a989767f 25 #endif
sunifu 0:94c9a989767f 26
sunifu 0:94c9a989767f 27 TextLCD lcd(p24, p26, p27, p28, p29, p30);
sunifu 0:94c9a989767f 28 CameraC1098 camera(p9, p10);
sunifu 0:94c9a989767f 29
sunifu 0:94c9a989767f 30
sunifu 0:94c9a989767f 31 /**
sunifu 0:94c9a989767f 32 * A callback function for jpeg images.
sunifu 0:94c9a989767f 33 * You can block this function until saving the image datas.
sunifu 0:94c9a989767f 34 *
sunifu 0:94c9a989767f 35 * @param buf A pointer to the image buffer.
sunifu 0:94c9a989767f 36 * @param siz A size of the image buffer.
sunifu 0:94c9a989767f 37 */
sunifu 0:94c9a989767f 38 void jpeg_callback(char *buf, size_t siz) {
sunifu 0:94c9a989767f 39 for (int i = 0; i < (int)siz; i++) {
sunifu 0:94c9a989767f 40 fprintf(fp_jpeg, "%c", buf[i]);
sunifu 0:94c9a989767f 41 }
sunifu 0:94c9a989767f 42 }
sunifu 0:94c9a989767f 43
sunifu 0:94c9a989767f 44 /**
sunifu 0:94c9a989767f 45 * Synchronizing.
sunifu 0:94c9a989767f 46 */
sunifu 0:94c9a989767f 47 void sync(void) {
sunifu 0:94c9a989767f 48 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 0:94c9a989767f 49
sunifu 0:94c9a989767f 50 err = camera.sync();
sunifu 0:94c9a989767f 51 lcd.locate(0,0);
sunifu 0:94c9a989767f 52 if (CameraC1098::NoError == err) {
sunifu 0:94c9a989767f 53 printf("[ OK ] : CameraC1098::sync\r\n");
sunifu 0:94c9a989767f 54 lcd.printf("C1098:Sync [OK] ");
sunifu 0:94c9a989767f 55
sunifu 0:94c9a989767f 56 } else {
sunifu 0:94c9a989767f 57 printf("[FAIL] : CameraC1098::sync (Error=%02X)\r\n", (int)err);
sunifu 0:94c9a989767f 58 lcd.printf("C1098:Sync[FAIL]");
sunifu 0:94c9a989767f 59 }
sunifu 0:94c9a989767f 60 }
sunifu 0:94c9a989767f 61
sunifu 0:94c9a989767f 62
sunifu 0:94c9a989767f 63 /**
sunifu 0:94c9a989767f 64 * A test function for jpeg snapshot picture.
sunifu 0:94c9a989767f 65 */
sunifu 0:94c9a989767f 66 void test_jpeg_snapshot_picture(int j) {
sunifu 0:94c9a989767f 67 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 0:94c9a989767f 68 for (int i = 0; i < CAPTURE_FRAMES; i++) {
sunifu 0:94c9a989767f 69 char fname[64];
sunifu 0:94c9a989767f 70 snprintf(fname, sizeof(fname), "/fs/jpss%02d-%02d.jpg",i, j);
sunifu 0:94c9a989767f 71 fp_jpeg = fopen(fname, "w");
sunifu 0:94c9a989767f 72 if ( fp_jpeg == NULL ){
sunifu 0:94c9a989767f 73 lcd.locate(0,1);
sunifu 0:94c9a989767f 74 lcd.printf("File Open Fail ");
sunifu 0:94c9a989767f 75 exit(1);
sunifu 0:94c9a989767f 76 }
sunifu 0:94c9a989767f 77
sunifu 0:94c9a989767f 78 err = camera.getJpegSnapshotPicture(jpeg_callback);
sunifu 0:94c9a989767f 79 lcd.locate(0,1);
sunifu 0:94c9a989767f 80 if (CameraC1098::NoError == err) {
sunifu 0:94c9a989767f 81 printf("[ OK ] : CameraC1098::getJpegSnapshotPicture\r\n");
sunifu 0:94c9a989767f 82 lcd.printf("getJpgPict [OK] ");
sunifu 0:94c9a989767f 83 } else {
sunifu 0:94c9a989767f 84 printf("[FAIL] : CameraC1098::getJpegSnapshotPicture (Error=%02X)\r\n", (int)err);
sunifu 0:94c9a989767f 85 lcd.printf("getJpgPict[FAIL]");
sunifu 0:94c9a989767f 86 }
sunifu 0:94c9a989767f 87 fclose(fp_jpeg);
sunifu 0:94c9a989767f 88 }
sunifu 0:94c9a989767f 89 }
sunifu 0:94c9a989767f 90
sunifu 0:94c9a989767f 91 /**
sunifu 0:94c9a989767f 92 * A entry point.
sunifu 0:94c9a989767f 93 */
sunifu 0:94c9a989767f 94 int main() {
sunifu 0:94c9a989767f 95 printf("\r\n");
sunifu 0:94c9a989767f 96 printf("==========\r\n");
sunifu 0:94c9a989767f 97 printf("CameraC1098\r\n");
sunifu 0:94c9a989767f 98 printf("==========\r\n");
sunifu 0:94c9a989767f 99 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 0:94c9a989767f 100 err = camera.init(CameraC1098::Baud460800, CameraC1098::JpegResolution80x64);
sunifu 0:94c9a989767f 101
sunifu 0:94c9a989767f 102 lcd.cls();
sunifu 0:94c9a989767f 103 lcd.locate(0,0);
sunifu 0:94c9a989767f 104 if (CameraC1098::NoError == err) {
sunifu 0:94c9a989767f 105 printf("[ OK ] : CameraC1098::init\r\n");
sunifu 0:94c9a989767f 106 lcd.printf("C1098:init [OK] ");
sunifu 0:94c9a989767f 107 } else {
sunifu 0:94c9a989767f 108 printf("[FAIL] : CameraC1098::init (Error=%02X)\r\n", (int)err);
sunifu 0:94c9a989767f 109 lcd.printf("C1098:init[FAIL]");
sunifu 0:94c9a989767f 110 }
sunifu 0:94c9a989767f 111 sync();
sunifu 0:94c9a989767f 112
sunifu 0:94c9a989767f 113 test_jpeg_snapshot_picture(1);
sunifu 0:94c9a989767f 114 err = camera.init(CameraC1098::Baud460800, CameraC1098::JpegResolution160x128);
sunifu 0:94c9a989767f 115 test_jpeg_snapshot_picture(2);
sunifu 0:94c9a989767f 116 err = camera.init(CameraC1098::Baud460800, CameraC1098::JpegResolution320x240);
sunifu 0:94c9a989767f 117 test_jpeg_snapshot_picture(3);
sunifu 0:94c9a989767f 118 err = camera.init(CameraC1098::Baud460800, CameraC1098::JpegResolution640x480);
sunifu 0:94c9a989767f 119 test_jpeg_snapshot_picture(4);
sunifu 0:94c9a989767f 120
sunifu 0:94c9a989767f 121 return 0;
sunifu 0:94c9a989767f 122 }