Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: MARY_CAMERA.h
- Revision:
- 4:cb0ef3fd89c9
- Parent:
- 3:e5752853eb26
- Child:
- 5:960221bde814
- Child:
- 7:942d8d0a1760
--- a/MARY_CAMERA.h Mon Feb 17 06:23:08 2014 +0000 +++ b/MARY_CAMERA.h Mon Feb 17 23:44:08 2014 +0000 @@ -1,39 +1,120 @@ -#ifndef MBED_MARY_CAMERA -#define MBED_MARY_CAMERA +#ifndef MBED_MARY_CAMERA +#define MBED_MARY_CAMERA -#define PIXEL_PER_LINE 176 -#define BYTE_PER_PIXEL 2 -#define BYTE_PER_LINE (PIXEL_PER_LINE * BYTE_PER_PIXEL) - -#define SPI_FREQUENCY 12000000 - -// sample MARY_CAMERA camera( p5, p6, p7, p22, p9, p26, p28, p27 ) +#define SPI_FREQUENCY 12000000 +/** MARY_CAMERA class + * + * MARY_CAMERA driver library + * This driver has been made to get camera data from MARY CAMERA. + * + * Example: + * @code + * + * #include "mbed.h" + * #include "MARMEX_OB_oled.h" + * #include "MARY_CAMERA.h" + * + * MARMEX_OB_oled oled1( p5, p7, p20, p16, p15 ); // mosi, sclk, cs, rst, power_control -- maple-mini-type-b-slot1 + * MARY_CAMERA camera( p5, p6, p7, p22, p26, p28, p27 ); // mosi, miso, sclk, cs, reset, I2C_SDA, I2C_SCL + * BusOut led( LED3, LED4 ); + * + * #define X_OFFSET ((MARY_CAMERA::PIXEL_PER_LINE - MARMEX_OB_oled::WIDTH ) / 2) + * #define Y_OFFSET ((MARY_CAMERA::LINE_PER_FRAME - MARMEX_OB_oled::HEIGHT) / 2) + * + * int main() + * { + * led = 0x3; + * + * oled1.cls(); + * + * short buf[ MARMEX_OB_oled::WIDTH ]; + * + * while ( 1 ) { + * + * led = 0x1; + * camera.open_transfer(); + * + * for ( int line = 0; line < 128; line++ ) { + * camera.transfer_a_line( buf, line + Y_OFFSET, X_OFFSET, 128 ); + * oled1.blit565( 0, line, 128, 1, buf ); + * } + * + * camera.close_transfer(); + * led = 0x2; + * } + * } + * @endcode + */ + + class MARY_CAMERA { public: - /** Create a MARY_CAMERA instance connected to specified SPI and DigitalOut pins with specified address + /** General parameters for MARMEX_OB_oled */ + enum { + PIXEL_PER_LINE = 176, /**< pixels in a line */ + LINE_PER_FRAME = 144, /**< pixels in a line */ + BYTE_PER_PIXEL = 2, /**< bytes per pixel */ + BYTE_PER_LINE = (PIXEL_PER_LINE * BYTE_PER_PIXEL) /**< data size of 1 line */ + }; + + /** Create a MARY_CAMERA instance connected to specified SPI, DigitalOut and I2C pins * - * @param I2C_sda I2C-bus SDA pin - * @param I2C_scl I2C-bus SCL pin - * @param steps_per_rotation motor specific setting. This determines how many steps are needed to execute one full turn of motor shaft (360°). - * @param I2C_address I2C-bus address (default: 0x42) + * @param SPI_mosi SPI-bus MOSI pin + * @param SPI_miso SPI-bus MISO pin + * @param SPI_sclk SPI-bus SCLK pin + * @param SPI_cs SPI-bus Chip Select pin + * @param cam_reset Camera reset pin + * @param I2C_sda I2C-bus SDA pin + * @param I2C_scl I2C-bus SCL pin */ MARY_CAMERA( - PinName spi_mosi, - PinName spi_miso, - PinName spi_sck, - PinName spi_cs, + PinName SPI_mosi, + PinName SPI_miso, + PinName SPI_sck, + PinName SPI_cs, PinName cam_reset, - PinName i2c_sda, - PinName i2c_scl + PinName I2C_sda, + PinName I2C_scl ); + + /** Initialization + * + * Performs MARY_CAMERA reset and initializations + * This function is called from MARY_CAMERA constoructor. So user don't have to call in the user code. + * + * This function takes about 2 seconds because there is 99 times I2C access with 20ms interval. + */ void init( void ); + + /** Open transfer + * + * Let the MARY_CAMERA get ready to transfer the data. + * When this function is called, the camera will stop updating buffer at end of frame. + */ void open_transfer( void ); + + /** Close transfer + * + * Letting the MARY_CAMERA to know the data transfer done. + * This function should be called when the data transfer done to resume the buffer update by camera + */ void close_transfer( void ); + + /** Transfer a line + * + * Reads 1 line data from MARY_CAMERA + * This function should be called when the data transfer done to resume the buffer update by camera + * + * @param *p pointer to array of short + * @param line_number to select which line want to read + * @param x_offset holizontal offset (from left) to start the read + * @param n_of_pixels pixels to be read + */ void transfer_a_line( short *p, int line_number, int x_offset, int n_of_pixels ); private: @@ -41,12 +122,11 @@ void write_register( char reg, char value ); int read_register( char reg ); void set_address( int address ); - void very_short_wait( void ); - SPI spi; - DigitalOut cs; - DigitalOut reset; - I2C i2c; + SPI _spi; + DigitalOut _cs; + DigitalOut _reset; + I2C _i2c; };