Tedd OKANO / Mbed 2 deprecated MARY_CAMERA_Hello

Dependencies:   MARY_CAMERA NokiaLCD mbed

Committer:
okano
Date:
Sat Mar 22 01:50:56 2014 +0000
Revision:
30:eaab2c4bbe22
Parent:
28:ef40d40b5d39
Child:
31:5ab6567aba69
test code

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 0:1062142e5718 74 while ( 1 ) {
okano 28:ef40d40b5d39 75
okano 28:ef40d40b5d39 76 if ( pc.readable() ) {
okano 28:ef40d40b5d39 77 switch ( pc.getc() ) {
okano 28:ef40d40b5d39 78 case 'c' :
okano 28:ef40d40b5d39 79 capture_to_bmp();
okano 28:ef40d40b5d39 80 printf( " [c] : capture started\r\n" );
okano 28:ef40d40b5d39 81 break;
okano 28:ef40d40b5d39 82 case 'o' :
okano 28:ef40d40b5d39 83 read_order_change = read_order_change ? 0 : 1;
okano 28:ef40d40b5d39 84 printf( " [o] read order change : %s\r\n", read_order_change ? "ENABLED" : "DISABLED" );
okano 28:ef40d40b5d39 85 break;
okano 28:ef40d40b5d39 86 case '1' :
okano 28:ef40d40b5d39 87 printf( " [1] resolution change : QCIF\r\n" );
okano 30:eaab2c4bbe22 88 camera.init( MARY_CAMERA::QCIF );
okano 28:ef40d40b5d39 89 break;
okano 28:ef40d40b5d39 90 case '2' :
okano 30:eaab2c4bbe22 91 printf( " [2] resolution change : QQVGA\r\n" );
okano 30:eaab2c4bbe22 92 camera.init( MARY_CAMERA::QQVGA );
okano 28:ef40d40b5d39 93 break;
okano 28:ef40d40b5d39 94 case '3' :
okano 30:eaab2c4bbe22 95 printf( " [3] resolution change : QVGA\r\n" );
okano 30:eaab2c4bbe22 96 camera.init( MARY_CAMERA::QVGA );
okano 28:ef40d40b5d39 97 break;
okano 28:ef40d40b5d39 98 case '4' :
okano 30:eaab2c4bbe22 99 printf( " [4] resolution change : VGA\r\n" );
okano 30:eaab2c4bbe22 100 camera.init( MARY_CAMERA::VGA );
okano 28:ef40d40b5d39 101 break;
okano 28:ef40d40b5d39 102 }
okano 28:ef40d40b5d39 103 }
okano 28:ef40d40b5d39 104
okano 28:ef40d40b5d39 105
okano 7:380026dd09fd 106 led = 0x1;
okano 23:8471197d3096 107 copy_image_to_oled();
okano 28:ef40d40b5d39 108 // camera.colorbar( ((count++ >> 2) & 0x1) ? MARY_CAMERA::ON : MARY_CAMERA::OFF );
okano 26:4e4f954a2e2a 109 led = 0x2;
okano 26:4e4f954a2e2a 110 }
okano 26:4e4f954a2e2a 111 }
okano 24:c74b706c25d6 112
okano 26:4e4f954a2e2a 113
okano 26:4e4f954a2e2a 114 void test_camera_resolution_change( void )
okano 26:4e4f954a2e2a 115 {
okano 26:4e4f954a2e2a 116 int count = (3 << 3);
okano 26:4e4f954a2e2a 117 int setting;
okano 26:4e4f954a2e2a 118
okano 26:4e4f954a2e2a 119 while ( 1 ) {
okano 24:c74b706c25d6 120
okano 26:4e4f954a2e2a 121 if ( !(count & 0x7) ) {
okano 26:4e4f954a2e2a 122 setting = (count >> 3) & 0x3;
okano 30:eaab2c4bbe22 123 camera.init( (MARY_CAMERA::CameraResolution)(setting + 1) );
okano 26:4e4f954a2e2a 124 led = 0x1 << setting;
okano 26:4e4f954a2e2a 125 }
okano 28:ef40d40b5d39 126
okano 26:4e4f954a2e2a 127 count++;
okano 26:4e4f954a2e2a 128
okano 26:4e4f954a2e2a 129 copy_image_to_oled();
okano 0:1062142e5718 130 }
okano 0:1062142e5718 131 }
okano 6:f5b4e088087b 132
okano 9:68408189efde 133
okano 23:8471197d3096 134 void copy_image_to_oled( void )
okano 23:8471197d3096 135 {
okano 23:8471197d3096 136 short buf[ MARMEX_OB_oled::WIDTH ];
okano 23:8471197d3096 137
okano 23:8471197d3096 138 camera.open_transfer();
okano 23:8471197d3096 139
okano 23:8471197d3096 140 for ( int line = 0; line < MARMEX_OB_oled::HEIGHT; line++ ) {
okano 26:4e4f954a2e2a 141 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 142 line_mirroring( buf );
okano 23:8471197d3096 143 oled1.blit565( 0, line, MARMEX_OB_oled::WIDTH, 1, buf );
okano 23:8471197d3096 144 }
okano 23:8471197d3096 145
okano 23:8471197d3096 146 camera.close_transfer();
okano 23:8471197d3096 147 }
okano 23:8471197d3096 148
okano 23:8471197d3096 149
okano 9:68408189efde 150 void line_mirroring( short *buf )
okano 9:68408189efde 151 {
okano 9:68408189efde 152 short tmp;
okano 9:68408189efde 153
okano 9:68408189efde 154 for ( int i = 0; i < (MARMEX_OB_oled::WIDTH / 2); i++ ) {
okano 9:68408189efde 155 tmp = buf[ i ];
okano 9:68408189efde 156 buf[ i ] = buf[ (MARMEX_OB_oled::WIDTH - 1) - i ];
okano 9:68408189efde 157 buf[ (MARMEX_OB_oled::WIDTH - 1) - i ] = tmp;
okano 9:68408189efde 158 }
okano 10:3c8fc9569377 159 }
okano 10:3c8fc9569377 160
okano 10:3c8fc9569377 161
okano 16:fa1bd83e34b0 162 void oled_test_screen( void )
okano 16:fa1bd83e34b0 163 {
okano 16:fa1bd83e34b0 164 oled1.background( 0x000000 );
okano 16:fa1bd83e34b0 165 oled1.cls();
okano 16:fa1bd83e34b0 166
okano 16:fa1bd83e34b0 167 int colorbar_width = MARMEX_OB_oled::WIDTH / 8;
okano 16:fa1bd83e34b0 168
okano 16:fa1bd83e34b0 169 for ( int i = 0; i < 8; i++ )
okano 16:fa1bd83e34b0 170 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 171
okano 16:fa1bd83e34b0 172 oled1.fill( 50, 50, 64, 64, 0xCCCCCC );;
okano 16:fa1bd83e34b0 173
okano 16:fa1bd83e34b0 174 oled1.locate( 0, 2 );
okano 16:fa1bd83e34b0 175 oled1.printf( "MaryCemara test" );
okano 22:d5e24ab4afb7 176 oled1.locate( 0, 3 );
okano 22:d5e24ab4afb7 177 oled1.printf( "%s", (MARY_CAMERA::NO_ERROR == camera.ready()) ? "Camera is ready" : "No Camera found" );
okano 16:fa1bd83e34b0 178 oled1.locate( 0, 4 );
okano 22:d5e24ab4afb7 179 oled1.printf( "%s", "saving into BMP" );
okano 23:8471197d3096 180 oled1.locate( 0, 5 );
okano 23:8471197d3096 181 oled1.printf( "%d", camera.horizontal_size() );
okano 23:8471197d3096 182 oled1.locate( 0, 6 );
okano 23:8471197d3096 183 oled1.printf( "%d", camera.vertical_size() );
okano 23:8471197d3096 184
okano 16:fa1bd83e34b0 185
okano 21:a2ac746dd516 186 for (int i = 0; i < MARMEX_OB_oled::WIDTH; i++ )
okano 16:fa1bd83e34b0 187 oled1.pixel( i, 80 + sin( (float)i / 5.0 ) * 10, 0x000000 );
okano 21:a2ac746dd516 188 }
okano 21:a2ac746dd516 189
okano 21:a2ac746dd516 190
okano 10:3c8fc9569377 191 #include "bmp_handler.h"
okano 10:3c8fc9569377 192
okano 10:3c8fc9569377 193 void save_still_image( char *file_name )
okano 10:3c8fc9569377 194 {
okano 23:8471197d3096 195 short buf[ camera.horizontal_size() ];
okano 10:3c8fc9569377 196
okano 23:8471197d3096 197 if ( open_BMP( file_name, camera.horizontal_size(), camera.vertical_size() ) )
okano 10:3c8fc9569377 198 return;
okano 10:3c8fc9569377 199
okano 10:3c8fc9569377 200 camera.open_transfer();
okano 10:3c8fc9569377 201
okano 23:8471197d3096 202 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 23:8471197d3096 203 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 23:8471197d3096 204 write_BMP( buf, camera.horizontal_size() );
okano 10:3c8fc9569377 205 }
okano 10:3c8fc9569377 206 camera.close_transfer();
okano 11:149993faf2be 207
okano 10:3c8fc9569377 208 close_BMP();
okano 28:ef40d40b5d39 209 }
okano 28:ef40d40b5d39 210
okano 28:ef40d40b5d39 211 void capture_to_bmp( void )
okano 28:ef40d40b5d39 212 {
okano 28:ef40d40b5d39 213 short buf[ camera.horizontal_size() ];
okano 28:ef40d40b5d39 214 camera.open_transfer();
okano 28:ef40d40b5d39 215
okano 28:ef40d40b5d39 216 #if 0
okano 28:ef40d40b5d39 217 for ( int line = 0; line < MARMEX_OB_oled::HEIGHT; line++ ) {
okano 28:ef40d40b5d39 218 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 219 line_mirroring( buf );
okano 28:ef40d40b5d39 220 oled1.blit565( 0, line, MARMEX_OB_oled::WIDTH, 1, buf );
okano 28:ef40d40b5d39 221 }
okano 28:ef40d40b5d39 222 #endif
okano 28:ef40d40b5d39 223
okano 28:ef40d40b5d39 224 if ( open_BMP( "RGB.bmp", camera.horizontal_size(), camera.vertical_size() ) )
okano 28:ef40d40b5d39 225 return;
okano 28:ef40d40b5d39 226
okano 28:ef40d40b5d39 227 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 28:ef40d40b5d39 228 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 28:ef40d40b5d39 229 write_BMP( buf, camera.horizontal_size(), 0x7 );
okano 28:ef40d40b5d39 230 }
okano 28:ef40d40b5d39 231
okano 28:ef40d40b5d39 232 close_BMP();
okano 28:ef40d40b5d39 233
okano 28:ef40d40b5d39 234 #if 0
okano 28:ef40d40b5d39 235
okano 28:ef40d40b5d39 236 if ( open_BMP( "R.bmp", camera.horizontal_size(), camera.vertical_size() ) )
okano 28:ef40d40b5d39 237 return;
okano 28:ef40d40b5d39 238
okano 28:ef40d40b5d39 239 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 28:ef40d40b5d39 240 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 28:ef40d40b5d39 241 write_BMP( buf, camera.horizontal_size(), 0x4 );
okano 28:ef40d40b5d39 242 }
okano 28:ef40d40b5d39 243
okano 28:ef40d40b5d39 244 close_BMP();
okano 28:ef40d40b5d39 245
okano 28:ef40d40b5d39 246
okano 28:ef40d40b5d39 247 if ( open_BMP( "G.bmp", camera.horizontal_size(), camera.vertical_size() ) )
okano 28:ef40d40b5d39 248 return;
okano 28:ef40d40b5d39 249
okano 28:ef40d40b5d39 250 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 28:ef40d40b5d39 251 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 28:ef40d40b5d39 252 write_BMP( buf, camera.horizontal_size(), 0x2 );
okano 28:ef40d40b5d39 253 }
okano 28:ef40d40b5d39 254
okano 28:ef40d40b5d39 255 close_BMP();
okano 28:ef40d40b5d39 256
okano 28:ef40d40b5d39 257
okano 28:ef40d40b5d39 258 if ( open_BMP( "B.bmp", camera.horizontal_size(), camera.vertical_size() ) )
okano 28:ef40d40b5d39 259 return;
okano 28:ef40d40b5d39 260
okano 28:ef40d40b5d39 261 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 28:ef40d40b5d39 262 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 28:ef40d40b5d39 263 write_BMP( buf, camera.horizontal_size(), 0x1 );
okano 28:ef40d40b5d39 264 }
okano 28:ef40d40b5d39 265
okano 28:ef40d40b5d39 266 close_BMP();
okano 28:ef40d40b5d39 267
okano 28:ef40d40b5d39 268 #endif
okano 28:ef40d40b5d39 269 camera.close_transfer();
okano 28:ef40d40b5d39 270 }