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
Diff: main.cpp
- Revision:
- 0:19429e334b75
- Child:
- 2:bbd557817319
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun Mar 10 13:03:52 2013 +0000
@@ -0,0 +1,155 @@
+/*
+ * Author: Edoardo De Marchi
+ * Date: 10/03/13
+ * Notes: OV7670 + FIFO AL422B camera test
+*/
+
+#include "main.h"
+
+#define QQVGA 4 //320*240
+#define QVGA 2 //160*120
+
+
+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_yuv", word) == 0)
+ {
+ CameraSnap('y');
+ memset(word, 0, sizeof(word));
+ }else
+ if(strcmp("snap_rgb", word) == 0)
+ {
+ CameraSnap('r');
+ memset(word, 0, sizeof(word));
+
+ }else
+ if(strcmp("init_yuv", word) == 0)
+ {
+ // Reset camera on power up
+ camera.Reset();
+ // Set up for 160*120 pixels YUV (Only Y)
+ pc.printf("Initializing ov7670 - Format YUV & QQVGA Mode\r\n");
+ if(camera.Init('y') != 1)
+ {
+ pc.printf("Init Fail\r\n");
+ }
+ pc.printf("Initializing done\r\n");
+ memset(word, 0, sizeof(word));
+ }else
+ if(strcmp("init_rgb", word) == 0)
+ {
+ // Reset camera on power up
+ camera.Reset();
+ // Set up for 160*120 pixels RGB565
+ pc.printf("Initializing ov7670 - Format RGB & QQVGA Mode\r\n");
+ if(camera.Init('r') != 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("Time Acq from camera: %dms - Time Send to pc: %dms - Time Tot: %dms\r\n", t2-t1, t3-t2, t3-t1);
+ memset(word, 0, sizeof(word));
+ }
+ memset(word, 0, sizeof(word));
+
+}
+
+
+
+void CameraSnap(char c){
+ led4 = 1;
+ int var2 = 0;
+ int var = 0;
+ t1 = t.read_ms();
+
+ // wait until the image has been captured
+ camera.CaptureNext();
+ while(camera.CaptureDone() == false);
+
+ // Start reading in the image data from the camera hardware buffer
+ camera.ReadStart();
+
+ // Read the first half of the image
+ for (int q = 0; q < SIZE; q++)
+ {
+ bank0[q] = camera.ReadOnebyte();
+ }
+ // Read the Second half of the image
+ for (int q = 0; q < SIZE; q++)
+ {
+ bank1[q] = camera.ReadOnebyte();
+ }
+
+ // Stop reading the image
+ camera.ReadStop() ;
+ t2 = t.read_ms();
+
+ if(c == 'y')
+ {
+ var = 2; // set YUV QQVGA
+ var2 = 1;
+ }
+ else{
+ var = 1; // set RGB565 QQVGA
+ var2 = 0;
+ }
+
+ for (int i = 0; i < SIZE/var; i++) {
+ pc.putc(bank0[(i*var)+var2]);
+ }
+ for (int i = 0; i < SIZE/var; i++) {
+ pc.putc(bank1[(i*var)+var2]);
+ }
+
+ // Immediately request the next image to be captured
+ camera.CaptureNext();
+ while (camera.CaptureDone() == false);
+ t3 = t.read_ms();
+
+ pc.printf("Grab done\r\n");
+
+ led4 = 0;
+}
+
+