A program that records images from the OV7670 camera and displays them on a SPI TFT display. Working at 15fps
Dependencies: mbed TFT_fonts_old
main.cpp
- Committer:
- ms523
- Date:
- 2012-03-27
- Revision:
- 0:aabbf2286bf2
- Child:
- 1:c98598814170
File content as of revision 0:aabbf2286bf2:
// // OV7670 + FIFO AL422B camera board test // #include "mbed.h" #include "ov7670.h" #include "stdio.h" #include "SPI_TFT.h" #include "string" #include "Arial12x12.h" #include "Arial24x23.h" #include "Arial28x28.h" #include "font_big.h" OV7670 camera( p28,p27, // SDA,SCL(I2C / SCCB) p21,p22,p20, // VSYNC,HREF,WEN(FIFO) p19,p18,p17,p16,p15,p14,p13,p12, // D7-D0 p23,p24,p25) ; // RRST,OE,RCLK // the TFT is connected to SPI pin 5-7 SPI_TFT TFT(p5, p6, p7, p8, p9,"TFT"); // mosi, miso, sclk, cs, reset Serial pc(USBTX,USBRX); #define SIZEX (160) #define SIZEY (120) int main() { // Set up the TFT TFT.claim(stdout); // Send stdout to the TFT display TFT.background(Black); // Set background to black TFT.foreground(White); // Set chars to white TFT.cls(); // Clear the screen TFT.set_font((unsigned char*) Arial12x12); // Select the font TFT.set_orientation(3); // Select orientation printf("Testing..."); int i ; pc.baud(115200) ; pc.printf("Camera resetting..\r\n") ; camera.Reset() ; pc.printf("Before Init...\r\n") ; pc.printf("AD : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F") ; for (i=0; i<OV7670_REGMAX; i++) { int data ; data = camera.ReadReg(i) ; // READ REG if ((i & 0x0F) == 0) { pc.printf("\r\n%02X : ",i) ; } pc.printf("%02X ",data) ; } pc.printf("\r\n") ; camera.InitQQVGA() ; pc.printf("After Init...\r\n") ; pc.printf("AD : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F") ; for (i=0; i<OV7670_REGMAX; i++) { int data ; data = camera.ReadReg(i) ; // READ REG if ((i & 0x0F) == 0) { pc.printf("\r\n%02X : ",i) ; } pc.printf("%02X ",data) ; } pc.printf("\r\n") ; // CAPTURE and SEND LOOP while (1) { pc.printf("Hit Any Key to send RGBx160x120 Capture Data.\r\n") ; while (!pc.readable()) ; pc.getc() ; camera.CaptureNext() ; while (camera.CaptureDone() == false) ; pc.printf("*\r\n") ; camera.ReadStart() ; i = 0 ; int colour; for (int y = 0; y < SIZEY; y++) { int r,g,b,d1,d2 ; for (int x = 0; x < SIZEX; x++) { d1 = camera.ReadOneByte() ; // upper nibble is XXX , lower nibble is B d2 = camera.ReadOneByte() ; // upper nibble is G , lower nibble is R b = (d1 & 0x0F) ; g = (d2 & 0xF0) >> 4 ; r = (d2 & 0x0F) ; pc.printf ("%1X%1X%1X",r,g,b) ; // Calculate colour colour = r << 11; colour += g << 5; colour += b; // Display pixel on TFT screen TFT.pixel(x, y, colour); } pc.printf("\r\n") ; } camera.ReadStop() ; } }