Tedd OKANO / Mbed 2 deprecated MARY_CAMERA_Hello

Dependencies:   MARY_CAMERA NokiaLCD mbed

Committer:
okano
Date:
Wed Mar 12 00:47:00 2014 +0000
Revision:
26:4e4f954a2e2a
Parent:
25:185159c780d6
Child:
27:625e40d60c7b
size change test added

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 0:1062142e5718 24
okano 26:4e4f954a2e2a 25 //#define SAVE_EACH_SIZES_OF_STILL_IMAGE
okano 23:8471197d3096 26
okano 0:1062142e5718 27 int main()
okano 0:1062142e5718 28 {
okano 6:f5b4e088087b 29 led = 0x3;
okano 6:f5b4e088087b 30
okano 1:ce27bc7b44d4 31 oled1.cls();
okano 16:fa1bd83e34b0 32 oled_test_screen();
okano 1:ce27bc7b44d4 33
okano 23:8471197d3096 34 #if defined( TARGET_MBED_LPC1768 )
okano 23:8471197d3096 35
okano 26:4e4f954a2e2a 36 #ifdef SAVE_EACH_SIZES_OF_STILL_IMAGE
okano 23:8471197d3096 37 led = 0x1;
okano 26:4e4f954a2e2a 38 camera.resolution( MARY_CAMERA::QCIF );
okano 23:8471197d3096 39 save_still_image( "i_qcif.bmp" );
okano 23:8471197d3096 40
okano 23:8471197d3096 41 led = 0x2;
okano 26:4e4f954a2e2a 42 camera.resolution( MARY_CAMERA::QQVGA );
okano 23:8471197d3096 43 save_still_image( "i_qqvga.bmp" );
okano 0:1062142e5718 44
okano 23:8471197d3096 45 led = 0x4;
okano 26:4e4f954a2e2a 46 camera.resolution( MARY_CAMERA::QVGA );
okano 23:8471197d3096 47 save_still_image( "i_qvga.bmp" );
okano 23:8471197d3096 48
okano 23:8471197d3096 49 led = 0x8;
okano 26:4e4f954a2e2a 50 camera.resolution( MARY_CAMERA::VGA );
okano 23:8471197d3096 51 save_still_image( "i_vga.bmp" );
okano 23:8471197d3096 52
okano 26:4e4f954a2e2a 53 camera.resolution( MARY_CAMERA::QCIF );
okano 23:8471197d3096 54 #endif
okano 23:8471197d3096 55
okano 12:6ddd07d59c55 56 #endif
okano 10:3c8fc9569377 57
okano 26:4e4f954a2e2a 58 // test_camera_QCIF_video_with_colorbar(); // doesn't return
okano 26:4e4f954a2e2a 59 test_camera_resolution_change(); // doesn't return
okano 26:4e4f954a2e2a 60 }
okano 26:4e4f954a2e2a 61
okano 26:4e4f954a2e2a 62
okano 26:4e4f954a2e2a 63 void test_camera_QCIF_video_with_colorbar( void )
okano 26:4e4f954a2e2a 64 {
okano 24:c74b706c25d6 65 int count = 0;
okano 24:c74b706c25d6 66
okano 0:1062142e5718 67 while ( 1 ) {
okano 7:380026dd09fd 68 led = 0x1;
okano 23:8471197d3096 69 copy_image_to_oled();
okano 26:4e4f954a2e2a 70 camera.colorbar( ((count++ >> 2) & 0x1) ? MARY_CAMERA::ON : MARY_CAMERA::OFF );
okano 26:4e4f954a2e2a 71 led = 0x2;
okano 26:4e4f954a2e2a 72 }
okano 26:4e4f954a2e2a 73 }
okano 24:c74b706c25d6 74
okano 26:4e4f954a2e2a 75
okano 26:4e4f954a2e2a 76 void test_camera_resolution_change( void )
okano 26:4e4f954a2e2a 77 {
okano 26:4e4f954a2e2a 78 int count = (3 << 3);
okano 26:4e4f954a2e2a 79 int setting;
okano 26:4e4f954a2e2a 80
okano 26:4e4f954a2e2a 81 while ( 1 ) {
okano 24:c74b706c25d6 82
okano 26:4e4f954a2e2a 83 if ( !(count & 0x7) ) {
okano 26:4e4f954a2e2a 84 setting = (count >> 3) & 0x3;
okano 26:4e4f954a2e2a 85 camera.resolution( (MARY_CAMERA::CameraResolution)(setting + 1) );
okano 26:4e4f954a2e2a 86 led = 0x1 << setting;
okano 26:4e4f954a2e2a 87 }
okano 26:4e4f954a2e2a 88
okano 26:4e4f954a2e2a 89 count++;
okano 26:4e4f954a2e2a 90
okano 26:4e4f954a2e2a 91 copy_image_to_oled();
okano 0:1062142e5718 92 }
okano 0:1062142e5718 93 }
okano 6:f5b4e088087b 94
okano 9:68408189efde 95
okano 23:8471197d3096 96 void copy_image_to_oled( void )
okano 23:8471197d3096 97 {
okano 23:8471197d3096 98 short buf[ MARMEX_OB_oled::WIDTH ];
okano 23:8471197d3096 99
okano 23:8471197d3096 100 camera.open_transfer();
okano 23:8471197d3096 101
okano 23:8471197d3096 102 for ( int line = 0; line < MARMEX_OB_oled::HEIGHT; line++ ) {
okano 26:4e4f954a2e2a 103 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 104 line_mirroring( buf );
okano 23:8471197d3096 105 oled1.blit565( 0, line, MARMEX_OB_oled::WIDTH, 1, buf );
okano 23:8471197d3096 106 }
okano 23:8471197d3096 107
okano 23:8471197d3096 108 camera.close_transfer();
okano 23:8471197d3096 109 }
okano 23:8471197d3096 110
okano 23:8471197d3096 111
okano 9:68408189efde 112 void line_mirroring( short *buf )
okano 9:68408189efde 113 {
okano 9:68408189efde 114 short tmp;
okano 9:68408189efde 115
okano 9:68408189efde 116 for ( int i = 0; i < (MARMEX_OB_oled::WIDTH / 2); i++ ) {
okano 9:68408189efde 117 tmp = buf[ i ];
okano 9:68408189efde 118 buf[ i ] = buf[ (MARMEX_OB_oled::WIDTH - 1) - i ];
okano 9:68408189efde 119 buf[ (MARMEX_OB_oled::WIDTH - 1) - i ] = tmp;
okano 9:68408189efde 120 }
okano 10:3c8fc9569377 121 }
okano 10:3c8fc9569377 122
okano 10:3c8fc9569377 123
okano 16:fa1bd83e34b0 124 void oled_test_screen( void )
okano 16:fa1bd83e34b0 125 {
okano 16:fa1bd83e34b0 126 oled1.background( 0x000000 );
okano 16:fa1bd83e34b0 127 oled1.cls();
okano 16:fa1bd83e34b0 128
okano 16:fa1bd83e34b0 129 int colorbar_width = MARMEX_OB_oled::WIDTH / 8;
okano 16:fa1bd83e34b0 130
okano 16:fa1bd83e34b0 131 for ( int i = 0; i < 8; i++ )
okano 16:fa1bd83e34b0 132 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 133
okano 16:fa1bd83e34b0 134 oled1.fill( 50, 50, 64, 64, 0xCCCCCC );;
okano 16:fa1bd83e34b0 135
okano 16:fa1bd83e34b0 136 oled1.locate( 0, 2 );
okano 16:fa1bd83e34b0 137 oled1.printf( "MaryCemara test" );
okano 22:d5e24ab4afb7 138 oled1.locate( 0, 3 );
okano 22:d5e24ab4afb7 139 oled1.printf( "%s", (MARY_CAMERA::NO_ERROR == camera.ready()) ? "Camera is ready" : "No Camera found" );
okano 16:fa1bd83e34b0 140 oled1.locate( 0, 4 );
okano 22:d5e24ab4afb7 141 oled1.printf( "%s", "saving into BMP" );
okano 23:8471197d3096 142 oled1.locate( 0, 5 );
okano 23:8471197d3096 143 oled1.printf( "%d", camera.horizontal_size() );
okano 23:8471197d3096 144 oled1.locate( 0, 6 );
okano 23:8471197d3096 145 oled1.printf( "%d", camera.vertical_size() );
okano 23:8471197d3096 146
okano 16:fa1bd83e34b0 147
okano 21:a2ac746dd516 148 for (int i = 0; i < MARMEX_OB_oled::WIDTH; i++ )
okano 16:fa1bd83e34b0 149 oled1.pixel( i, 80 + sin( (float)i / 5.0 ) * 10, 0x000000 );
okano 21:a2ac746dd516 150 }
okano 21:a2ac746dd516 151
okano 21:a2ac746dd516 152
okano 10:3c8fc9569377 153 #include "bmp_handler.h"
okano 10:3c8fc9569377 154
okano 10:3c8fc9569377 155 void save_still_image( char *file_name )
okano 10:3c8fc9569377 156 {
okano 23:8471197d3096 157 short buf[ camera.horizontal_size() ];
okano 10:3c8fc9569377 158
okano 23:8471197d3096 159 if ( open_BMP( file_name, camera.horizontal_size(), camera.vertical_size() ) )
okano 10:3c8fc9569377 160 return;
okano 10:3c8fc9569377 161
okano 10:3c8fc9569377 162 camera.open_transfer();
okano 10:3c8fc9569377 163
okano 23:8471197d3096 164 for ( int line = (camera.vertical_size() - 1); 0 <= line; line-- ) {
okano 23:8471197d3096 165 camera.transfer_a_line( buf, line, 0, camera.horizontal_size() );
okano 23:8471197d3096 166 write_BMP( buf, camera.horizontal_size() );
okano 10:3c8fc9569377 167 }
okano 10:3c8fc9569377 168 camera.close_transfer();
okano 11:149993faf2be 169
okano 10:3c8fc9569377 170 close_BMP();
okano 21:a2ac746dd516 171 }