Tedd OKANO / Mbed 2 deprecated MARY_CAMERA_Hello

Dependencies:   MARY_CAMERA NokiaLCD mbed

Committer:
okano
Date:
Thu Mar 13 04:44:50 2014 +0000
Revision:
28:ef40d40b5d39
Parent:
27:625e40d60c7b
Child:
29:a026f42d0498
Child:
30:eaab2c4bbe22
test code for contouring problem

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:1062142e5718 1 #include "mbed.h"
okano 0:1062142e5718 2 #include "MARMEX_OB_oled.h"
okano 4:5e1828a8e238 3 #include "MARY_CAMERA.h"
okano 3:152362acd181 4
okano 23:8471197d3096 5 #if defined( TARGET_MBED_LPC1768 ) || defined( TARGET_LPC11U24_401 ) || defined( TARGET_LPC11XX )
okano 4:5e1828a8e238 6 MARMEX_OB_oled oled1( p5, p7, p20, p16, p15 ); // mosi, sclk, cs, rst, power_control -- maple-mini-type-b-slot1
okano 6:f5b4e088087b 7 MARY_CAMERA camera( p5, p6, p7, p22, p26, p28, p27 ); // mosi, miso, sclk, cs, reset, I2C_SDA, I2C_SCL
okano 16:fa1bd83e34b0 8 #endif
okano 16:fa1bd83e34b0 9
okano 16:fa1bd83e34b0 10 #if defined( TARGET_LPC11U35_401 )
okano 16:fa1bd83e34b0 11 MARMEX_OB_oled oled1( P0_9, P0_10, P0_16, P0_12, P0_11 ); // mosi, sclk, cs, rst, power_control -- maple-mini-type-b-slot1
okano 16:fa1bd83e34b0 12 MARY_CAMERA camera( P0_9, P0_8, P0_10, P0_2, P1_15, P0_5, P0_4 ); // mosi, miso, sclk, cs, reset, I2C_SDA, I2C_SCL
okano 16:fa1bd83e34b0 13 #endif
okano 16:fa1bd83e34b0 14
okano 23:8471197d3096 15 BusOut led( LED4, LED3, LED2, LED1 );
okano 1:ce27bc7b44d4 16
okano 26:4e4f954a2e2a 17 void test_camera_QCIF_video_with_colorbar( void );
okano 26:4e4f954a2e2a 18 void test_camera_resolution_change( void );
okano 26:4e4f954a2e2a 19
okano 23:8471197d3096 20 void copy_image_to_oled( void );
okano 9:68408189efde 21 void line_mirroring( short *buf );
okano 10:3c8fc9569377 22 void save_still_image( char *file_name );
okano 16:fa1bd83e34b0 23 void oled_test_screen( void );
okano 28:ef40d40b5d39 24 void capture_to_bmp( void );
okano 0:1062142e5718 25
okano 28:ef40d40b5d39 26 //#define SAVE_EACH_SIZES_OF_STILL_IMAGE
okano 28:ef40d40b5d39 27 int read_order_change = 0;
okano 23:8471197d3096 28
okano 0:1062142e5718 29 int main()
okano 0:1062142e5718 30 {
okano 28:ef40d40b5d39 31 printf( "\r\n\r\nMARY-CAMERA test program\r\n\r\n" );
okano 28:ef40d40b5d39 32
okano 6:f5b4e088087b 33 led = 0x3;
okano 6:f5b4e088087b 34
okano 1:ce27bc7b44d4 35 oled1.cls();
okano 16:fa1bd83e34b0 36 oled_test_screen();
okano 1:ce27bc7b44d4 37
okano 23:8471197d3096 38 #if defined( TARGET_MBED_LPC1768 )
okano 23:8471197d3096 39
okano 26:4e4f954a2e2a 40 #ifdef SAVE_EACH_SIZES_OF_STILL_IMAGE
okano 23:8471197d3096 41 led = 0x1;
okano 26:4e4f954a2e2a 42 camera.resolution( MARY_CAMERA::QCIF );
okano 23:8471197d3096 43 save_still_image( "i_qcif.bmp" );
okano 23:8471197d3096 44
okano 23:8471197d3096 45 led = 0x2;
okano 26:4e4f954a2e2a 46 camera.resolution( MARY_CAMERA::QQVGA );
okano 23:8471197d3096 47 save_still_image( "i_qqvga.bmp" );
okano 0:1062142e5718 48
okano 23:8471197d3096 49 led = 0x4;
okano 26:4e4f954a2e2a 50 camera.resolution( MARY_CAMERA::QVGA );
okano 23:8471197d3096 51 save_still_image( "i_qvga.bmp" );
okano 23:8471197d3096 52
okano 23:8471197d3096 53 led = 0x8;
okano 26:4e4f954a2e2a 54 camera.resolution( MARY_CAMERA::VGA );
okano 23:8471197d3096 55 save_still_image( "i_vga.bmp" );
okano 23:8471197d3096 56
okano 26:4e4f954a2e2a 57 camera.resolution( MARY_CAMERA::QCIF );
okano 23:8471197d3096 58 #endif
okano 23:8471197d3096 59
okano 12:6ddd07d59c55 60 #endif
okano 28:ef40d40b5d39 61 printf( " camera operation started\r\n" );
okano 28:ef40d40b5d39 62 printf( " hit key [c] for saving data into BMP\r\n" );
okano 28:ef40d40b5d39 63 printf( " hit key [o] to change data reading order\r\n" );
okano 28:ef40d40b5d39 64 printf( " hit key [1], [2], [3] or [4] to change resolution QCIF, QQVGA, QVGA, VGA\r\n" );
okano 10:3c8fc9569377 65
okano 28:ef40d40b5d39 66 test_camera_QCIF_video_with_colorbar(); // doesn't return
okano 28:ef40d40b5d39 67 // test_camera_resolution_change(); // doesn't return
okano 26:4e4f954a2e2a 68 }
okano 26:4e4f954a2e2a 69
okano 28:ef40d40b5d39 70 Serial pc(USBTX, USBRX); // tx, rx
okano 26:4e4f954a2e2a 71
okano 26:4e4f954a2e2a 72 void test_camera_QCIF_video_with_colorbar( void )
okano 26:4e4f954a2e2a 73 {
okano 24:c74b706c25d6 74 int count = 0;
okano 24:c74b706c25d6 75
okano 0:1062142e5718 76 while ( 1 ) {
okano 28:ef40d40b5d39 77
okano 28:ef40d40b5d39 78 if ( pc.readable() ) {
okano 28:ef40d40b5d39 79 switch ( pc.getc() ) {
okano 28:ef40d40b5d39 80 case 'c' :
okano 28:ef40d40b5d39 81 capture_to_bmp();
okano 28:ef40d40b5d39 82 printf( " [c] : capture started\r\n" );
okano 28:ef40d40b5d39 83 break;
okano 28:ef40d40b5d39 84 case 'o' :
okano 28:ef40d40b5d39 85 read_order_change = read_order_change ? 0 : 1;
okano 28:ef40d40b5d39 86 printf( " [o] read order change : %s\r\n", read_order_change ? "ENABLED" : "DISABLED" );
okano 28:ef40d40b5d39 87 break;
okano 28:ef40d40b5d39 88 case '1' :
okano 28:ef40d40b5d39 89 printf( " [1] resolution change : QCIF\r\n" );
okano 28:ef40d40b5d39 90 camera.resolution( MARY_CAMERA::QCIF );
okano 28:ef40d40b5d39 91 break;
okano 28:ef40d40b5d39 92 case '2' :
okano 28:ef40d40b5d39 93 printf( " [1] resolution change : QQVGA\r\n" );
okano 28:ef40d40b5d39 94 camera.resolution( MARY_CAMERA::QQVGA );
okano 28:ef40d40b5d39 95 break;
okano 28:ef40d40b5d39 96 case '3' :
okano 28:ef40d40b5d39 97 printf( " [1] resolution change : QVGA\r\n" );
okano 28:ef40d40b5d39 98 camera.resolution( MARY_CAMERA::QVGA );
okano 28:ef40d40b5d39 99 break;
okano 28:ef40d40b5d39 100 case '4' :
okano 28:ef40d40b5d39 101 printf( " [1] resolution change : VGA\r\n" );
okano 28:ef40d40b5d39 102 camera.resolution( MARY_CAMERA::VGA );
okano 28:ef40d40b5d39 103 break;
okano 28:ef40d40b5d39 104 }
okano 28:ef40d40b5d39 105 }
okano 28:ef40d40b5d39 106
okano 28:ef40d40b5d39 107
okano 7:380026dd09fd 108 led = 0x1;
okano 23:8471197d3096 109 copy_image_to_oled();
okano 28:ef40d40b5d39 110 // camera.colorbar( ((count++ >> 2) & 0x1) ? MARY_CAMERA::ON : MARY_CAMERA::OFF );
okano 26:4e4f954a2e2a 111 led = 0x2;
okano 26:4e4f954a2e2a 112 }
okano 26:4e4f954a2e2a 113 }
okano 24:c74b706c25d6 114
okano 26:4e4f954a2e2a 115
okano 26:4e4f954a2e2a 116 void test_camera_resolution_change( void )
okano 26:4e4f954a2e2a 117 {
okano 26:4e4f954a2e2a 118 int count = (3 << 3);
okano 26:4e4f954a2e2a 119 int setting;
okano 26:4e4f954a2e2a 120
okano 26:4e4f954a2e2a 121 while ( 1 ) {
okano 24:c74b706c25d6 122
okano 26:4e4f954a2e2a 123 if ( !(count & 0x7) ) {
okano 26:4e4f954a2e2a 124 setting = (count >> 3) & 0x3;
okano 26:4e4f954a2e2a 125 camera.resolution( (MARY_CAMERA::CameraResolution)(setting + 1) );
okano 26:4e4f954a2e2a 126 led = 0x1 << setting;
okano 26:4e4f954a2e2a 127 }
okano 28:ef40d40b5d39 128
okano 26:4e4f954a2e2a 129 count++;
okano 26:4e4f954a2e2a 130
okano 26:4e4f954a2e2a 131 copy_image_to_oled();
okano 0:1062142e5718 132 }
okano 0:1062142e5718 133 }
okano 6:f5b4e088087b 134
okano 9:68408189efde 135
okano 23:8471197d3096 136 void copy_image_to_oled( void )
okano 23:8471197d3096 137 {
okano 23:8471197d3096 138 short buf[ MARMEX_OB_oled::WIDTH ];
okano 23:8471197d3096 139
okano 23:8471197d3096 140 camera.open_transfer();
okano 23:8471197d3096 141
okano 23:8471197d3096 142 for ( int line = 0; line < MARMEX_OB_oled::HEIGHT; line++ ) {
okano 26:4e4f954a2e2a 143 camera.transfer_a_line( buf, line + (camera.vertical_size() - (int)MARMEX_OB_oled::HEIGHT) / 2, (camera.horizontal_size() - (int)MARMEX_OB_oled::WIDTH ) / 2, MARMEX_OB_oled::WIDTH );
okano 23:8471197d3096 144 line_mirroring( buf );
okano 23:8471197d3096 145 oled1.blit565( 0, line, MARMEX_OB_oled::WIDTH, 1, buf );
okano 23:8471197d3096 146 }
okano 23:8471197d3096 147
okano 23:8471197d3096 148 camera.close_transfer();
okano 23:8471197d3096 149 }
okano 23:8471197d3096 150
okano 23:8471197d3096 151
okano 9:68408189efde 152 void line_mirroring( short *buf )
okano 9:68408189efde 153 {
okano 9:68408189efde 154 short tmp;
okano 9:68408189efde 155
okano 9:68408189efde 156 for ( int i = 0; i < (MARMEX_OB_oled::WIDTH / 2); i++ ) {
okano 9:68408189efde 157 tmp = buf[ i ];
okano 9:68408189efde 158 buf[ i ] = buf[ (MARMEX_OB_oled::WIDTH - 1) - i ];
okano 9:68408189efde 159 buf[ (MARMEX_OB_oled::WIDTH - 1) - i ] = tmp;
okano 9:68408189efde 160 }
okano 10:3c8fc9569377 161 }
okano 10:3c8fc9569377 162
okano 10:3c8fc9569377 163
okano 16:fa1bd83e34b0 164 void oled_test_screen( void )
okano 16:fa1bd83e34b0 165 {
okano 16:fa1bd83e34b0 166 oled1.background( 0x000000 );
okano 16:fa1bd83e34b0 167 oled1.cls();
okano 16:fa1bd83e34b0 168
okano 16:fa1bd83e34b0 169 int colorbar_width = MARMEX_OB_oled::WIDTH / 8;
okano 16:fa1bd83e34b0 170
okano 16:fa1bd83e34b0 171 for ( int i = 0; i < 8; i++ )
okano 16:fa1bd83e34b0 172 oled1.fill( colorbar_width * i, 0, colorbar_width, MARMEX_OB_oled::HEIGHT, ((i & 0x4) ? 0xFF0000 : 0x000000) | ((i & 0x2) ? 0x00FF00 : 0x000000) | ((i & 0x1) ? 0x0000FF : 0x000000) );
okano 16:fa1bd83e34b0 173
okano 16:fa1bd83e34b0 174 oled1.fill( 50, 50, 64, 64, 0xCCCCCC );;
okano 16:fa1bd83e34b0 175
okano 16:fa1bd83e34b0 176 oled1.locate( 0, 2 );
okano 16:fa1bd83e34b0 177 oled1.printf( "MaryCemara test" );
okano 22:d5e24ab4afb7 178 oled1.locate( 0, 3 );
okano 22:d5e24ab4afb7 179 oled1.printf( "%s", (MARY_CAMERA::NO_ERROR == camera.ready()) ? "Camera is ready" : "No Camera found" );
okano 16:fa1bd83e34b0 180 oled1.locate( 0, 4 );
okano 22:d5e24ab4afb7 181 oled1.printf( "%s", "saving into BMP" );
okano 23:8471197d3096 182 oled1.locate( 0, 5 );
okano 23:8471197d3096 183 oled1.printf( "%d", camera.horizontal_size() );
okano 23:8471197d3096 184 oled1.locate( 0, 6 );
okano 23:8471197d3096 185 oled1.printf( "%d", camera.vertical_size() );
okano 23:8471197d3096 186
okano 16:fa1bd83e34b0 187
okano 21:a2ac746dd516 188 for (int i = 0; i < MARMEX_OB_oled::WIDTH; i++ )
okano 16:fa1bd83e34b0 189 oled1.pixel( i, 80 + sin( (float)i / 5.0 ) * 10, 0x000000 );
okano 21:a2ac746dd516 190 }
okano 21:a2ac746dd516 191
okano 21:a2ac746dd516 192
okano 10:3c8fc9569377 193 #include "bmp_handler.h"
okano 10:3c8fc9569377 194
okano 10:3c8fc9569377 195 void save_still_image( char *file_name )
okano 10:3c8fc9569377 196 {
okano 23:8471197d3096 197 short buf[ camera.horizontal_size() ];
okano 10:3c8fc9569377 198
okano 23:8471197d3096 199 if ( open_BMP( file_name, camera.horizontal_size(), camera.vertical_size() ) )
okano 10:3c8fc9569377 200 return;
okano 10:3c8fc9569377 201
okano 10:3c8fc9569377 202 camera.open_transfer();
okano 10:3c8fc9569377 203
okano 23:8471197d3096 204 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 23:8471197d3096 205 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 23:8471197d3096 206 write_BMP( buf, camera.horizontal_size() );
okano 10:3c8fc9569377 207 }
okano 10:3c8fc9569377 208 camera.close_transfer();
okano 11:149993faf2be 209
okano 10:3c8fc9569377 210 close_BMP();
okano 28:ef40d40b5d39 211 }
okano 28:ef40d40b5d39 212
okano 28:ef40d40b5d39 213 void capture_to_bmp( void )
okano 28:ef40d40b5d39 214 {
okano 28:ef40d40b5d39 215 short buf[ camera.horizontal_size() ];
okano 28:ef40d40b5d39 216 camera.open_transfer();
okano 28:ef40d40b5d39 217
okano 28:ef40d40b5d39 218 #if 0
okano 28:ef40d40b5d39 219 for ( int line = 0; line < MARMEX_OB_oled::HEIGHT; line++ ) {
okano 28:ef40d40b5d39 220 camera.transfer_a_line( buf, line + (camera.vertical_size() - (int)MARMEX_OB_oled::HEIGHT) / 2, (camera.horizontal_size() - (int)MARMEX_OB_oled::WIDTH ) / 2, MARMEX_OB_oled::WIDTH );
okano 28:ef40d40b5d39 221 line_mirroring( buf );
okano 28:ef40d40b5d39 222 oled1.blit565( 0, line, MARMEX_OB_oled::WIDTH, 1, buf );
okano 28:ef40d40b5d39 223 }
okano 28:ef40d40b5d39 224 #endif
okano 28:ef40d40b5d39 225
okano 28:ef40d40b5d39 226 if ( open_BMP( "RGB.bmp", camera.horizontal_size(), camera.vertical_size() ) )
okano 28:ef40d40b5d39 227 return;
okano 28:ef40d40b5d39 228
okano 28:ef40d40b5d39 229 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 28:ef40d40b5d39 230 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 28:ef40d40b5d39 231 write_BMP( buf, camera.horizontal_size(), 0x7 );
okano 28:ef40d40b5d39 232 }
okano 28:ef40d40b5d39 233
okano 28:ef40d40b5d39 234 close_BMP();
okano 28:ef40d40b5d39 235
okano 28:ef40d40b5d39 236 #if 0
okano 28:ef40d40b5d39 237
okano 28:ef40d40b5d39 238 if ( open_BMP( "R.bmp", camera.horizontal_size(), camera.vertical_size() ) )
okano 28:ef40d40b5d39 239 return;
okano 28:ef40d40b5d39 240
okano 28:ef40d40b5d39 241 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 28:ef40d40b5d39 242 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 28:ef40d40b5d39 243 write_BMP( buf, camera.horizontal_size(), 0x4 );
okano 28:ef40d40b5d39 244 }
okano 28:ef40d40b5d39 245
okano 28:ef40d40b5d39 246 close_BMP();
okano 28:ef40d40b5d39 247
okano 28:ef40d40b5d39 248
okano 28:ef40d40b5d39 249 if ( open_BMP( "G.bmp", camera.horizontal_size(), camera.vertical_size() ) )
okano 28:ef40d40b5d39 250 return;
okano 28:ef40d40b5d39 251
okano 28:ef40d40b5d39 252 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 28:ef40d40b5d39 253 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 28:ef40d40b5d39 254 write_BMP( buf, camera.horizontal_size(), 0x2 );
okano 28:ef40d40b5d39 255 }
okano 28:ef40d40b5d39 256
okano 28:ef40d40b5d39 257 close_BMP();
okano 28:ef40d40b5d39 258
okano 28:ef40d40b5d39 259
okano 28:ef40d40b5d39 260 if ( open_BMP( "B.bmp", camera.horizontal_size(), camera.vertical_size() ) )
okano 28:ef40d40b5d39 261 return;
okano 28:ef40d40b5d39 262
okano 28:ef40d40b5d39 263 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 28:ef40d40b5d39 264 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 28:ef40d40b5d39 265 write_BMP( buf, camera.horizontal_size(), 0x1 );
okano 28:ef40d40b5d39 266 }
okano 28:ef40d40b5d39 267
okano 28:ef40d40b5d39 268 close_BMP();
okano 28:ef40d40b5d39 269
okano 28:ef40d40b5d39 270 #endif
okano 28:ef40d40b5d39 271 camera.close_transfer();
okano 28:ef40d40b5d39 272 }