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
main.cpp@5:761794587e4e, 2016-03-14 (annotated)
- 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?
User | Revision | Line number | New 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 | */ |