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:
Mon Mar 14 17:49:40 2016 +0000
Revision:
5:761794587e4e
Parent:
3:19b0a9d60055
Change default in main to display image

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