エレキジャック Web版 マイコン・カーを製作してみよう<21> マイコンカー制御プログラムです。http://www.eleki-jack.com/arm/2012/10/21.html  このプログラムは次回の記事でアップされるパソコン用プログラムを使ってマイコンカーを制御するプログラムです。マイコンカーとパソコンの通信はXbeeを使っています。

Dependencies:   TextLCD mbed

Committer:
sunifu
Date:
Sun May 06 10:54:43 2012 +0000
Revision:
3:ba97046adcd1
Parent:
2:9758930faa7e
Child:
4:887ced27d5d6
0.0.9

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sunifu 0:6eaa311b9d3b 1 /**
sunifu 0:6eaa311b9d3b 2 * Test program.
sunifu 0:6eaa311b9d3b 3 *
sunifu 3:ba97046adcd1 4 * CameraC328Library
sunifu 0:6eaa311b9d3b 5 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
sunifu 0:6eaa311b9d3b 6 * http://shinta.main.jp/
sunifu 3:ba97046adcd1 7 *
sunifu 3:ba97046adcd1 8 * CameraC1098-SS Library
sunifu 3:ba97046adcd1 9 * Copyright (C) 2012 Tadao Iida
sunifu 0:6eaa311b9d3b 10 */
sunifu 0:6eaa311b9d3b 11
sunifu 0:6eaa311b9d3b 12 /*
sunifu 0:6eaa311b9d3b 13 * Include files.
sunifu 0:6eaa311b9d3b 14 */
sunifu 0:6eaa311b9d3b 15
sunifu 0:6eaa311b9d3b 16 #include "mbed.h"
sunifu 0:6eaa311b9d3b 17 #include "CameraC1098.h"
sunifu 0:6eaa311b9d3b 18 #include "SDFileSystem.h"
sunifu 0:6eaa311b9d3b 19
sunifu 0:6eaa311b9d3b 20 /*
sunifu 0:6eaa311b9d3b 21 * Definitions.
sunifu 0:6eaa311b9d3b 22 */
sunifu 0:6eaa311b9d3b 23 #define USE_JPEG_HIGH_RESOLUTION 1
sunifu 0:6eaa311b9d3b 24 #define USE_SD_CARD 1
sunifu 0:6eaa311b9d3b 25
sunifu 0:6eaa311b9d3b 26 /*
sunifu 0:6eaa311b9d3b 27 * Variables.
sunifu 0:6eaa311b9d3b 28 */
sunifu 0:6eaa311b9d3b 29 static const int CAPTURE_FRAMES = 3;
sunifu 2:9758930faa7e 30 static const int RAWIMG_X = 320;
sunifu 2:9758930faa7e 31 static const int RAWIMG_Y = 240;
sunifu 0:6eaa311b9d3b 32 static char buf[RAWIMG_X * RAWIMG_Y * 2];
sunifu 0:6eaa311b9d3b 33 static FILE *fp_jpeg;
sunifu 0:6eaa311b9d3b 34
sunifu 0:6eaa311b9d3b 35 /*
sunifu 0:6eaa311b9d3b 36 * Modules.
sunifu 0:6eaa311b9d3b 37 */
sunifu 0:6eaa311b9d3b 38 #if USE_SD_CARD
sunifu 0:6eaa311b9d3b 39 SDFileSystem sd(p5, p6, p7, p8, "fs");
sunifu 0:6eaa311b9d3b 40 #else
sunifu 0:6eaa311b9d3b 41 LocalFileSystem fs("fs");
sunifu 0:6eaa311b9d3b 42 #endif
sunifu 0:6eaa311b9d3b 43
sunifu 1:8f2a9b48a9e0 44 CameraC1098 camera(p9, p10);
sunifu 0:6eaa311b9d3b 45
sunifu 0:6eaa311b9d3b 46
sunifu 0:6eaa311b9d3b 47 /**
sunifu 0:6eaa311b9d3b 48 * A callback function for jpeg images.
sunifu 0:6eaa311b9d3b 49 * You can block this function until saving the image datas.
sunifu 0:6eaa311b9d3b 50 *
sunifu 0:6eaa311b9d3b 51 * @param buf A pointer to the image buffer.
sunifu 0:6eaa311b9d3b 52 * @param siz A size of the image buffer.
sunifu 0:6eaa311b9d3b 53 */
sunifu 0:6eaa311b9d3b 54 void jpeg_callback(char *buf, size_t siz) {
sunifu 0:6eaa311b9d3b 55 for (int i = 0; i < (int)siz; i++) {
sunifu 0:6eaa311b9d3b 56 fprintf(fp_jpeg, "%c", buf[i]);
sunifu 0:6eaa311b9d3b 57 }
sunifu 0:6eaa311b9d3b 58 }
sunifu 0:6eaa311b9d3b 59
sunifu 0:6eaa311b9d3b 60 /**
sunifu 0:6eaa311b9d3b 61 * Synchronizing.
sunifu 0:6eaa311b9d3b 62 */
sunifu 0:6eaa311b9d3b 63 void sync(void) {
sunifu 0:6eaa311b9d3b 64 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 0:6eaa311b9d3b 65
sunifu 0:6eaa311b9d3b 66 err = camera.sync();
sunifu 0:6eaa311b9d3b 67 if (CameraC1098::NoError == err) {
sunifu 0:6eaa311b9d3b 68 printf("[ OK ] : CameraC1098::sync\r\n");
sunifu 0:6eaa311b9d3b 69 } else {
sunifu 0:6eaa311b9d3b 70 printf("[FAIL] : CameraC1098::sync (Error=%02X)\r\n", (int)err);
sunifu 0:6eaa311b9d3b 71 }
sunifu 0:6eaa311b9d3b 72 }
sunifu 0:6eaa311b9d3b 73
sunifu 0:6eaa311b9d3b 74
sunifu 0:6eaa311b9d3b 75 /**
sunifu 0:6eaa311b9d3b 76 * A test function for jpeg snapshot picture.
sunifu 0:6eaa311b9d3b 77 */
sunifu 0:6eaa311b9d3b 78 void test_jpeg_snapshot_picture(void) {
sunifu 0:6eaa311b9d3b 79 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 0:6eaa311b9d3b 80 for (int i = 0; i < CAPTURE_FRAMES; i++) {
sunifu 0:6eaa311b9d3b 81 char fname[64];
sunifu 0:6eaa311b9d3b 82 snprintf(fname, sizeof(fname), "/fs/jpss%04d.jpg", i);
sunifu 0:6eaa311b9d3b 83 fp_jpeg = fopen(fname, "w");
sunifu 0:6eaa311b9d3b 84
sunifu 0:6eaa311b9d3b 85 err = camera.getJpegSnapshotPicture(jpeg_callback);
sunifu 0:6eaa311b9d3b 86
sunifu 0:6eaa311b9d3b 87 if (CameraC1098::NoError == err) {
sunifu 0:6eaa311b9d3b 88 printf("[ OK ] : CameraC1098::getJpegSnapshotPicture\r\n");
sunifu 0:6eaa311b9d3b 89 } else {
sunifu 0:6eaa311b9d3b 90 printf("[FAIL] : CameraC1098::getJpegSnapshotPicture (Error=%02X)\r\n", (int)err);
sunifu 0:6eaa311b9d3b 91 }
sunifu 0:6eaa311b9d3b 92 fclose(fp_jpeg);
sunifu 0:6eaa311b9d3b 93 }
sunifu 0:6eaa311b9d3b 94 }
sunifu 0:6eaa311b9d3b 95
sunifu 0:6eaa311b9d3b 96 /**
sunifu 0:6eaa311b9d3b 97 * A entry point.
sunifu 0:6eaa311b9d3b 98 */
sunifu 0:6eaa311b9d3b 99 int main() {
sunifu 0:6eaa311b9d3b 100 printf("\r\n");
sunifu 2:9758930faa7e 101 printf("==========\r\n");
sunifu 0:6eaa311b9d3b 102 printf("CameraC1098\r\n");
sunifu 0:6eaa311b9d3b 103 printf("==========\r\n");
sunifu 0:6eaa311b9d3b 104 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 2:9758930faa7e 105 err = camera.init(CameraC1098::Baud460800, CameraC1098::JpegResolution160x128);
sunifu 0:6eaa311b9d3b 106
sunifu 0:6eaa311b9d3b 107 if (CameraC1098::NoError == err) {
sunifu 0:6eaa311b9d3b 108 printf("[ OK ] : CameraC1098::init\r\n");
sunifu 0:6eaa311b9d3b 109 } else {
sunifu 0:6eaa311b9d3b 110 printf("[FAIL] : CameraC1098::init (Error=%02X)\r\n", (int)err);
sunifu 0:6eaa311b9d3b 111 }
sunifu 1:8f2a9b48a9e0 112 //
sunifu 2:9758930faa7e 113 sync();
sunifu 2:9758930faa7e 114 test_jpeg_snapshot_picture();
sunifu 0:6eaa311b9d3b 115
sunifu 0:6eaa311b9d3b 116 return 0;
sunifu 0:6eaa311b9d3b 117 }