Tested on Nucleo F411RE Based on OV7670 without FIFO, SCCB protocol rewritten. View on TFT ILI9341, possible capture picture on sd Around 3 frames per second Basic image treatment: zoom, rotation, etc Very basic pattern recognition, pattern being stored on SD, after camera capture, or from .bmp file (rgb 565, 120x160 max)

Dependencies:   FastPWM SDFileSystem SPI_TFT_ILI9341 TFT_fonts imagetrlib mbed ov7670s

Dependents:   Practica4_Camara

Committer:
sylvainkritter
Date:
Wed Feb 17 16:37:01 2016 +0000
Revision:
2:7e06db0773c1
Parent:
1:7fbc24ad0958
Child:
3:19b0a9d60055
add name of pattern on screen for pattern recognition

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sylvainkritter 0:39c9f3b49f5a 1 #include "mbed.h"
sylvainkritter 0:39c9f3b49f5a 2 #include "global.h"
sylvainkritter 0:39c9f3b49f5a 3 #include "FastPWM.h"
sylvainkritter 0:39c9f3b49f5a 4 #include "imagetr.h"
sylvainkritter 0:39c9f3b49f5a 5 #include "ov7670s.h"
sylvainkritter 0:39c9f3b49f5a 6 #include "ov7670sreg.h"
sylvainkritter 0:39c9f3b49f5a 7 #include "SPI_TFT_ILI9341.h"
sylvainkritter 0:39c9f3b49f5a 8 #include "SDFileSystem.h"
sylvainkritter 0:39c9f3b49f5a 9
sylvainkritter 0:39c9f3b49f5a 10 #define SCTFT PA_5 // sclk TFT
sylvainkritter 0:39c9f3b49f5a 11 #define MISOTFT PA_6 //miso TFT
sylvainkritter 0:39c9f3b49f5a 12 #define MOSITFT PA_7 //Mosi tft
sylvainkritter 0:39c9f3b49f5a 13 #define PA9 PA_9 // dc TFT
sylvainkritter 0:39c9f3b49f5a 14 #define PB6 PB_6 // cs TFT
sylvainkritter 0:39c9f3b49f5a 15 #define PA11 PA_11 // reset TFT pc7
sylvainkritter 0:39c9f3b49f5a 16
sylvainkritter 1:7fbc24ad0958 17 #define PCLK PC_10 //camera Pixel clock
sylvainkritter 0:39c9f3b49f5a 18 #define HREF PC_11 //camera Href
sylvainkritter 0:39c9f3b49f5a 19 #define VSYNC PC_12 // camera Vsync
sylvainkritter 0:39c9f3b49f5a 20 #define I2C_D PB_3 // Camera SCCB port data
sylvainkritter 0:39c9f3b49f5a 21 #define I2C_CLK PB_10 // Camera SCCB port clock
sylvainkritter 0:39c9f3b49f5a 22 #define RESET PB_12 // camera reset
sylvainkritter 0:39c9f3b49f5a 23 #define XCLK PA_10 // camera system clock
sylvainkritter 0:39c9f3b49f5a 24
sylvainkritter 0:39c9f3b49f5a 25
sylvainkritter 0:39c9f3b49f5a 26 #define mD0 PC_2//camera Data
sylvainkritter 0:39c9f3b49f5a 27 #define mD1 PC_3//camera Data
sylvainkritter 0:39c9f3b49f5a 28 #define mD2 PC_4//camera Data
sylvainkritter 0:39c9f3b49f5a 29 #define mD3 PC_5//camera Data
sylvainkritter 0:39c9f3b49f5a 30 #define mD4 PC_6//camera Data
sylvainkritter 0:39c9f3b49f5a 31 #define mD5 PC_7//camera Data
sylvainkritter 0:39c9f3b49f5a 32 #define mD6 PC_8 // camera Data
sylvainkritter 0:39c9f3b49f5a 33 #define mD7 PC_9 //camera Data
sylvainkritter 0:39c9f3b49f5a 34
sylvainkritter 0:39c9f3b49f5a 35
sylvainkritter 0:39c9f3b49f5a 36 #define SCSD PB_13 // sclk SD
sylvainkritter 0:39c9f3b49f5a 37 #define MISD PB_14 // miso SD
sylvainkritter 0:39c9f3b49f5a 38 #define MOSD PB_15 // mosi SD
sylvainkritter 0:39c9f3b49f5a 39
sylvainkritter 0:39c9f3b49f5a 40 #define PD2 PD_2 /: CS SD
sylvainkritter 0:39c9f3b49f5a 41
sylvainkritter 0:39c9f3b49f5a 42
sylvainkritter 0:39c9f3b49f5a 43
sylvainkritter 0:39c9f3b49f5a 44 DigitalOut myled(LED1);
sylvainkritter 0:39c9f3b49f5a 45 InterruptIn my_button(USER_BUTTON);
sylvainkritter 0:39c9f3b49f5a 46 AnalogIn analog_value0(A0);
sylvainkritter 0:39c9f3b49f5a 47 AnalogIn analog_value1(A1);
sylvainkritter 0:39c9f3b49f5a 48 AnalogIn analog_value2(A2);
sylvainkritter 0:39c9f3b49f5a 49 AnalogIn analog_value3(A3);
sylvainkritter 0:39c9f3b49f5a 50
sylvainkritter 0:39c9f3b49f5a 51 Timer Time;
sylvainkritter 0:39c9f3b49f5a 52
sylvainkritter 0:39c9f3b49f5a 53 int mask =0x1FFC;
sylvainkritter 0:39c9f3b49f5a 54
sylvainkritter 1:7fbc24ad0958 55 #define QQVGA 19200 //160*120
sylvainkritter 0:39c9f3b49f5a 56
sylvainkritter 0:39c9f3b49f5a 57 Serial pc(USBTX,USBRX);
sylvainkritter 0:39c9f3b49f5a 58 //camera
sylvainkritter 0:39c9f3b49f5a 59 OV7670 OV7670(I2C_D,I2C_CLK,XCLK,PortC,mask,RESET);
sylvainkritter 1:7fbc24ad0958 60 // 4.7 Kohm pull up on I2C_D
sylvainkritter 0:39c9f3b49f5a 61
sylvainkritter 0:39c9f3b49f5a 62 // the TFT is connected to SPI pin
sylvainkritter 0:39c9f3b49f5a 63 SPI_TFT_ILI9341 TFT(MOSITFT, MISOTFT, SCTFT, PB6, PA11, PA9,"TFT"); // mosi, miso, sclk, cs, reset, dc
sylvainkritter 0:39c9f3b49f5a 64 // LED on 3.3V with 1Kohm
sylvainkritter 0:39c9f3b49f5a 65
sylvainkritter 0:39c9f3b49f5a 66 SDFileSystem sd(MOSD, MISD, SCSD, PD_2, "sd",NC,SDFileSystem::SWITCH_NONE,2500000); // mosi, miso, sclk, cs, cd unused, switchtype, speed spi
sylvainkritter 1:7fbc24ad0958 67
sylvainkritter 0:39c9f3b49f5a 68
sylvainkritter 0:39c9f3b49f5a 69 char desfile[25];
sylvainkritter 0:39c9f3b49f5a 70 char patfile[25];
sylvainkritter 0:39c9f3b49f5a 71 char filename[25];
sylvainkritter 0:39c9f3b49f5a 72 const int tmarray = nc*2*nl;
sylvainkritter 0:39c9f3b49f5a 73 unsigned char bank[tmarray];
sylvainkritter 0:39c9f3b49f5a 74 unsigned char bankt[nl][nc];
sylvainkritter 0:39c9f3b49f5a 75 unsigned char bankf[tmarray];
sylvainkritter 0:39c9f3b49f5a 76 unsigned char banktc[nl][nc];
sylvainkritter 0:39c9f3b49f5a 77
sylvainkritter 0:39c9f3b49f5a 78
sylvainkritter 0:39c9f3b49f5a 79 float meas0,measold0,meas1,measold1,meas2,measold2, meas3, measold3;
sylvainkritter 0:39c9f3b49f5a 80
sylvainkritter 0:39c9f3b49f5a 81 int volatile statc=0;
sylvainkritter 0:39c9f3b49f5a 82 bool volatile captur =false;
sylvainkritter 0:39c9f3b49f5a 83 FILE *fp;
sylvainkritter 0:39c9f3b49f5a 84
sylvainkritter 0:39c9f3b49f5a 85 void pressed()
sylvainkritter 0:39c9f3b49f5a 86 {
sylvainkritter 0:39c9f3b49f5a 87 wait (0.1);
sylvainkritter 0:39c9f3b49f5a 88 if (my_button==0) {
sylvainkritter 0:39c9f3b49f5a 89 if (statc==0) {
sylvainkritter 0:39c9f3b49f5a 90 pc.printf("capture requested\r\n");
sylvainkritter 0:39c9f3b49f5a 91 captur=true;
sylvainkritter 0:39c9f3b49f5a 92 TFT.foreground(Red);
sylvainkritter 0:39c9f3b49f5a 93 TFT.locate(0,0);
sylvainkritter 0:39c9f3b49f5a 94 }
sylvainkritter 0:39c9f3b49f5a 95 if (statc==1) {
sylvainkritter 0:39c9f3b49f5a 96 pc.printf("visu \r\n");
sylvainkritter 0:39c9f3b49f5a 97 fp = fopen(desfile, "r");
sylvainkritter 0:39c9f3b49f5a 98 for (int i=0; i<tmarray; i++) {
sylvainkritter 0:39c9f3b49f5a 99 bankf[i] =fgetc(fp);
sylvainkritter 0:39c9f3b49f5a 100 }
sylvainkritter 0:39c9f3b49f5a 101 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 102
sylvainkritter 0:39c9f3b49f5a 103 }
sylvainkritter 0:39c9f3b49f5a 104 if (statc==2) {
sylvainkritter 0:39c9f3b49f5a 105 statc=0;
sylvainkritter 0:39c9f3b49f5a 106 } else {
sylvainkritter 0:39c9f3b49f5a 107 statc=statc+1;
sylvainkritter 0:39c9f3b49f5a 108 }
sylvainkritter 0:39c9f3b49f5a 109 }
sylvainkritter 0:39c9f3b49f5a 110 }
sylvainkritter 0:39c9f3b49f5a 111 void pressedtargnewca()
sylvainkritter 0:39c9f3b49f5a 112 {
sylvainkritter 0:39c9f3b49f5a 113 //start from first image cat extract target in desfile
sylvainkritter 0:39c9f3b49f5a 114 wait (0.1);
sylvainkritter 0:39c9f3b49f5a 115 if (my_button==0) {
sylvainkritter 0:39c9f3b49f5a 116 if (statc==0) {
sylvainkritter 0:39c9f3b49f5a 117 pc.printf("capture target requested \r\n");
sylvainkritter 0:39c9f3b49f5a 118 //imagetr.rgbtoy();
sylvainkritter 0:39c9f3b49f5a 119 imagetr.ytorgb(banktc);
sylvainkritter 0:39c9f3b49f5a 120 fp = fopen(desfile, "w");
sylvainkritter 0:39c9f3b49f5a 121 for (int i=0; i<tmarray; i++) {
sylvainkritter 0:39c9f3b49f5a 122 fputc(bank[i], fp);
sylvainkritter 0:39c9f3b49f5a 123 }
sylvainkritter 0:39c9f3b49f5a 124 TFT.Bitmap(160,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 125 pc.printf("captured target done \r\n");
sylvainkritter 0:39c9f3b49f5a 126 TFT.foreground(Green);
sylvainkritter 0:39c9f3b49f5a 127 TFT.locate(0,0);
sylvainkritter 0:39c9f3b49f5a 128 printf(" capture done");
sylvainkritter 0:39c9f3b49f5a 129 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 130 pc.printf("open target file \r\n");
sylvainkritter 0:39c9f3b49f5a 131 fp = fopen(desfile, "r");
sylvainkritter 0:39c9f3b49f5a 132 for (int i=0; i<tmarray; i++) {
sylvainkritter 0:39c9f3b49f5a 133 bank[i] =fgetc(fp);
sylvainkritter 0:39c9f3b49f5a 134 }
sylvainkritter 0:39c9f3b49f5a 135 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 136 TFT.Bitmap(0,120,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 137 imagetr.rgbtoy();
sylvainkritter 0:39c9f3b49f5a 138 imagetr.ytorgb(bankt);
sylvainkritter 0:39c9f3b49f5a 139
sylvainkritter 0:39c9f3b49f5a 140 }
sylvainkritter 0:39c9f3b49f5a 141 if (statc==1) {
sylvainkritter 0:39c9f3b49f5a 142 printf(" target capture done");
sylvainkritter 0:39c9f3b49f5a 143 imagetr.extrta();
sylvainkritter 0:39c9f3b49f5a 144 imagetr.ytorgbta(bankta,0,patfile);
sylvainkritter 0:39c9f3b49f5a 145 TFT.fillrect(160,0,160,240,Green);
sylvainkritter 0:39c9f3b49f5a 146 TFT.Bitmap(160,10,ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 147 pc.printf("clear bank \r\n");
sylvainkritter 0:39c9f3b49f5a 148 for (int i=0; i<tmarray; i++) {
sylvainkritter 0:39c9f3b49f5a 149 bank[i]=78;
sylvainkritter 0:39c9f3b49f5a 150 }
sylvainkritter 0:39c9f3b49f5a 151 fp = fopen(patfile, "r");
sylvainkritter 0:39c9f3b49f5a 152 pc.printf("get targetf \r\n");
sylvainkritter 0:39c9f3b49f5a 153 for (int i=0; i<tmarrayta; i++) {
sylvainkritter 0:39c9f3b49f5a 154 bank[i] =fgetc(fp);
sylvainkritter 0:39c9f3b49f5a 155 }
sylvainkritter 0:39c9f3b49f5a 156 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 157 imagetr.rgbtoyta();
sylvainkritter 0:39c9f3b49f5a 158 for (int i = 0; i<7; i++) {
sylvainkritter 0:39c9f3b49f5a 159 imagetr.ytorgbtas(bankta,i);
sylvainkritter 0:39c9f3b49f5a 160 TFT.Bitmap(40*(i/3),120+30* (i%3),ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 161 }
sylvainkritter 0:39c9f3b49f5a 162 }
sylvainkritter 0:39c9f3b49f5a 163 if (statc==2) {
sylvainkritter 0:39c9f3b49f5a 164 statc=0;
sylvainkritter 0:39c9f3b49f5a 165 } else {
sylvainkritter 0:39c9f3b49f5a 166 statc=statc+1;
sylvainkritter 0:39c9f3b49f5a 167
sylvainkritter 0:39c9f3b49f5a 168 }
sylvainkritter 0:39c9f3b49f5a 169 pc.printf("new s:%d \r\n", statc);
sylvainkritter 0:39c9f3b49f5a 170 }
sylvainkritter 0:39c9f3b49f5a 171 }
sylvainkritter 0:39c9f3b49f5a 172
sylvainkritter 0:39c9f3b49f5a 173 void pressedtargca()
sylvainkritter 0:39c9f3b49f5a 174 {
sylvainkritter 0:39c9f3b49f5a 175 //start from first image from camera extract
sylvainkritter 0:39c9f3b49f5a 176 wait (0.1);
sylvainkritter 0:39c9f3b49f5a 177 if (my_button==0) {
sylvainkritter 0:39c9f3b49f5a 178 if (statc==0) {
sylvainkritter 0:39c9f3b49f5a 179
sylvainkritter 0:39c9f3b49f5a 180 pc.printf("view \r\n");
sylvainkritter 0:39c9f3b49f5a 181
sylvainkritter 0:39c9f3b49f5a 182 }
sylvainkritter 0:39c9f3b49f5a 183 if (statc==1) {
sylvainkritter 0:39c9f3b49f5a 184 pc.printf("search \r\n");
sylvainkritter 0:39c9f3b49f5a 185 }
sylvainkritter 0:39c9f3b49f5a 186 if (statc==2) {
sylvainkritter 0:39c9f3b49f5a 187 statc=0;
sylvainkritter 0:39c9f3b49f5a 188 } else {
sylvainkritter 0:39c9f3b49f5a 189 statc=statc+1;
sylvainkritter 0:39c9f3b49f5a 190
sylvainkritter 0:39c9f3b49f5a 191 }
sylvainkritter 0:39c9f3b49f5a 192 }
sylvainkritter 0:39c9f3b49f5a 193 }
sylvainkritter 0:39c9f3b49f5a 194
sylvainkritter 0:39c9f3b49f5a 195
sylvainkritter 0:39c9f3b49f5a 196 void sdtofile(const char sou[],const char des[])
sylvainkritter 0:39c9f3b49f5a 197 {
sylvainkritter 0:39c9f3b49f5a 198 pc.printf("open .bmp \r\n");
sylvainkritter 0:39c9f3b49f5a 199 int err = imagetr.BMP_tofile(0, 0, sou);
sylvainkritter 0:39c9f3b49f5a 200 if (err != 1) TFT.printf(" - Err: %d",err);
sylvainkritter 0:39c9f3b49f5a 201 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 202
sylvainkritter 0:39c9f3b49f5a 203 pc.printf("open .txt in write \r\n");
sylvainkritter 0:39c9f3b49f5a 204 fp = fopen(des, "w");
sylvainkritter 0:39c9f3b49f5a 205
sylvainkritter 0:39c9f3b49f5a 206 for (int i=0; i<tmarray; i++) {
sylvainkritter 0:39c9f3b49f5a 207 fputc(bank[i], fp);
sylvainkritter 0:39c9f3b49f5a 208 }
sylvainkritter 0:39c9f3b49f5a 209 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 210 pc.printf("open .txt in read \r\n");
sylvainkritter 0:39c9f3b49f5a 211 fp = fopen(des, "r");
sylvainkritter 0:39c9f3b49f5a 212 for (int i=0; i<tmarray; i++) {
sylvainkritter 0:39c9f3b49f5a 213 bank[i] =fgetc(fp);
sylvainkritter 0:39c9f3b49f5a 214 }
sylvainkritter 0:39c9f3b49f5a 215 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 216 TFT.Bitmap(0,120,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 217 }
sylvainkritter 0:39c9f3b49f5a 218 void pressedtargsd()
sylvainkritter 0:39c9f3b49f5a 219 {
sylvainkritter 0:39c9f3b49f5a 220 //start from first image in bankt extract target in bankta generate different target
sylvainkritter 0:39c9f3b49f5a 221 wait (0.1);
sylvainkritter 0:39c9f3b49f5a 222 if (my_button==0) {
sylvainkritter 0:39c9f3b49f5a 223
sylvainkritter 0:39c9f3b49f5a 224 imagetr.extrta();
sylvainkritter 0:39c9f3b49f5a 225 imagetr.ytorgbta(bankta,0,desfile);
sylvainkritter 0:39c9f3b49f5a 226 TFT.Bitmap(160,10,ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 227 TFT.fillrect(0,120,160,240,Green);
sylvainkritter 0:39c9f3b49f5a 228 pc.printf("clear bank \r\n");
sylvainkritter 0:39c9f3b49f5a 229 for (int i=0; i<tmarray; i++) {
sylvainkritter 0:39c9f3b49f5a 230 bank[i]=78;
sylvainkritter 0:39c9f3b49f5a 231 }
sylvainkritter 0:39c9f3b49f5a 232 fp = fopen(desfile, "r");
sylvainkritter 0:39c9f3b49f5a 233 pc.printf("get targetf \r\n");
sylvainkritter 0:39c9f3b49f5a 234 for (int i=0; i<tmarrayta; i++) {
sylvainkritter 0:39c9f3b49f5a 235 bank[i] =fgetc(fp);
sylvainkritter 0:39c9f3b49f5a 236 }
sylvainkritter 0:39c9f3b49f5a 237 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 238 imagetr.rgbtoyta();
sylvainkritter 0:39c9f3b49f5a 239 TFT.Bitmap(0,120,ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 240 for (int i = 0; i<7; i++) {
sylvainkritter 0:39c9f3b49f5a 241 imagetr.ytorgbtas(bankta,i);
sylvainkritter 0:39c9f3b49f5a 242 TFT.Bitmap(40*(i/3),120+30* (i%3),ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 243 }
sylvainkritter 0:39c9f3b49f5a 244 //sdtofile(des);
sylvainkritter 0:39c9f3b49f5a 245 }
sylvainkritter 0:39c9f3b49f5a 246 }
sylvainkritter 0:39c9f3b49f5a 247
sylvainkritter 0:39c9f3b49f5a 248 void affinem(bool rec)
sylvainkritter 0:39c9f3b49f5a 249 {
sylvainkritter 0:39c9f3b49f5a 250 bool c = false;
sylvainkritter 0:39c9f3b49f5a 251 float ad;
sylvainkritter 0:39c9f3b49f5a 252 meas0 = analog_value0.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 253 meas0 = meas0 * 320-160 ; // x colonnes
sylvainkritter 0:39c9f3b49f5a 254 if( fabs(meas0-measold0)>1 ) {
sylvainkritter 0:39c9f3b49f5a 255 measold0=meas0;
sylvainkritter 0:39c9f3b49f5a 256 c=true;
sylvainkritter 0:39c9f3b49f5a 257 }
sylvainkritter 0:39c9f3b49f5a 258 meas1 = analog_value1.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 259 meas1 = meas1 * 240 -120; // y lines
sylvainkritter 0:39c9f3b49f5a 260 if( fabs(meas1-measold1)>1 ) {
sylvainkritter 0:39c9f3b49f5a 261 measold1=meas1;
sylvainkritter 0:39c9f3b49f5a 262 c=true;
sylvainkritter 0:39c9f3b49f5a 263 }
sylvainkritter 0:39c9f3b49f5a 264
sylvainkritter 0:39c9f3b49f5a 265 meas2 = analog_value2.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 266 meas2 = meas2 -0.5f; // angle -0.5 a +0.5 (radiant)
sylvainkritter 0:39c9f3b49f5a 267 if( fabs(meas2-measold2)>0.1f ) {
sylvainkritter 0:39c9f3b49f5a 268 measold2=meas2;
sylvainkritter 0:39c9f3b49f5a 269 c=true;
sylvainkritter 0:39c9f3b49f5a 270 }
sylvainkritter 0:39c9f3b49f5a 271 meas3 = analog_value3.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 272 meas3 = 0.5f + (meas3 * 1.5f); // zoom max1.5
sylvainkritter 0:39c9f3b49f5a 273 if( fabs(meas3-measold3)>0.5f ) {
sylvainkritter 0:39c9f3b49f5a 274 measold3=meas3;
sylvainkritter 0:39c9f3b49f5a 275 c=true;
sylvainkritter 0:39c9f3b49f5a 276 }
sylvainkritter 0:39c9f3b49f5a 277 if(c) {
sylvainkritter 0:39c9f3b49f5a 278
sylvainkritter 0:39c9f3b49f5a 279 ad=180*meas2/3.14f;
sylvainkritter 0:39c9f3b49f5a 280 TFT.foreground(White);
sylvainkritter 0:39c9f3b49f5a 281 pc.printf("x: %d, y: %d, angle: %.2f zoom: %.2f \r\n", int(meas0),int(meas1), meas2, meas3);
sylvainkritter 0:39c9f3b49f5a 282 TFT.locate(170,45);
sylvainkritter 0:39c9f3b49f5a 283 printf("x %d",int(meas0));
sylvainkritter 0:39c9f3b49f5a 284 TFT.locate(170,65);
sylvainkritter 0:39c9f3b49f5a 285 printf("y %d",int(meas1));
sylvainkritter 0:39c9f3b49f5a 286 TFT.locate(170,105);
sylvainkritter 0:39c9f3b49f5a 287 printf("zoom %.2f",meas3);
sylvainkritter 0:39c9f3b49f5a 288 TFT.locate(170,85);
sylvainkritter 0:39c9f3b49f5a 289 printf("angle %.2f",ad);
sylvainkritter 0:39c9f3b49f5a 290 // imagetr.affine(0,0,0, 1.2);
sylvainkritter 0:39c9f3b49f5a 291 imagetr.affine(meas1,meas0,meas2, meas3);
sylvainkritter 0:39c9f3b49f5a 292 if (rec) {
sylvainkritter 0:39c9f3b49f5a 293 TFT.rect(160,120,160+ncta,120+nlta,Red);
sylvainkritter 0:39c9f3b49f5a 294 }
sylvainkritter 0:39c9f3b49f5a 295 }
sylvainkritter 0:39c9f3b49f5a 296 }
sylvainkritter 0:39c9f3b49f5a 297 void gentam(void)
sylvainkritter 0:39c9f3b49f5a 298 {
sylvainkritter 0:39c9f3b49f5a 299 bool c = false;
sylvainkritter 0:39c9f3b49f5a 300 float ad;
sylvainkritter 0:39c9f3b49f5a 301 meas0 = analog_value0.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 302 meas0 = meas0 * 0.2f + 0.8f; // tilt x 0-20%
sylvainkritter 0:39c9f3b49f5a 303 if( fabs(meas0-measold0)>0.05f ) {
sylvainkritter 0:39c9f3b49f5a 304 measold0=meas0;
sylvainkritter 0:39c9f3b49f5a 305 c=true;
sylvainkritter 0:39c9f3b49f5a 306 }
sylvainkritter 0:39c9f3b49f5a 307 meas1 = analog_value1.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 308 meas1 = meas1 * 0.2f+0.8f; // tilt y lines 0-20%
sylvainkritter 0:39c9f3b49f5a 309 if( fabs(meas1-measold1)>0.05f ) {
sylvainkritter 0:39c9f3b49f5a 310 measold1=meas1;
sylvainkritter 0:39c9f3b49f5a 311 c=true;
sylvainkritter 0:39c9f3b49f5a 312 }
sylvainkritter 0:39c9f3b49f5a 313
sylvainkritter 0:39c9f3b49f5a 314 meas2 = analog_value2.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 315 meas2 = meas2 -0.5f; // angle -0.5 a +0.5 (radiant)
sylvainkritter 0:39c9f3b49f5a 316 if( fabs(meas2-measold2)>0.1f ) {
sylvainkritter 0:39c9f3b49f5a 317 measold2=meas2;
sylvainkritter 0:39c9f3b49f5a 318 c=true;
sylvainkritter 0:39c9f3b49f5a 319 }
sylvainkritter 0:39c9f3b49f5a 320 meas3 = analog_value3.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 321 meas3 = 0.5f + (meas3 * 1.5f); // zoom max1.5
sylvainkritter 0:39c9f3b49f5a 322 if( fabs(meas3-measold3)>0.3f ) {
sylvainkritter 0:39c9f3b49f5a 323 measold3=meas3;
sylvainkritter 0:39c9f3b49f5a 324 c=true;
sylvainkritter 0:39c9f3b49f5a 325 }
sylvainkritter 0:39c9f3b49f5a 326 if(c) {
sylvainkritter 0:39c9f3b49f5a 327 ad=180*meas2/3.14f;
sylvainkritter 0:39c9f3b49f5a 328 TFT.foreground(White);
sylvainkritter 0:39c9f3b49f5a 329 //pc.printf("x: %d, y: %d, angle: %.2f zoom: %.2f \r\n", int(meas0),int(meas1), meas2, meas3);
sylvainkritter 0:39c9f3b49f5a 330 TFT.locate(170,45);
sylvainkritter 0:39c9f3b49f5a 331 printf("tiltx %2f",meas0);
sylvainkritter 0:39c9f3b49f5a 332 TFT.locate(170,65);
sylvainkritter 0:39c9f3b49f5a 333 printf("tilty %2f",meas1);
sylvainkritter 0:39c9f3b49f5a 334 TFT.locate(170,105);
sylvainkritter 0:39c9f3b49f5a 335 printf("zoom %.2f",meas3);
sylvainkritter 0:39c9f3b49f5a 336 TFT.locate(170,85);
sylvainkritter 0:39c9f3b49f5a 337 printf("angle %.2f",ad);
sylvainkritter 0:39c9f3b49f5a 338 // imagetr.affine(0,0,0, 1.2);
sylvainkritter 0:39c9f3b49f5a 339 imagetr.genta(meas1,meas0,meas2, meas3);
sylvainkritter 0:39c9f3b49f5a 340 }
sylvainkritter 0:39c9f3b49f5a 341 }
sylvainkritter 0:39c9f3b49f5a 342
sylvainkritter 0:39c9f3b49f5a 343
sylvainkritter 0:39c9f3b49f5a 344
sylvainkritter 0:39c9f3b49f5a 345 void luma(void)
sylvainkritter 0:39c9f3b49f5a 346 {
sylvainkritter 0:39c9f3b49f5a 347 float meas,measold;
sylvainkritter 0:39c9f3b49f5a 348 meas = analog_value3.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 349 meas = meas * 3; // 0 a 10
sylvainkritter 0:39c9f3b49f5a 350 if( fabs(meas-measold)>0.1f ) {
sylvainkritter 0:39c9f3b49f5a 351 pc.printf("lumi: %04f \r\n", meas);
sylvainkritter 0:39c9f3b49f5a 352 TFT.locate(170,85);
sylvainkritter 0:39c9f3b49f5a 353 TFT.foreground(White);
sylvainkritter 0:39c9f3b49f5a 354 printf("lumi %f",meas);
sylvainkritter 0:39c9f3b49f5a 355 imagetr.lumi(meas);
sylvainkritter 0:39c9f3b49f5a 356 measold=meas;
sylvainkritter 0:39c9f3b49f5a 357 }
sylvainkritter 0:39c9f3b49f5a 358
sylvainkritter 0:39c9f3b49f5a 359 }
sylvainkritter 0:39c9f3b49f5a 360
sylvainkritter 2:7e06db0773c1 361 void searchp(char name[])
sylvainkritter 0:39c9f3b49f5a 362 {
sylvainkritter 0:39c9f3b49f5a 363 bool c = false;
sylvainkritter 0:39c9f3b49f5a 364 float ad;
sylvainkritter 0:39c9f3b49f5a 365 meas0 = analog_value0.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 366 meas0 = meas0 * 320-160 ; // x colonnes
sylvainkritter 0:39c9f3b49f5a 367 if( fabs(meas0-measold0)>1 ) {
sylvainkritter 0:39c9f3b49f5a 368 measold0=meas0;
sylvainkritter 0:39c9f3b49f5a 369 c=true;
sylvainkritter 0:39c9f3b49f5a 370
sylvainkritter 0:39c9f3b49f5a 371 }
sylvainkritter 0:39c9f3b49f5a 372 meas1 = analog_value1.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 2:7e06db0773c1 373 meas1 = meas1 * 100000; // 0 a 100 000 - 50 000 is appropriate usually
sylvainkritter 0:39c9f3b49f5a 374 if( fabs(meas1-measold1)>200 ) {
sylvainkritter 0:39c9f3b49f5a 375 c=true;
sylvainkritter 0:39c9f3b49f5a 376 }
sylvainkritter 0:39c9f3b49f5a 377
sylvainkritter 0:39c9f3b49f5a 378 meas2 = analog_value2.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 379 meas2 = meas2 -0.5f; // angle -0.5 a +0.5 (radiant)
sylvainkritter 0:39c9f3b49f5a 380 if( fabs(meas2-measold2)>0.1f ) {
sylvainkritter 0:39c9f3b49f5a 381 measold2=meas2;
sylvainkritter 0:39c9f3b49f5a 382 c=true;
sylvainkritter 0:39c9f3b49f5a 383 }
sylvainkritter 0:39c9f3b49f5a 384 meas3 = analog_value3.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 385 meas3 = 0.5f + (meas3 * 1.5f); // zoom max1.5
sylvainkritter 0:39c9f3b49f5a 386 if( fabs(meas3-measold3)>0.5f ) {
sylvainkritter 0:39c9f3b49f5a 387 measold3=meas3;
sylvainkritter 0:39c9f3b49f5a 388 c=true;
sylvainkritter 0:39c9f3b49f5a 389 }
sylvainkritter 0:39c9f3b49f5a 390 if(c) {
sylvainkritter 0:39c9f3b49f5a 391 ad=180*meas2/3.14f;
sylvainkritter 0:39c9f3b49f5a 392 TFT.foreground(White);
sylvainkritter 0:39c9f3b49f5a 393 //pc.printf("x: %d, y: %d, angle: %.2f zoom: %.2f \r\n", int(meas0),int(meas1), meas2, meas3);
sylvainkritter 0:39c9f3b49f5a 394 TFT.locate(170,45);
sylvainkritter 2:7e06db0773c1 395 printf("x %4d",int(meas0));
sylvainkritter 0:39c9f3b49f5a 396 TFT.locate(170,65);
sylvainkritter 0:39c9f3b49f5a 397 printf("threshold %6d",int(meas1));
sylvainkritter 0:39c9f3b49f5a 398 TFT.locate(170,105);
sylvainkritter 2:7e06db0773c1 399 printf("zoom %4.2f",meas3);
sylvainkritter 0:39c9f3b49f5a 400 TFT.locate(170,85);
sylvainkritter 2:7e06db0773c1 401 printf("angle %4.2f",ad);
sylvainkritter 0:39c9f3b49f5a 402 imagetr.affine(0,meas0,meas2, meas3);
sylvainkritter 2:7e06db0773c1 403 imagetr.searchpat(meas1, name);
sylvainkritter 0:39c9f3b49f5a 404 }
sylvainkritter 0:39c9f3b49f5a 405 }
sylvainkritter 0:39c9f3b49f5a 406 void viewf(void)
sylvainkritter 0:39c9f3b49f5a 407 {
sylvainkritter 0:39c9f3b49f5a 408 imagetr.ytorgb(banktc);
sylvainkritter 0:39c9f3b49f5a 409 TFT.Bitmap(160,120,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 410 }
sylvainkritter 0:39c9f3b49f5a 411
sylvainkritter 0:39c9f3b49f5a 412 void extedgem(void)
sylvainkritter 0:39c9f3b49f5a 413 {
sylvainkritter 0:39c9f3b49f5a 414 bool c = false;
sylvainkritter 0:39c9f3b49f5a 415 meas0 = analog_value0.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 416 meas0 = meas0 * 50; // 0 to 50 max threshod
sylvainkritter 0:39c9f3b49f5a 417 if( fabs(meas0-measold0)>1) {
sylvainkritter 0:39c9f3b49f5a 418 measold0=meas0;
sylvainkritter 0:39c9f3b49f5a 419 c=true;
sylvainkritter 0:39c9f3b49f5a 420 }
sylvainkritter 0:39c9f3b49f5a 421 meas1 = analog_value1.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 422 meas1 = meas1 * 50 ; // min threshold 0 50
sylvainkritter 0:39c9f3b49f5a 423 if( fabs(meas1-measold1)>1 ) {
sylvainkritter 0:39c9f3b49f5a 424 measold1=meas1;
sylvainkritter 0:39c9f3b49f5a 425 c=true;
sylvainkritter 0:39c9f3b49f5a 426 }
sylvainkritter 0:39c9f3b49f5a 427 meas2 = analog_value2.read(); // Converts and read the analog input value (value from 0.0 to 1.0)
sylvainkritter 0:39c9f3b49f5a 428 meas2 = meas2 * 5 ; // thrshold
sylvainkritter 0:39c9f3b49f5a 429 if( fabs(meas2-measold2)>1 ) {
sylvainkritter 0:39c9f3b49f5a 430 measold2=meas2;
sylvainkritter 0:39c9f3b49f5a 431 c=true;
sylvainkritter 0:39c9f3b49f5a 432 }
sylvainkritter 0:39c9f3b49f5a 433
sylvainkritter 0:39c9f3b49f5a 434 if (c) {
sylvainkritter 0:39c9f3b49f5a 435 //pc.printf("x: %d, y: %d \r\n", int(meas0),int(meas1));
sylvainkritter 0:39c9f3b49f5a 436 imagetr.extedge(meas1,meas0, meas2);
sylvainkritter 0:39c9f3b49f5a 437 }
sylvainkritter 0:39c9f3b49f5a 438 }
sylvainkritter 0:39c9f3b49f5a 439 void loadtargettxt(const char sou[])
sylvainkritter 0:39c9f3b49f5a 440 {
sylvainkritter 0:39c9f3b49f5a 441 imagetr.getimage(sou);
sylvainkritter 0:39c9f3b49f5a 442 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 443 imagetr.rgbtoy();
sylvainkritter 0:39c9f3b49f5a 444 imagetr.ytorgb(bankt);
sylvainkritter 0:39c9f3b49f5a 445 TFT.Bitmap(160,120,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 446 }
sylvainkritter 0:39c9f3b49f5a 447
sylvainkritter 0:39c9f3b49f5a 448 void loadtarget(const char sou[])
sylvainkritter 0:39c9f3b49f5a 449 {
sylvainkritter 0:39c9f3b49f5a 450 int err = imagetr.BMP_tofile(0, 0, sou);
sylvainkritter 0:39c9f3b49f5a 451 if (err != 1) TFT.printf(" - Err: %d",err);
sylvainkritter 0:39c9f3b49f5a 452 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 453 imagetr.rgbtoy();
sylvainkritter 0:39c9f3b49f5a 454 //imagetr.ytorgb(bankt);
sylvainkritter 0:39c9f3b49f5a 455 //TFT.Bitmap(160,120,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 456 }
sylvainkritter 0:39c9f3b49f5a 457 void loadtargeted(const char sou[])
sylvainkritter 0:39c9f3b49f5a 458 {
sylvainkritter 0:39c9f3b49f5a 459 int err = imagetr.BMP_tofile(0, 0, sou);
sylvainkritter 0:39c9f3b49f5a 460 if (err != 1) TFT.printf(" - Err: %d",err);
sylvainkritter 0:39c9f3b49f5a 461 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 462 imagetr.rgbtoy();
sylvainkritter 0:39c9f3b49f5a 463 imagetr.extedge(0,0,2);
sylvainkritter 0:39c9f3b49f5a 464 for (int i=0; i<nl; i=i+1) {
sylvainkritter 0:39c9f3b49f5a 465 for (int j=0; j<nc; j=j+1) {
sylvainkritter 0:39c9f3b49f5a 466 bankt[i][j]= banktc[i][j];
sylvainkritter 0:39c9f3b49f5a 467 }
sylvainkritter 0:39c9f3b49f5a 468 }
sylvainkritter 0:39c9f3b49f5a 469 imagetr.ytorgb(bankt);
sylvainkritter 0:39c9f3b49f5a 470 TFT.Bitmap(160,120,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 471 }
sylvainkritter 0:39c9f3b49f5a 472 void loadpat(const char pat[])
sylvainkritter 0:39c9f3b49f5a 473 {
sylvainkritter 0:39c9f3b49f5a 474 imagetr.getimage(pat);
sylvainkritter 2:7e06db0773c1 475 for (int i=0; i<25; i++) {
sylvainkritter 2:7e06db0773c1 476 if (pat[i+4]!='.') { filename[i]=pat[i+4];} else {break;}
sylvainkritter 2:7e06db0773c1 477 }
sylvainkritter 2:7e06db0773c1 478 pc . printf("f : %s\r\n", filename);
sylvainkritter 0:39c9f3b49f5a 479 TFT.Bitmap(160,0,ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 480 imagetr.rgbtoyta();
sylvainkritter 0:39c9f3b49f5a 481 for (int i = 0; i<7; i++) {
sylvainkritter 0:39c9f3b49f5a 482 imagetr.ytorgbtas(bankta,i);
sylvainkritter 0:39c9f3b49f5a 483 TFT.Bitmap(40*(i/3),120+30* (i%3),ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 484 }
sylvainkritter 0:39c9f3b49f5a 485 }
sylvainkritter 0:39c9f3b49f5a 486 void loadpated(const char pat[])
sylvainkritter 0:39c9f3b49f5a 487 {
sylvainkritter 0:39c9f3b49f5a 488 imagetr.getimage(pat);
sylvainkritter 2:7e06db0773c1 489 for (int i=0; i<25; i++) {
sylvainkritter 2:7e06db0773c1 490 if (pat[i+4]!='.') { filename[i]=pat[i+4];} else {break;}
sylvainkritter 2:7e06db0773c1 491 }
sylvainkritter 2:7e06db0773c1 492 pc . printf("f : %s\r\n", filename);
sylvainkritter 0:39c9f3b49f5a 493 TFT.Bitmap(160,0,ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 494 imagetr.rgbtoytaed();
sylvainkritter 0:39c9f3b49f5a 495 for (int i = 0; i<7; i++) {
sylvainkritter 0:39c9f3b49f5a 496 imagetr.ytorgbtas(bankta,i);
sylvainkritter 0:39c9f3b49f5a 497 TFT.Bitmap(40*(i/3),120+30* (i%3),ncta,nlta,bank);
sylvainkritter 0:39c9f3b49f5a 498 }
sylvainkritter 0:39c9f3b49f5a 499 }
sylvainkritter 0:39c9f3b49f5a 500 void readregister()
sylvainkritter 0:39c9f3b49f5a 501 {
sylvainkritter 0:39c9f3b49f5a 502 int tempo ;
sylvainkritter 0:39c9f3b49f5a 503 pc.printf("PID %02x \r\n", OV7670.ReadReg(REG_PID));
sylvainkritter 0:39c9f3b49f5a 504 pc.printf("VER %0.2x \r\n", OV7670.ReadReg(REG_VER));
sylvainkritter 0:39c9f3b49f5a 505
sylvainkritter 0:39c9f3b49f5a 506 pc.printf("Lecture Registres...\r\n") ;
sylvainkritter 0:39c9f3b49f5a 507 pc.printf("AD : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F") ;
sylvainkritter 0:39c9f3b49f5a 508 for (int i=0; i<OV7670_REGMAX; i++) {
sylvainkritter 0:39c9f3b49f5a 509
sylvainkritter 0:39c9f3b49f5a 510 tempo = OV7670.ReadReg(i) ; // READ REG
sylvainkritter 0:39c9f3b49f5a 511 if ((i & 0x0F) == 0) {
sylvainkritter 0:39c9f3b49f5a 512 pc.printf("\r\n%02X : ",i) ;
sylvainkritter 0:39c9f3b49f5a 513 }
sylvainkritter 0:39c9f3b49f5a 514 pc.printf("%02X ",tempo) ;
sylvainkritter 0:39c9f3b49f5a 515 }
sylvainkritter 0:39c9f3b49f5a 516 pc.printf("\r\n") ;
sylvainkritter 0:39c9f3b49f5a 517 }
sylvainkritter 0:39c9f3b49f5a 518 void testsd(void)
sylvainkritter 0:39c9f3b49f5a 519 {
sylvainkritter 0:39c9f3b49f5a 520 //Perform a write test to SD
sylvainkritter 0:39c9f3b49f5a 521 // Set up the SD
sylvainkritter 0:39c9f3b49f5a 522 sd.disk_initialize();
sylvainkritter 0:39c9f3b49f5a 523 pc.printf("\nWriting to SD card...");
sylvainkritter 0:39c9f3b49f5a 524 fp = fopen("/sd/sdtest.txt", "w");
sylvainkritter 0:39c9f3b49f5a 525 if (fp != NULL) {
sylvainkritter 0:39c9f3b49f5a 526 fprintf(fp, "We're writing to an SD card!");
sylvainkritter 0:39c9f3b49f5a 527 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 528 pc.printf("success!\r\n");
sylvainkritter 0:39c9f3b49f5a 529 } else {
sylvainkritter 0:39c9f3b49f5a 530 pc.printf("failed!\r\n");
sylvainkritter 0:39c9f3b49f5a 531 }
sylvainkritter 0:39c9f3b49f5a 532 //Perform a read test
sylvainkritter 0:39c9f3b49f5a 533 pc.printf("Reading from SD card...");
sylvainkritter 0:39c9f3b49f5a 534 fp = fopen("/sd/sdtest.txt", "r");
sylvainkritter 0:39c9f3b49f5a 535 if (fp != NULL) {
sylvainkritter 0:39c9f3b49f5a 536 char c = fgetc(fp);
sylvainkritter 0:39c9f3b49f5a 537 if (c == 'W')
sylvainkritter 0:39c9f3b49f5a 538 pc.printf("success!\r\n");
sylvainkritter 0:39c9f3b49f5a 539 else
sylvainkritter 0:39c9f3b49f5a 540 pc.printf("incorrect char (%c)!\r\n", c);
sylvainkritter 0:39c9f3b49f5a 541 fclose(fp);
sylvainkritter 0:39c9f3b49f5a 542 } else {
sylvainkritter 0:39c9f3b49f5a 543 pc.printf("failed!\r\n");
sylvainkritter 0:39c9f3b49f5a 544 }
sylvainkritter 0:39c9f3b49f5a 545 }
sylvainkritter 0:39c9f3b49f5a 546
sylvainkritter 0:39c9f3b49f5a 547 void capturecycle(const char des[])
sylvainkritter 0:39c9f3b49f5a 548 {
sylvainkritter 0:39c9f3b49f5a 549 strcpy( desfile,des);
sylvainkritter 0:39c9f3b49f5a 550 if (statc==0||statc==1) {
sylvainkritter 0:39c9f3b49f5a 551 OV7670.CaptureNext() ;
sylvainkritter 0:39c9f3b49f5a 552 OV7670.exrgbf(0);
sylvainkritter 0:39c9f3b49f5a 553 TFT.Bitmap(0,120,160,120,bankf);
sylvainkritter 0:39c9f3b49f5a 554 OV7670.exrgbf(1);
sylvainkritter 0:39c9f3b49f5a 555 TFT.Bitmap(160,120,160,120,bankf);
sylvainkritter 0:39c9f3b49f5a 556 OV7670.exrgbf(2);
sylvainkritter 0:39c9f3b49f5a 557 TFT.Bitmap(0,0,160,120,bankf);
sylvainkritter 0:39c9f3b49f5a 558 OV7670.exrgbf(3);
sylvainkritter 0:39c9f3b49f5a 559 TFT.Bitmap(160,0,160,120,bankf);
sylvainkritter 0:39c9f3b49f5a 560 }
sylvainkritter 0:39c9f3b49f5a 561 if (statc==2) {
sylvainkritter 0:39c9f3b49f5a 562 OV7670.CaptureNext() ;
sylvainkritter 0:39c9f3b49f5a 563 TFT.fillrect(0,120,160,240,Green);
sylvainkritter 0:39c9f3b49f5a 564 TFT.fillrect(160,0,320,120,Green);
sylvainkritter 0:39c9f3b49f5a 565 TFT.foreground(Yellow);
sylvainkritter 0:39c9f3b49f5a 566 TFT.locate(170,108);
sylvainkritter 0:39c9f3b49f5a 567 printf("captured picture");
sylvainkritter 0:39c9f3b49f5a 568 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 569 TFT.Bitmap(160,120,160,120,bankf);
sylvainkritter 0:39c9f3b49f5a 570 }
sylvainkritter 0:39c9f3b49f5a 571 }
sylvainkritter 0:39c9f3b49f5a 572
sylvainkritter 0:39c9f3b49f5a 573
sylvainkritter 0:39c9f3b49f5a 574 void epatternmatch(const char tar[],const char pat[])
sylvainkritter 0:39c9f3b49f5a 575 {
sylvainkritter 0:39c9f3b49f5a 576 loadtarget(tar);
sylvainkritter 0:39c9f3b49f5a 577 loadpat(pat);
sylvainkritter 0:39c9f3b49f5a 578 TFT.set_font((unsigned char*) Arial12x12);
sylvainkritter 0:39c9f3b49f5a 579 TFT.foreground(Red);
sylvainkritter 0:39c9f3b49f5a 580 }
sylvainkritter 0:39c9f3b49f5a 581 void epatternmatched(const char tar[],const char pat[])
sylvainkritter 0:39c9f3b49f5a 582 {
sylvainkritter 0:39c9f3b49f5a 583 loadtargeted(tar);
sylvainkritter 0:39c9f3b49f5a 584 loadpated(pat);
sylvainkritter 0:39c9f3b49f5a 585 TFT.set_font((unsigned char*) Arial12x12);
sylvainkritter 0:39c9f3b49f5a 586 TFT.foreground(Red);
sylvainkritter 0:39c9f3b49f5a 587 }
sylvainkritter 0:39c9f3b49f5a 588 void epatca(const char tar[],const char pat[])
sylvainkritter 0:39c9f3b49f5a 589 {
sylvainkritter 0:39c9f3b49f5a 590 loadtargettxt(tar);
sylvainkritter 0:39c9f3b49f5a 591 loadpat(pat);
sylvainkritter 0:39c9f3b49f5a 592 TFT.set_font((unsigned char*) Arial12x12);
sylvainkritter 0:39c9f3b49f5a 593 TFT.foreground(Red);
sylvainkritter 0:39c9f3b49f5a 594 }
sylvainkritter 0:39c9f3b49f5a 595 void patternmatch(const char pat[])
sylvainkritter 0:39c9f3b49f5a 596 {
sylvainkritter 0:39c9f3b49f5a 597 my_button.fall(&pressedtargca);
sylvainkritter 0:39c9f3b49f5a 598 OV7670.CaptureNext() ;
sylvainkritter 0:39c9f3b49f5a 599 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 600 loadpat(pat);
sylvainkritter 0:39c9f3b49f5a 601 TFT.set_font((unsigned char*) Arial12x12);
sylvainkritter 0:39c9f3b49f5a 602 TFT.foreground(Red);
sylvainkritter 0:39c9f3b49f5a 603 }
sylvainkritter 0:39c9f3b49f5a 604
sylvainkritter 0:39c9f3b49f5a 605 void targetfromca(const char des[],const char pat[])
sylvainkritter 0:39c9f3b49f5a 606 {
sylvainkritter 0:39c9f3b49f5a 607 OV7670.CaptureNext() ;
sylvainkritter 0:39c9f3b49f5a 608 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 609 imagetr.rgbtoy();
sylvainkritter 0:39c9f3b49f5a 610 strcpy( desfile,des);
sylvainkritter 0:39c9f3b49f5a 611 strcpy( patfile,pat);
sylvainkritter 0:39c9f3b49f5a 612 my_button.fall(&pressedtargnewca);
sylvainkritter 0:39c9f3b49f5a 613 }
sylvainkritter 0:39c9f3b49f5a 614 void loadnewca()
sylvainkritter 0:39c9f3b49f5a 615 {
sylvainkritter 0:39c9f3b49f5a 616 OV7670.CaptureNext() ;
sylvainkritter 0:39c9f3b49f5a 617 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 618 imagetr.rgbtoy();
sylvainkritter 0:39c9f3b49f5a 619 }
sylvainkritter 0:39c9f3b49f5a 620
sylvainkritter 0:39c9f3b49f5a 621 void targetfromsd(const char sou[],const char des[])
sylvainkritter 0:39c9f3b49f5a 622 {
sylvainkritter 0:39c9f3b49f5a 623 int err = imagetr.BMP_tofile(0, 0, sou);
sylvainkritter 0:39c9f3b49f5a 624 if (err != 1) pc.printf(" - Err: %d",err);
sylvainkritter 0:39c9f3b49f5a 625 TFT.Bitmap(0,0,160,120,bank);
sylvainkritter 0:39c9f3b49f5a 626 imagetr.rgbtoy();
sylvainkritter 0:39c9f3b49f5a 627 strcpy( desfile,des);
sylvainkritter 0:39c9f3b49f5a 628 TFT.rect(160,120,160+ncta,120+nlta,Red);
sylvainkritter 0:39c9f3b49f5a 629 my_button.fall(&pressedtargsd);
sylvainkritter 0:39c9f3b49f5a 630 }
sylvainkritter 0:39c9f3b49f5a 631
sylvainkritter 0:39c9f3b49f5a 632
sylvainkritter 0:39c9f3b49f5a 633 int main()
sylvainkritter 0:39c9f3b49f5a 634 {
sylvainkritter 0:39c9f3b49f5a 635 myled=0;
sylvainkritter 0:39c9f3b49f5a 636 statc=0;
sylvainkritter 0:39c9f3b49f5a 637
sylvainkritter 0:39c9f3b49f5a 638
sylvainkritter 0:39c9f3b49f5a 639 // Set up the TFT
sylvainkritter 0:39c9f3b49f5a 640 TFT.claim(stdout); // Send stdout to the TFT display
sylvainkritter 0:39c9f3b49f5a 641 TFT.background(Black); // Set background to black
sylvainkritter 0:39c9f3b49f5a 642 TFT.foreground(White); // Set chars to white
sylvainkritter 0:39c9f3b49f5a 643 TFT.cls(); // Clear the screen
sylvainkritter 0:39c9f3b49f5a 644 TFT.set_font((unsigned char*) Arial12x12); // Select the font
sylvainkritter 0:39c9f3b49f5a 645 TFT.set_orientation(3); // Select orientation
sylvainkritter 0:39c9f3b49f5a 646 TFT.locate(0,0);
sylvainkritter 0:39c9f3b49f5a 647 printf(" Hello Mbed ");
sylvainkritter 0:39c9f3b49f5a 648 OV7670.Reset();
sylvainkritter 0:39c9f3b49f5a 649 OV7670.Init("RGB", QQVGA);
sylvainkritter 0:39c9f3b49f5a 650 pc.printf("Hello World !\r\n");
sylvainkritter 0:39c9f3b49f5a 651 //////////////////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 652 // to view camera
sylvainkritter 2:7e06db0773c1 653 /*
sylvainkritter 0:39c9f3b49f5a 654 my_button.fall(&pressed);
sylvainkritter 0:39c9f3b49f5a 655
sylvainkritter 0:39c9f3b49f5a 656 while (1) {
sylvainkritter 0:39c9f3b49f5a 657 capturecycle("/sd/picture.txt");
sylvainkritter 0:39c9f3b49f5a 658 }
sylvainkritter 0:39c9f3b49f5a 659 }
sylvainkritter 2:7e06db0773c1 660 */
sylvainkritter 0:39c9f3b49f5a 661 //////////////////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 662 //////////////////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 663 // to create a target from a .bmp to sd
sylvainkritter 0:39c9f3b49f5a 664 /*
sylvainkritter 0:39c9f3b49f5a 665 targetfromsd("/sd/manchodou.bmp","/sd/manchodou.txt");
sylvainkritter 0:39c9f3b49f5a 666 while (1) {
sylvainkritter 0:39c9f3b49f5a 667 viewf();
sylvainkritter 0:39c9f3b49f5a 668 __disable_irq(); // Disable Interrupts
sylvainkritter 0:39c9f3b49f5a 669 affinem(true);
sylvainkritter 0:39c9f3b49f5a 670 __enable_irq(); // Enable Interrupts
sylvainkritter 0:39c9f3b49f5a 671 }
sylvainkritter 0:39c9f3b49f5a 672 }
sylvainkritter 0:39c9f3b49f5a 673 */
sylvainkritter 0:39c9f3b49f5a 674 //////////////////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 675 // to recognise a target from bmp and target on sd
sylvainkritter 2:7e06db0773c1 676
sylvainkritter 0:39c9f3b49f5a 677 epatternmatch("/sd/manchodou.bmp","/sd/manchodou.txt");
sylvainkritter 0:39c9f3b49f5a 678 while (1) {
sylvainkritter 0:39c9f3b49f5a 679 viewf();
sylvainkritter 2:7e06db0773c1 680 searchp(filename);
sylvainkritter 0:39c9f3b49f5a 681 }
sylvainkritter 0:39c9f3b49f5a 682 }
sylvainkritter 2:7e06db0773c1 683
sylvainkritter 0:39c9f3b49f5a 684 //////////////////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 685 //////////////////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 686 // to recognise a target from bmp and target on sd, on edge
sylvainkritter 0:39c9f3b49f5a 687 /*
sylvainkritter 0:39c9f3b49f5a 688 epatternmatched("/sd/manchodou.bmp","/sd/manchodou.txt");
sylvainkritter 0:39c9f3b49f5a 689 while (1) {
sylvainkritter 0:39c9f3b49f5a 690
sylvainkritter 0:39c9f3b49f5a 691 viewf();
sylvainkritter 2:7e06db0773c1 692 searchp(filename);
sylvainkritter 0:39c9f3b49f5a 693 }
sylvainkritter 0:39c9f3b49f5a 694 }
sylvainkritter 0:39c9f3b49f5a 695 */
sylvainkritter 0:39c9f3b49f5a 696 //////////////////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 697 //to create a target from camera
sylvainkritter 0:39c9f3b49f5a 698 /*
sylvainkritter 0:39c9f3b49f5a 699 targetfromca("/sd/man.txt","/sd/man2.txt");
sylvainkritter 0:39c9f3b49f5a 700 while (1) {
sylvainkritter 0:39c9f3b49f5a 701
sylvainkritter 0:39c9f3b49f5a 702 __disable_irq(); // Disable Interrupts
sylvainkritter 0:39c9f3b49f5a 703 if (statc==0) {
sylvainkritter 0:39c9f3b49f5a 704 loadnewca();
sylvainkritter 0:39c9f3b49f5a 705 }
sylvainkritter 0:39c9f3b49f5a 706 affinem(true);
sylvainkritter 0:39c9f3b49f5a 707 __enable_irq(); // Enable Interrupts
sylvainkritter 0:39c9f3b49f5a 708
sylvainkritter 0:39c9f3b49f5a 709 // if (statc==0) { searchp();} else {affinem(false);}
sylvainkritter 0:39c9f3b49f5a 710 viewf();
sylvainkritter 0:39c9f3b49f5a 711
sylvainkritter 0:39c9f3b49f5a 712 }
sylvainkritter 0:39c9f3b49f5a 713 }
sylvainkritter 0:39c9f3b49f5a 714 */
sylvainkritter 0:39c9f3b49f5a 715 ////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 716 //to search pattern from .txt
sylvainkritter 0:39c9f3b49f5a 717 /*
sylvainkritter 0:39c9f3b49f5a 718 epatca("/sd/man.txt","/sd/man2.txt");
sylvainkritter 0:39c9f3b49f5a 719 while (1) {
sylvainkritter 0:39c9f3b49f5a 720 viewf();
sylvainkritter 2:7e06db0773c1 721 searchp(filename);
sylvainkritter 0:39c9f3b49f5a 722 }
sylvainkritter 0:39c9f3b49f5a 723 }
sylvainkritter 0:39c9f3b49f5a 724 */
sylvainkritter 0:39c9f3b49f5a 725 ////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 726 //to search pattern from camera
sylvainkritter 0:39c9f3b49f5a 727 /*
sylvainkritter 0:39c9f3b49f5a 728 patternmatch("/sd/man2.txt");
sylvainkritter 0:39c9f3b49f5a 729 while (1) {
sylvainkritter 0:39c9f3b49f5a 730 loadnewca();
sylvainkritter 0:39c9f3b49f5a 731 viewf();
sylvainkritter 0:39c9f3b49f5a 732 if (statc==0) {
sylvainkritter 2:7e06db0773c1 733 searchp(filename);
sylvainkritter 0:39c9f3b49f5a 734 } else {
sylvainkritter 0:39c9f3b49f5a 735 affinem(false);
sylvainkritter 0:39c9f3b49f5a 736 }
sylvainkritter 0:39c9f3b49f5a 737 }
sylvainkritter 0:39c9f3b49f5a 738 }
sylvainkritter 0:39c9f3b49f5a 739 */
sylvainkritter 0:39c9f3b49f5a 740 ////////////////////////////////////////////
sylvainkritter 0:39c9f3b49f5a 741 // to extract edge from image in bmp
sylvainkritter 0:39c9f3b49f5a 742 /*
sylvainkritter 0:39c9f3b49f5a 743 loadtarget("/sd/manchodou.bmp");
sylvainkritter 0:39c9f3b49f5a 744 while (1) {
sylvainkritter 0:39c9f3b49f5a 745 viewf();
sylvainkritter 0:39c9f3b49f5a 746 extedgem();
sylvainkritter 0:39c9f3b49f5a 747 }
sylvainkritter 0:39c9f3b49f5a 748 }
sylvainkritter 2:7e06db0773c1 749 */