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

Dependencies:   TextLCD mbed

Committer:
sunifu
Date:
Thu Oct 11 14:11:54 2012 +0000
Revision:
7:1a0580ace499
Parent:
6:2ce8f719d84d
ver1.0

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 6:2ce8f719d84d 18 #include "TextLCD.h"
sunifu 0:6eaa311b9d3b 19
sunifu 0:6eaa311b9d3b 20 /*
sunifu 0:6eaa311b9d3b 21 * Definitions.
sunifu 0:6eaa311b9d3b 22 */
sunifu 6:2ce8f719d84d 23 TextLCD lcd(p24, p26, p27, p28, p29, p30);
sunifu 6:2ce8f719d84d 24 CameraC1098 camera(p9, p10);
sunifu 0:6eaa311b9d3b 25
sunifu 0:6eaa311b9d3b 26 /*
sunifu 0:6eaa311b9d3b 27 * Variables.
sunifu 0:6eaa311b9d3b 28 */
sunifu 6:2ce8f719d84d 29 PwmOut steering(p25) ;
sunifu 6:2ce8f719d84d 30 PwmOut speed_in1(p22) ;
sunifu 6:2ce8f719d84d 31 PwmOut speed_in2(p23) ;
sunifu 6:2ce8f719d84d 32 Serial pc(p13,p14);
sunifu 0:6eaa311b9d3b 33
sunifu 6:2ce8f719d84d 34 static char buf[256+1];
sunifu 6:2ce8f719d84d 35 volatile char steer;
sunifu 0:6eaa311b9d3b 36
sunifu 0:6eaa311b9d3b 37 /**
sunifu 0:6eaa311b9d3b 38 * A callback function for jpeg images.
sunifu 0:6eaa311b9d3b 39 * You can block this function until saving the image datas.
sunifu 0:6eaa311b9d3b 40 *
sunifu 0:6eaa311b9d3b 41 * @param buf A pointer to the image buffer.
sunifu 0:6eaa311b9d3b 42 * @param siz A size of the image buffer.
sunifu 0:6eaa311b9d3b 43 */
sunifu 0:6eaa311b9d3b 44 void jpeg_callback(char *buf, size_t siz) {
sunifu 0:6eaa311b9d3b 45 for (int i = 0; i < (int)siz; i++) {
sunifu 6:2ce8f719d84d 46 pc.putc(buf[i]) ;
sunifu 0:6eaa311b9d3b 47 }
sunifu 0:6eaa311b9d3b 48 }
sunifu 0:6eaa311b9d3b 49
sunifu 0:6eaa311b9d3b 50 /**
sunifu 0:6eaa311b9d3b 51 * Synchronizing.
sunifu 0:6eaa311b9d3b 52 */
sunifu 0:6eaa311b9d3b 53 void sync(void) {
sunifu 0:6eaa311b9d3b 54 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 0:6eaa311b9d3b 55
sunifu 0:6eaa311b9d3b 56 err = camera.sync();
sunifu 6:2ce8f719d84d 57 lcd.locate(0,0);
sunifu 0:6eaa311b9d3b 58 if (CameraC1098::NoError == err) {
sunifu 0:6eaa311b9d3b 59 printf("[ OK ] : CameraC1098::sync\r\n");
sunifu 6:2ce8f719d84d 60 lcd.printf("Camera Sync [OK]");
sunifu 0:6eaa311b9d3b 61 } else {
sunifu 0:6eaa311b9d3b 62 printf("[FAIL] : CameraC1098::sync (Error=%02X)\r\n", (int)err);
sunifu 6:2ce8f719d84d 63 lcd.printf("Camera init [NG]");
sunifu 0:6eaa311b9d3b 64 }
sunifu 0:6eaa311b9d3b 65 }
sunifu 0:6eaa311b9d3b 66
sunifu 0:6eaa311b9d3b 67
sunifu 0:6eaa311b9d3b 68 /**
sunifu 0:6eaa311b9d3b 69 * A test function for jpeg snapshot picture.
sunifu 0:6eaa311b9d3b 70 */
sunifu 0:6eaa311b9d3b 71 void test_jpeg_snapshot_picture(void) {
sunifu 0:6eaa311b9d3b 72 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 6:2ce8f719d84d 73
sunifu 6:2ce8f719d84d 74 err = camera.getJpegSnapshotPicture(jpeg_callback);
sunifu 0:6eaa311b9d3b 75
sunifu 6:2ce8f719d84d 76 lcd.locate(0,0);
sunifu 6:2ce8f719d84d 77 if (CameraC1098::NoError == err) {
sunifu 6:2ce8f719d84d 78 printf("[ OK ] : CameraC1098::getJpegSnapshotPicture\r\n");
sunifu 6:2ce8f719d84d 79 lcd.printf("Camera send [OK]");
sunifu 6:2ce8f719d84d 80 } else {
sunifu 6:2ce8f719d84d 81 printf("[FAIL] : CameraC1098::getJpegSnapshotPicture (Error=%02X)\r\n", (int)err);
sunifu 6:2ce8f719d84d 82 lcd.printf("Camera send [NG]");
sunifu 0:6eaa311b9d3b 83 }
sunifu 0:6eaa311b9d3b 84 }
sunifu 0:6eaa311b9d3b 85
sunifu 6:2ce8f719d84d 86 void rxFunc(){
sunifu 6:2ce8f719d84d 87 steer = pc.getc();
sunifu 6:2ce8f719d84d 88 }
sunifu 6:2ce8f719d84d 89
sunifu 0:6eaa311b9d3b 90 int main() {
sunifu 6:2ce8f719d84d 91 float sp1, sp2;
sunifu 6:2ce8f719d84d 92 int st;
sunifu 6:2ce8f719d84d 93
sunifu 6:2ce8f719d84d 94 wait(2.0) ;
sunifu 6:2ce8f719d84d 95 pc.attach(&rxFunc,Serial::RxIrq);
sunifu 6:2ce8f719d84d 96
sunifu 0:6eaa311b9d3b 97 printf("\r\n");
sunifu 2:9758930faa7e 98 printf("==========\r\n");
sunifu 0:6eaa311b9d3b 99 printf("CameraC1098\r\n");
sunifu 0:6eaa311b9d3b 100 printf("==========\r\n");
sunifu 0:6eaa311b9d3b 101 CameraC1098::ErrorNumber err = CameraC1098::NoError;
sunifu 6:2ce8f719d84d 102 err = camera.init(CameraC1098::Baud115200, CameraC1098::JpegResolution160x128);
sunifu 6:2ce8f719d84d 103 camera.setmbedBaud( CameraC1098::Baud115200 );
sunifu 6:2ce8f719d84d 104 pc.baud(115200);
sunifu 6:2ce8f719d84d 105
sunifu 6:2ce8f719d84d 106
sunifu 6:2ce8f719d84d 107 lcd.locate(0,0);
sunifu 0:6eaa311b9d3b 108 if (CameraC1098::NoError == err) {
sunifu 5:7f85cf99d0f6 109 printf("[ OK ] : CameraC1098::init\r\n") ;
sunifu 6:2ce8f719d84d 110 lcd.printf("Camera init [OK]");
sunifu 0:6eaa311b9d3b 111 } else {
sunifu 5:7f85cf99d0f6 112 printf("[FAIL] : CameraC1098::init (Error=%02X)\r\n", (int)err) ;
sunifu 6:2ce8f719d84d 113 lcd.printf("Camera init[NG]");
sunifu 6:2ce8f719d84d 114 exit(-1);
sunifu 0:6eaa311b9d3b 115 }
sunifu 4:887ced27d5d6 116 //
sunifu 6:2ce8f719d84d 117 sync();
sunifu 6:2ce8f719d84d 118
sunifu 6:2ce8f719d84d 119 steering.period(0.020);
sunifu 6:2ce8f719d84d 120 speed_in1.period(0.1) ;
sunifu 6:2ce8f719d84d 121 speed_in2.period(0.1) ;
sunifu 6:2ce8f719d84d 122
sunifu 6:2ce8f719d84d 123 while(1){
sunifu 0:6eaa311b9d3b 124
sunifu 6:2ce8f719d84d 125 lcd.locate(0,1);
sunifu 6:2ce8f719d84d 126 switch(steer){
sunifu 6:2ce8f719d84d 127 case 'S':
sunifu 6:2ce8f719d84d 128 lcd.printf("pictshort ");
sunifu 6:2ce8f719d84d 129 test_jpeg_snapshot_picture();
sunifu 6:2ce8f719d84d 130 break;
sunifu 6:2ce8f719d84d 131 case '0':
sunifu 6:2ce8f719d84d 132 lcd.printf(" ");
sunifu 6:2ce8f719d84d 133 st = 1500;
sunifu 6:2ce8f719d84d 134 sp1 = 0.0f ;
sunifu 6:2ce8f719d84d 135 sp2 = 0.0f ;
sunifu 6:2ce8f719d84d 136 break;
sunifu 6:2ce8f719d84d 137 case '1':
sunifu 6:2ce8f719d84d 138 lcd.printf("FORWARD ");
sunifu 6:2ce8f719d84d 139 st = 1500;
sunifu 6:2ce8f719d84d 140 sp1 = 0.7f ;
sunifu 6:2ce8f719d84d 141 sp2 = 0.0f ;
sunifu 6:2ce8f719d84d 142 break;
sunifu 6:2ce8f719d84d 143 case '2':
sunifu 6:2ce8f719d84d 144 lcd.printf("BACK ");
sunifu 6:2ce8f719d84d 145 st = 1500;
sunifu 6:2ce8f719d84d 146 sp1 = 0.0f ;
sunifu 6:2ce8f719d84d 147 sp2 = 0.7f ;
sunifu 6:2ce8f719d84d 148 break;
sunifu 6:2ce8f719d84d 149 case '6':
sunifu 6:2ce8f719d84d 150 lcd.printf("FORWARD+LEFT ");
sunifu 6:2ce8f719d84d 151 st = 1200;
sunifu 6:2ce8f719d84d 152 sp1 = 0.7f ;
sunifu 6:2ce8f719d84d 153 sp2 = 0.0f ;
sunifu 6:2ce8f719d84d 154 break;
sunifu 6:2ce8f719d84d 155 case '7':
sunifu 6:2ce8f719d84d 156 lcd.printf("FORWARD+RIGHT ");
sunifu 6:2ce8f719d84d 157 st = 1800;
sunifu 6:2ce8f719d84d 158 sp1 = 0.7f ;
sunifu 6:2ce8f719d84d 159 sp2 = 0.0f ;
sunifu 6:2ce8f719d84d 160 break;
sunifu 6:2ce8f719d84d 161 case 'A':
sunifu 6:2ce8f719d84d 162 lcd.printf("BACK+LEFT ");
sunifu 6:2ce8f719d84d 163 st = 1200;
sunifu 6:2ce8f719d84d 164 sp1 = 0.0f ;
sunifu 6:2ce8f719d84d 165 sp2 = 0.7f ;
sunifu 6:2ce8f719d84d 166 break;
sunifu 6:2ce8f719d84d 167 case 'B':
sunifu 6:2ce8f719d84d 168 lcd.printf("BACK+RIGHT ");
sunifu 6:2ce8f719d84d 169 st = 1800;
sunifu 6:2ce8f719d84d 170 sp1 = 0.0f ;
sunifu 6:2ce8f719d84d 171 sp2 = 0.7f ;
sunifu 6:2ce8f719d84d 172 break;
sunifu 6:2ce8f719d84d 173 case 'F':
sunifu 6:2ce8f719d84d 174 lcd.printf("STOP ");
sunifu 6:2ce8f719d84d 175 st = 1500;
sunifu 6:2ce8f719d84d 176 sp1 = 0.0 ;
sunifu 6:2ce8f719d84d 177 sp2 = 0.0 ;
sunifu 6:2ce8f719d84d 178 break;
sunifu 6:2ce8f719d84d 179 default:
sunifu 6:2ce8f719d84d 180 lcd.printf(" ");
sunifu 6:2ce8f719d84d 181 st = 1500;
sunifu 6:2ce8f719d84d 182 sp1 = 0.0 ;
sunifu 6:2ce8f719d84d 183 sp2 = 0.0 ;
sunifu 6:2ce8f719d84d 184 }
sunifu 6:2ce8f719d84d 185 steering.pulsewidth_us(st);
sunifu 6:2ce8f719d84d 186 speed_in1.write(sp1) ;
sunifu 6:2ce8f719d84d 187 speed_in2.write(sp2) ;
sunifu 6:2ce8f719d84d 188 }
sunifu 6:2ce8f719d84d 189
sunifu 0:6eaa311b9d3b 190 }