Operacion X
Dependencies: mbed ov7670 mycame imagetrlib FastPWM UniGraphic
main.cpp@0:18fc17ecd705, 2019-11-08 (annotated)
- Committer:
- rickqw
- Date:
- Fri Nov 08 17:50:07 2019 +0000
- Revision:
- 0:18fc17ecd705
proyecto manhattan
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rickqw | 0:18fc17ecd705 | 1 | #include "mbed.h" |
rickqw | 0:18fc17ecd705 | 2 | //#include "global.h" |
rickqw | 0:18fc17ecd705 | 3 | #include "FastPWM.h" |
rickqw | 0:18fc17ecd705 | 4 | #include "imagetr.h" |
rickqw | 0:18fc17ecd705 | 5 | #include "ov7670.h" |
rickqw | 0:18fc17ecd705 | 6 | #include "ov7670sreg.h" |
rickqw | 0:18fc17ecd705 | 7 | #include "ILI9341.h" |
rickqw | 0:18fc17ecd705 | 8 | #include "SDFileSystem.h" |
rickqw | 0:18fc17ecd705 | 9 | #include "Arial12x12.h" |
rickqw | 0:18fc17ecd705 | 10 | #include "Arial24x23.h" |
rickqw | 0:18fc17ecd705 | 11 | #include "Arial28x28.h" |
rickqw | 0:18fc17ecd705 | 12 | |
rickqw | 0:18fc17ecd705 | 13 | // for the TFT |
rickqw | 0:18fc17ecd705 | 14 | #define CSTFT PB_0 |
rickqw | 0:18fc17ecd705 | 15 | #define RESETTFT PC_1 |
rickqw | 0:18fc17ecd705 | 16 | #define RSTFT PA_4 |
rickqw | 0:18fc17ecd705 | 17 | #define WRTFT PA_1 |
rickqw | 0:18fc17ecd705 | 18 | #define RDTFT PA_0 |
rickqw | 0:18fc17ecd705 | 19 | #define PCLK PC_10 //camera Pixel clock |
rickqw | 0:18fc17ecd705 | 20 | #define HREF PC_11 //camera Href |
rickqw | 0:18fc17ecd705 | 21 | #define VSYNC PC_12 // camera Vsync |
rickqw | 0:18fc17ecd705 | 22 | #define I2C_D PB_3 //Camera SCC3 port data |
rickqw | 0:18fc17ecd705 | 23 | #define I2C_CLK PB_10 //Camera SCCB port clock /* IMPORTANT! pull up, SV->4.SKohm*/ |
rickqw | 0:18fc17ecd705 | 24 | #define RESET PB_12 // camera reset |
rickqw | 0:18fc17ecd705 | 25 | #define XCLK PA_10 //camera system clock |
rickqw | 0:18fc17ecd705 | 26 | |
rickqw | 0:18fc17ecd705 | 27 | #define mD0 PC_2 //camera Data |
rickqw | 0:18fc17ecd705 | 28 | #define mD1 PC_3 |
rickqw | 0:18fc17ecd705 | 29 | #define mD2 PC_4 |
rickqw | 0:18fc17ecd705 | 30 | #define mD3 PC_5 |
rickqw | 0:18fc17ecd705 | 31 | #define mD4 PC_6 |
rickqw | 0:18fc17ecd705 | 32 | #define mD5 PC_7 |
rickqw | 0:18fc17ecd705 | 33 | #define mD6 PC_8 |
rickqw | 0:18fc17ecd705 | 34 | #define mD7 PC_9 |
rickqw | 0:18fc17ecd705 | 35 | |
rickqw | 0:18fc17ecd705 | 36 | #define SCSD PB_13 //clk SD |
rickqw | 0:18fc17ecd705 | 37 | #define MISD PB_14 //miso SD |
rickqw | 0:18fc17ecd705 | 38 | #define MOSD PB_15 // mosi SD |
rickqw | 0:18fc17ecd705 | 39 | |
rickqw | 0:18fc17ecd705 | 40 | // to check his use |
rickqw | 0:18fc17ecd705 | 41 | #define PD2 PD_2/: CS SD |
rickqw | 0:18fc17ecd705 | 42 | #define QQVGA 19200 //150 *120 |
rickqw | 0:18fc17ecd705 | 43 | /*GLOBAL INSTANCES*/ |
rickqw | 0:18fc17ecd705 | 44 | DigitalOut myled(LED1); |
rickqw | 0:18fc17ecd705 | 45 | InterruptIn my_button (USER_BUTTON); |
rickqw | 0:18fc17ecd705 | 46 | |
rickqw | 0:18fc17ecd705 | 47 | //communication serial |
rickqw | 0:18fc17ecd705 | 48 | Serial pc(USBTX, USBRX);//tx, rx |
rickqw | 0:18fc17ecd705 | 49 | // bluetooth communication |
rickqw | 0:18fc17ecd705 | 50 | Serial bluetooth(PA_0, PA_1); // tx, nx |
rickqw | 0:18fc17ecd705 | 51 | |
rickqw | 0:18fc17ecd705 | 52 | PinName buspins[8]={D11, D10, D8, D7, D5, D4, PB_2, PA_12}; |
rickqw | 0:18fc17ecd705 | 53 | // |
rickqw | 0:18fc17ecd705 | 54 | ILI9341 TFT(BUS_8, buspins, PB_0, PC_1, PA_4, PA_5, PA_6, "TFT", 240, 320); |
rickqw | 0:18fc17ecd705 | 55 | //camera |
rickqw | 0:18fc17ecd705 | 56 | int mask =0x1FFC; |
rickqw | 0:18fc17ecd705 | 57 | OV7670_OV7670(I2C_D,I2C_CLK,XCLK, PortC, mask, RESET); |
rickqw | 0:18fc17ecd705 | 58 | //mosi, miso, sclk, cs |
rickqw | 0:18fc17ecd705 | 59 | SDFileSystem sd(MOSD, MISD, SCSD, PB_1, "sd"); |
rickqw | 0:18fc17ecd705 | 60 | /*GLOBAL VARIABLES*/ |
rickqw | 0:18fc17ecd705 | 61 | Timer Time; |
rickqw | 0:18fc17ecd705 | 62 | char desfile[25]; |
rickqw | 0:18fc17ecd705 | 63 | char patfile[25]; |
rickqw | 0:18fc17ecd705 | 64 | char filename[25]; |
rickqw | 0:18fc17ecd705 | 65 | const int tmarray=nc*2*nl; |
rickqw | 0:18fc17ecd705 | 66 | unsigned char bank[tmarray]; |
rickqw | 0:18fc17ecd705 | 67 | unsigned char bankt[nl][nc]; |
rickqw | 0:18fc17ecd705 | 68 | unsigned char bankta[nlta][ncta][nv]; |
rickqw | 0:18fc17ecd705 | 69 | unsigned char banktatc[nlta][ncta]; |
rickqw | 0:18fc17ecd705 | 70 | unsigned char bankf[tmarray]; |
rickqw | 0:18fc17ecd705 | 71 | unsigned char banktc[nl][nc]; |
rickqw | 0:18fc17ecd705 | 72 | |
rickqw | 0:18fc17ecd705 | 73 | float meas0,measold0,meas1,measold1,meas2,measold2,meas3,measold3; |
rickqw | 0:18fc17ecd705 | 74 | |
rickqw | 0:18fc17ecd705 | 75 | int volatile statc = 0; |
rickqw | 0:18fc17ecd705 | 76 | bool volatile captur = false; |
rickqw | 0:18fc17ecd705 | 77 | FILE *fp; |
rickqw | 0:18fc17ecd705 | 78 | |
rickqw | 0:18fc17ecd705 | 79 | void pressed() |
rickqw | 0:18fc17ecd705 | 80 | { |
rickqw | 0:18fc17ecd705 | 81 | wait(0.1); |
rickqw | 0:18fc17ecd705 | 82 | if(my_button == 0) { |
rickqw | 0:18fc17ecd705 | 83 | if(statc == 0) { |
rickqw | 0:18fc17ecd705 | 84 | //pc.printf("capture requested\r\n"); |
rickqw | 0:18fc17ecd705 | 85 | captur = true; |
rickqw | 0:18fc17ecd705 | 86 | TFT.foreground(Red); |
rickqw | 0:18fc17ecd705 | 87 | TFT.locate(0,0); |
rickqw | 0:18fc17ecd705 | 88 | } |
rickqw | 0:18fc17ecd705 | 89 | if(statc == 1){ |
rickqw | 0:18fc17ecd705 | 90 | fp = fope(desfile,"r"); |
rickqw | 0:18fc17ecd705 | 91 | for(int =0;i<tmarray;i++) |
rickqw | 0:18fc17ecd705 | 92 | { |
rickqw | 0:18fc17ecd705 | 93 | bankf[i] = fgetc(fp); |
rickqw | 0:18fc17ecd705 | 94 | bluetooth.putc(bankf[i]); |
rickqw | 0:18fc17ecd705 | 95 | wait_ms(1); |
rickqw | 0:18fc17ecd705 | 96 | } |
rickqw | 0:18fc17ecd705 | 97 | fclose(fp); |
rickqw | 0:18fc17ecd705 | 98 | } |
rickqw | 0:18fc17ecd705 | 99 | if(statc == 2) { |
rickqw | 0:18fc17ecd705 | 100 | statc=0; |
rickqw | 0:18fc17ecd705 | 101 | }else{ |
rickqw | 0:18fc17ecd705 | 102 | statc=statc+1; |
rickqw | 0:18fc17ecd705 | 103 | } |
rickqw | 0:18fc17ecd705 | 104 | } |
rickqw | 0:18fc17ecd705 | 105 | } |
rickqw | 0:18fc17ecd705 | 106 | |
rickqw | 0:18fc17ecd705 | 107 | void capturecycle(const char des[]) |
rickqw | 0:18fc17ecd705 | 108 | { |
rickqw | 0:18fc17ecd705 | 109 | strcpy(desfile,des); |
rickqw | 0:18fc17ecd705 | 110 | if(statc == 0||statc == 1) { |
rickqw | 0:18fc17ecd705 | 111 | pc.printf("one entry\n"); |
rickqw | 0:18fc17ecd705 | 112 | _OV7670.exrgbf(0); |
rickqw | 0:18fc17ecd705 | 113 | TFT.Bitmap(0,120,160,120,bankf); |
rickqw | 0:18fc17ecd705 | 114 | _OV7670.exrgbf(1); |
rickqw | 0:18fc17ecd705 | 115 | TFT.Bitmap(160,120,160,120,bankf); |
rickqw | 0:18fc17ecd705 | 116 | _OV7670.exrgbf(2); |
rickqw | 0:18fc17ecd705 | 117 | TFT.Bitmap(0,0,160,120,bankf); |
rickqw | 0:18fc17ecd705 | 118 | _OV7670.exrgbf(3); |
rickqw | 0:18fc17ecd705 | 119 | TFT.Bitmap(1600,0,160,120,bankf); |
rickqw | 0:18fc17ecd705 | 120 | }if(statc==2){ |
rickqw | 0:18fc17ecd705 | 121 | pc.printf("two entry\n"); |
rickqw | 0:18fc17ecd705 | 122 | _OV7670.CaptureNext(); |
rickqw | 0:18fc17ecd705 | 123 | TFT.fillrect(0,120,160,240,Green); |
rickqw | 0:18fc17ecd705 | 124 | TFT.fillrect(160,0,320,120,Green); |
rickqw | 0:18fc17ecd705 | 125 | TFT.foreground(Yellow); |
rickqw | 0:18fc17ecd705 | 126 | |
rickqw | 0:18fc17ecd705 | 127 | TFT.Bitmap(0,0,160,120,bank); |
rickqw | 0:18fc17ecd705 | 128 | TFT.Bitmap(160,120,160,120,bankf); |
rickqw | 0:18fc17ecd705 | 129 | } |
rickqw | 0:18fc17ecd705 | 130 | } |
rickqw | 0:18fc17ecd705 | 131 | |
rickqw | 0:18fc17ecd705 | 132 | void just_send_and_display(const char des[]){ |
rickqw | 0:18fc17ecd705 | 133 | |
rickqw | 0:18fc17ecd705 | 134 | strcoy(desfile,des); |
rickqw | 0:18fc17ecd705 | 135 | fo = fopen(desfile,"r"); |
rickqw | 0:18fc17ecd705 | 136 | for(int i =0;i<tmarray;i++) |
rickqw | 0:18fc17ecd705 | 137 | { |
rickqw | 0:18fc17ecd705 | 138 | bankf[i] = fgetc(fp); |
rickqw | 0:18fc17ecd705 | 139 | bluetooth.putc(bank[i]); |
rickqw | 0:18fc17ecd705 | 140 | wait_ms(1); |
rickqw | 0:18fc17ecd705 | 141 | } |
rickqw | 0:18fc17ecd705 | 142 | fclose(fp); |
rickqw | 0:18fc17ecd705 | 143 | TFT.Bitmap(0,0,160,120,bankf); |
rickqw | 0:18fc17ecd705 | 144 | } |
rickqw | 0:18fc17ecd705 | 145 | |
rickqw | 0:18fc17ecd705 | 146 | int main(){ |
rickqw | 0:18fc17ecd705 | 147 | |
rickqw | 0:18fc17ecd705 | 148 | myled_0; |
rickqw | 0:18fc17ecd705 | 149 | statc=0; |
rickqw | 0:18fc17ecd705 | 150 | //prepare the TFT |
rickqw | 0:18fc17ecd705 | 151 | TFT.claim(stdout); |
rickqw | 0:18fc17ecd705 | 152 | TFT.background(Black); // Set background to black |
rickqw | 0:18fc17ecd705 | 153 | TFT.foreground(White); //Set chars to white |
rickqw | 0:18fc17ecd705 | 154 | TFT.cls();//Clear the screen |
rickqw | 0:18fc17ecd705 | 155 | |
rickqw | 0:18fc17ecd705 | 156 | |
rickqw | 0:18fc17ecd705 | 157 | |
rickqw | 0:18fc17ecd705 | 158 | TFT.set_font((unsigned char*)Arial 12x12); // Select the font |
rickqw | 0:18fc17ecd705 | 159 | TFT.set_orientation(1); //Select orientation |
rickqw | 0:18fc17ecd705 | 160 | TFT.locate(0,0); |
rickqw | 0:18fc17ecd705 | 161 | |
rickqw | 0:18fc17ecd705 | 162 | _OV7670.Reset(); |
rickqw | 0:18fc17ecd705 | 163 | _OV7670.Init("RGB", QQVGA); |
rickqw | 0:18fc17ecd705 | 164 | pc.printf("Hello World \r\n"); |
rickqw | 0:18fc17ecd705 | 165 | my_button.fail(&pressed); |
rickqw | 0:18fc17ecd705 | 166 | bluetooth.baud(115200); |
rickqw | 0:18fc17ecd705 | 167 | wait_ms(10000); |
rickqw | 0:18fc17ecd705 | 168 | while(1){ |
rickqw | 0:18fc17ecd705 | 169 | capturecycle("/sd/picture.txt"); |
rickqw | 0:18fc17ecd705 | 170 | } |
rickqw | 0:18fc17ecd705 | 171 | } |