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

Dependencies:   TextLCD mbed

Committer:
sunifu
Date:
Sat May 05 11:37:25 2012 +0000
Revision:
0:6eaa311b9d3b
Child:
1:8f2a9b48a9e0
rev0.0.1

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