エレキジャック Web版 マイコン・カーを製作してみよう<17> カメラで撮影した画像をパソコンに表示するためのプログラムです。http://www.eleki-jack.com/arm/2012/08/17.html パソコン用のプログラムはC1098View.exeです。詳しくはエレキジャックのページを参照ください。
Dependencies: CameraC1098 TextLCD mbed
C1098シリアルカメラをmbedで制御しています。mbedからPCへ送った画像データをC1098View.exeで表示したものです。
詳しくはエレキジャックのページを参照ください。 マイコン・カーを製作してみよう(16) http://www.eleki-jack.com/arm/2012/08/16.html マイコン・カーを製作してみよう(17) http://www.eleki-jack.com/arm/2012/08/17.html
main.cpp@0:985e1f891b2e, 2012-09-03 (annotated)
- Committer:
- sunifu
- Date:
- Mon Sep 03 14:29:41 2012 +0000
- Revision:
- 0:985e1f891b2e
V1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sunifu | 0:985e1f891b2e | 1 | #include "mbed.h" |
sunifu | 0:985e1f891b2e | 2 | #include "CameraC1098.h" |
sunifu | 0:985e1f891b2e | 3 | #include "TextLCD.h" |
sunifu | 0:985e1f891b2e | 4 | |
sunifu | 0:985e1f891b2e | 5 | static char buf[256+1]; |
sunifu | 0:985e1f891b2e | 6 | |
sunifu | 0:985e1f891b2e | 7 | TextLCD lcd(p24, p26, p27, p28, p29, p30); |
sunifu | 0:985e1f891b2e | 8 | CameraC1098 camera(p9, p10); |
sunifu | 0:985e1f891b2e | 9 | Serial pc(p13,p14); |
sunifu | 0:985e1f891b2e | 10 | |
sunifu | 0:985e1f891b2e | 11 | /** |
sunifu | 0:985e1f891b2e | 12 | * A callback function for jpeg images. |
sunifu | 0:985e1f891b2e | 13 | * You can block this function until saving the image datas. |
sunifu | 0:985e1f891b2e | 14 | * |
sunifu | 0:985e1f891b2e | 15 | * @param buf A pointer to the image buffer. |
sunifu | 0:985e1f891b2e | 16 | * @param siz A size of the image buffer. |
sunifu | 0:985e1f891b2e | 17 | */ |
sunifu | 0:985e1f891b2e | 18 | void jpeg_callback(char *buf, size_t siz) { |
sunifu | 0:985e1f891b2e | 19 | for (int i = 0; i < (int)siz; i++) { |
sunifu | 0:985e1f891b2e | 20 | pc.putc(buf[i]); |
sunifu | 0:985e1f891b2e | 21 | } |
sunifu | 0:985e1f891b2e | 22 | } |
sunifu | 0:985e1f891b2e | 23 | |
sunifu | 0:985e1f891b2e | 24 | /** |
sunifu | 0:985e1f891b2e | 25 | * Synchronizing. |
sunifu | 0:985e1f891b2e | 26 | */ |
sunifu | 0:985e1f891b2e | 27 | void sync(void) { |
sunifu | 0:985e1f891b2e | 28 | CameraC1098::ErrorNumber err = CameraC1098::NoError; |
sunifu | 0:985e1f891b2e | 29 | |
sunifu | 0:985e1f891b2e | 30 | err = camera.sync(); |
sunifu | 0:985e1f891b2e | 31 | lcd.locate(0,0); |
sunifu | 0:985e1f891b2e | 32 | if (CameraC1098::NoError == err) { |
sunifu | 0:985e1f891b2e | 33 | printf("[ OK ] : CameraC1098::sync\r\n"); |
sunifu | 0:985e1f891b2e | 34 | lcd.printf("C1098:Sync [OK] "); |
sunifu | 0:985e1f891b2e | 35 | |
sunifu | 0:985e1f891b2e | 36 | } else { |
sunifu | 0:985e1f891b2e | 37 | printf("[FAIL] : CameraC1098::sync (Error=%02X)\r\n", (int)err); |
sunifu | 0:985e1f891b2e | 38 | lcd.printf("C1098:Sync[FAIL]"); |
sunifu | 0:985e1f891b2e | 39 | } |
sunifu | 0:985e1f891b2e | 40 | } |
sunifu | 0:985e1f891b2e | 41 | |
sunifu | 0:985e1f891b2e | 42 | |
sunifu | 0:985e1f891b2e | 43 | /** |
sunifu | 0:985e1f891b2e | 44 | * A test function for jpeg snapshot picture. |
sunifu | 0:985e1f891b2e | 45 | */ |
sunifu | 0:985e1f891b2e | 46 | void test_jpeg_snapshot_picture() { |
sunifu | 0:985e1f891b2e | 47 | CameraC1098::ErrorNumber err = CameraC1098::NoError; |
sunifu | 0:985e1f891b2e | 48 | |
sunifu | 0:985e1f891b2e | 49 | err = camera.getJpegSnapshotPicture(jpeg_callback); |
sunifu | 0:985e1f891b2e | 50 | lcd.locate(0,1); |
sunifu | 0:985e1f891b2e | 51 | if (CameraC1098::NoError == err) { |
sunifu | 0:985e1f891b2e | 52 | printf("[ OK ] : CameraC1098::getJpegSnapshotPicture\r\n"); |
sunifu | 0:985e1f891b2e | 53 | lcd.printf("getJpgPict [OK] "); |
sunifu | 0:985e1f891b2e | 54 | } else { |
sunifu | 0:985e1f891b2e | 55 | printf("[FAIL] : CameraC1098::getJpegSnapshotPicture (Error=%02X)\r\n", (int)err); |
sunifu | 0:985e1f891b2e | 56 | lcd.printf("getJpgPict[FAIL]"); |
sunifu | 0:985e1f891b2e | 57 | } |
sunifu | 0:985e1f891b2e | 58 | } |
sunifu | 0:985e1f891b2e | 59 | |
sunifu | 0:985e1f891b2e | 60 | /** |
sunifu | 0:985e1f891b2e | 61 | * A entry point. |
sunifu | 0:985e1f891b2e | 62 | */ |
sunifu | 0:985e1f891b2e | 63 | int main() { |
sunifu | 0:985e1f891b2e | 64 | printf("\r\n"); |
sunifu | 0:985e1f891b2e | 65 | printf("==========\r\n"); |
sunifu | 0:985e1f891b2e | 66 | printf("CameraC1098\r\n"); |
sunifu | 0:985e1f891b2e | 67 | printf("==========\r\n"); |
sunifu | 0:985e1f891b2e | 68 | CameraC1098::ErrorNumber err = CameraC1098::NoError; |
sunifu | 0:985e1f891b2e | 69 | err = camera.init(CameraC1098::Baud460800, CameraC1098::JpegResolution320x240); |
sunifu | 0:985e1f891b2e | 70 | camera.setmbedBaud( CameraC1098::Baud460800 ); |
sunifu | 0:985e1f891b2e | 71 | pc.baud(460800); |
sunifu | 0:985e1f891b2e | 72 | |
sunifu | 0:985e1f891b2e | 73 | lcd.cls(); |
sunifu | 0:985e1f891b2e | 74 | lcd.locate(0,0); |
sunifu | 0:985e1f891b2e | 75 | if (CameraC1098::NoError == err) { |
sunifu | 0:985e1f891b2e | 76 | printf("[ OK ] : CameraC1098::init\r\n"); |
sunifu | 0:985e1f891b2e | 77 | lcd.printf("C1098:init [OK] "); |
sunifu | 0:985e1f891b2e | 78 | } else { |
sunifu | 0:985e1f891b2e | 79 | printf("[FAIL] : CameraC1098::init (Error=%02X)\r\n", (int)err); |
sunifu | 0:985e1f891b2e | 80 | lcd.printf("C1098:init[FAIL]"); |
sunifu | 0:985e1f891b2e | 81 | } |
sunifu | 0:985e1f891b2e | 82 | sync(); |
sunifu | 0:985e1f891b2e | 83 | |
sunifu | 0:985e1f891b2e | 84 | while(1){ |
sunifu | 0:985e1f891b2e | 85 | test_jpeg_snapshot_picture(); |
sunifu | 0:985e1f891b2e | 86 | } |
sunifu | 0:985e1f891b2e | 87 | return 0; |
sunifu | 0:985e1f891b2e | 88 | } |