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.
Dependencies: ov7670_lib Project_test
main.cpp
- Committer:
- edodm85
- Date:
- 2013-03-16
- Revision:
- 2:bbd557817319
- Parent:
- 0:19429e334b75
- Child:
- 3:b4e0cefc37f6
File content as of revision 2:bbd557817319:
/*
* Author: Edoardo De Marchi
* Date: 10/03/13
* Notes: OV7670 + FIFO AL422B camera test
*/
#include "main.h"
#define VGA 307200 //640*480
#define QVGA 76800 //320*240
#define QQVGA 19200 //160*120
static char format = ' ';
static int resolution = 0;
void rxCallback(MODSERIAL_IRQ_INFO *q)
{
new_send = true;
}
int main()
{
pc.baud(921600);
pc.printf("SystemCoreClock: %dMHz\r\n", SystemCoreClock/1000000); // print the clock frequency
led4 = 0;
t.start();
pc.attach(&rxCallback, MODSERIAL::RxIrq);
while(1)
{
if(new_send){
int i = 0;
while(pc.readable())
{
word[i] = pc.getc();
i++;
}
parse_cmd();
}
wait_ms(50);
}
}
void parse_cmd(){
new_send = false;
if(strcmp("snap", word) == 0)
{
CameraSnap();
memset(word, 0, sizeof(word));
}else
if(strcmp("init_bw_VGA", word) == 0) // Set up for 640*480 pixels YUV (Only Y)
{
pc.printf("Initializing ov7670 - Format YUV422(Y only) & VGA Mode\r\n");
format = 'b';
resolution = VGA;
if(camera.Init('b', VGA) != 1)
{
pc.printf("Init Fail\r\n");
}
pc.printf("Initializing done\r\n");
memset(word, 0, sizeof(word));
}else
if(strcmp("init_yuv_QVGA", word) == 0) // Set up for 320*240 pixels YUV422
{
pc.printf("Initializing ov7670 - Format YUV422 & QVGA Mode\r\n");
format = 'y';
resolution = QVGA;
if(camera.Init('b', QVGA) != 1)
{
pc.printf("Init Fail\r\n");
}
pc.printf("Initializing done\r\n");
memset(word, 0, sizeof(word));
}else
if(strcmp("init_rgb_QVGA", word) == 0) // Set up for 320*240 pixels RGB565
{
pc.printf("Initializing ov7670 - Format RGB565 & QVGA Mode\r\n");
format = 'r';
resolution = QVGA;
if(camera.Init('r', QVGA) != 1)
{
pc.printf("Init Fail\r\n");
}
pc.printf("Initializing done\r\n");
memset(word, 0, sizeof(word));
}else
if(strcmp("init_bw_QVGA", word) == 0) // Set up for 320*240 pixels YUV (Only Y)
{
pc.printf("Initializing ov7670 - Format YUV422(Y only) & QVGA Mode\r\n");
format = 'b';
resolution = QVGA;
if(camera.Init('b', QVGA) != 1)
{
pc.printf("Init Fail\r\n");
}
pc.printf("Initializing done\r\n");
memset(word, 0, sizeof(word));
}else
if(strcmp("init_yuv_QQVGA", word) == 0) // Set up for 160*120 pixels YUV422
{
pc.printf("Initializing ov7670 - Format YUV422 & QQVGA Mode\r\n");
format = 'y';
resolution = QQVGA;
if(camera.Init('b', QQVGA) != 1)
{
pc.printf("Init Fail\r\n");
}
pc.printf("Initializing done\r\n");
memset(word, 0, sizeof(word));
}else
if(strcmp("init_rgb_QQVGA", word) == 0) // Set up for 160*120 pixels RGB565
{
pc.printf("Initializing ov7670 - Format RGB565 & QQVGA Mode\r\n");
format = 'r';
resolution = QQVGA;
if(camera.Init('r', QQVGA) != 1)
{
pc.printf("Init Fail\r\n");
}
pc.printf("Initializing done\r\n");
memset(word, 0, sizeof(word));
}else
if(strcmp("init_bw_QQVGA", word) == 0) // Set up for 160*120 pixels YUV (Only Y)
{
pc.printf("Initializing ov7670 - Format YUV422(Y only) & QQVGA Mode\r\n");
format = 'b';
resolution = QQVGA;
if(camera.Init('b', QQVGA) != 1)
{
pc.printf("Init Fail\r\n");
}
pc.printf("Initializing done\r\n");
memset(word, 0, sizeof(word));
}else
if(strcmp("reset", word) == 0)
{
mbed_reset();
}else
if(strcmp("time", word) == 0)
{
pc.printf("Tot time acq + send (mbed): %dms\r\n", t2-t1);
memset(word, 0, sizeof(word));
}
memset(word, 0, sizeof(word));
}
void CameraSnap(){
led4 = 1;
// Kick things off by capturing an image
camera.CaptureNext();
while(camera.CaptureDone() == false);
// Start reading in the image data from the camera hardware buffer
camera.ReadStart();
t1 = t.read_ms();
for(int x = 0; x<resolution; x++)
{
// Read in the first half of the image
if(format == 'b')
{
camera.ReadOnebyte();
}else
if(format == 'y' || format == 'r')
{
pc.putc(camera.ReadOnebyte());
}
// Read in the Second half of the image
pc.putc(camera.ReadOnebyte()); // Y only
}
camera.ReadStop();
t2 = t.read_ms();
// Immediately request the next image to be captured (takes around 45ms)
camera.CaptureNext();
// Now wait for the image to finish being captured
while (camera.CaptureDone() == false);
pc.printf("Snap_done\r\n");
led4 = 0;
}