Tadao Iida / Mbed 2 deprecated miconcarctrl

Dependencies:   TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /**
00002  * Test program.
00003  *
00004  * CameraC328Library
00005  * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
00006  * http://shinta.main.jp/
00007  *
00008  * CameraC1098-SS Library
00009  * Copyright (C) 2012 Tadao Iida
00010  */
00011 
00012 /*
00013  * Include files.
00014  */
00015 
00016 #include "mbed.h"
00017 #include "CameraC1098.h"
00018 #include "TextLCD.h"
00019 
00020 /*
00021  * Definitions.
00022  */
00023 TextLCD lcd(p24, p26, p27, p28, p29, p30);
00024 CameraC1098 camera(p9, p10);
00025 
00026 /*
00027  * Variables.
00028  */
00029 PwmOut steering(p25) ;
00030 PwmOut speed_in1(p22) ;
00031 PwmOut speed_in2(p23) ;
00032 Serial pc(p13,p14);
00033 
00034 static char buf[256+1];
00035 volatile char steer;
00036 
00037 /**
00038  * A callback function for jpeg images.
00039  * You can block this function until saving the image datas.
00040  *
00041  * @param buf A pointer to the image buffer.
00042  * @param siz A size of the image buffer.
00043  */
00044 void jpeg_callback(char *buf, size_t siz) {
00045     for (int i = 0; i < (int)siz; i++) {
00046         pc.putc(buf[i]) ;
00047     }
00048 }
00049 
00050 /**
00051  * Synchronizing.
00052  */
00053 void sync(void) {
00054     CameraC1098::ErrorNumber err = CameraC1098::NoError;
00055 
00056     err = camera.sync();
00057     lcd.locate(0,0);
00058     if (CameraC1098::NoError == err) {
00059         printf("[ OK ] : CameraC1098::sync\r\n");
00060         lcd.printf("Camera Sync [OK]");
00061     } else {
00062         printf("[FAIL] : CameraC1098::sync (Error=%02X)\r\n", (int)err);
00063         lcd.printf("Camera init [NG]");
00064     }
00065 }
00066 
00067 
00068 /**
00069  * A test function for jpeg snapshot picture.
00070  */
00071 void test_jpeg_snapshot_picture(void) {
00072     CameraC1098::ErrorNumber err = CameraC1098::NoError; 
00073     
00074     err = camera.getJpegSnapshotPicture(jpeg_callback);
00075 
00076     lcd.locate(0,0);        
00077     if (CameraC1098::NoError == err) {
00078         printf("[ OK ] : CameraC1098::getJpegSnapshotPicture\r\n");
00079         lcd.printf("Camera send [OK]");
00080     } else {
00081         printf("[FAIL] : CameraC1098::getJpegSnapshotPicture (Error=%02X)\r\n", (int)err);
00082         lcd.printf("Camera send [NG]");
00083     }
00084 }
00085 
00086 void  rxFunc(){
00087     steer = pc.getc();
00088 }
00089 
00090 int main() {
00091     float sp1, sp2;
00092     int st;
00093     
00094     wait(2.0) ;
00095     pc.attach(&rxFunc,Serial::RxIrq);
00096     
00097     printf("\r\n");
00098     printf("==========\r\n"); 
00099     printf("CameraC1098\r\n");
00100     printf("==========\r\n");
00101     CameraC1098::ErrorNumber err = CameraC1098::NoError;
00102     err = camera.init(CameraC1098::Baud115200, CameraC1098::JpegResolution160x128);
00103     camera.setmbedBaud( CameraC1098::Baud115200 );
00104     pc.baud(115200);
00105     
00106     
00107     lcd.locate(0,0);
00108     if (CameraC1098::NoError == err) {
00109         printf("[ OK ] : CameraC1098::init\r\n") ;
00110         lcd.printf("Camera init [OK]");
00111     } else {
00112         printf("[FAIL] : CameraC1098::init (Error=%02X)\r\n", (int)err) ;
00113         lcd.printf("Camera init[NG]");
00114         exit(-1);
00115     }
00116     // 
00117     sync(); 
00118     
00119     steering.period(0.020);
00120     speed_in1.period(0.1) ;
00121     speed_in2.period(0.1) ;
00122     
00123     while(1){
00124     
00125         lcd.locate(0,1);
00126         switch(steer){
00127             case 'S':
00128                 lcd.printf("pictshort       ");
00129                 test_jpeg_snapshot_picture();
00130                 break;                    
00131             case '0':
00132                 lcd.printf("                ");
00133                 st = 1500;
00134                 sp1 = 0.0f ;
00135                 sp2 = 0.0f ; 
00136                 break;
00137             case '1':
00138                 lcd.printf("FORWARD         ");   
00139                 st = 1500;
00140                 sp1 = 0.7f ;
00141                 sp2 = 0.0f ; 
00142                 break;
00143             case '2':
00144                 lcd.printf("BACK            ");
00145                 st = 1500;
00146                 sp1 = 0.0f ;
00147                 sp2 = 0.7f ;
00148                 break;   
00149             case '6':
00150                 lcd.printf("FORWARD+LEFT    ");
00151                 st = 1200;
00152                 sp1 = 0.7f ;
00153                 sp2 = 0.0f ;
00154                 break;   
00155             case '7':
00156                 lcd.printf("FORWARD+RIGHT   ");
00157                 st = 1800;
00158                 sp1 = 0.7f ;
00159                 sp2 = 0.0f ;
00160                 break;   
00161             case 'A':
00162                 lcd.printf("BACK+LEFT       ");
00163                 st = 1200;
00164                 sp1 = 0.0f ;
00165                 sp2 = 0.7f ;
00166                 break;   
00167             case 'B':
00168                 lcd.printf("BACK+RIGHT      ");
00169                 st = 1800;
00170                 sp1 = 0.0f ;
00171                 sp2 = 0.7f ;
00172                 break;                                                                   
00173             case 'F':
00174                 lcd.printf("STOP            ");  
00175                 st = 1500;
00176                 sp1 = 0.0 ;
00177                 sp2 = 0.0 ;
00178             break;
00179             default:
00180                 lcd.printf("                ");
00181                 st = 1500;
00182                 sp1 = 0.0 ;
00183                 sp2 = 0.0 ;
00184         }   
00185         steering.pulsewidth_us(st);
00186         speed_in1.write(sp1) ;
00187         speed_in2.write(sp2) ;   
00188     }
00189                 
00190 }