Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem
Fork of mbed-os-example-mbed5-blinky by
main.cpp
00001 #include "mbed.h" 00002 #include "RF24.h" 00003 #include "ILI9486.h" 00004 #include "DisplayBace.h" 00005 #include "SDFileSystem.h" 00006 #include "JPEG_Converter.h" 00007 00008 #include "HTTPServer.h" 00009 #include "FsHandler.h" 00010 00011 #include "rtos.h" 00012 00013 #include "stdio.h" 00014 #include "string" 00015 #include "Arial12x12.h" 00016 #include "Arial28x28.h" 00017 #include "Arial24x23.h" 00018 //#include "Terminal6x8.h" 00019 #include "Arial43x48_numb.h" 00020 #include "pict.h" 00021 #include "pavement_48x34.h" 00022 #include "Touch.h" 00023 00024 #include "camera.h" 00025 #include "EthernetInterface.h" 00026 00027 //Initialization 00028 Serial uart(USBTX, USBRX); 00029 ILI9486 myLCD(SPI_16, 16000000, P4_6, NC, P4_4, P4_5, P2_14, P8_1,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset, dc 00030 TouchScreenADS7843 TP(P4_6 ,P4_7 ,P4_4 ,P2_9 ,P7_15, &myLCD);// ADS7843 -> mosi, miso, sclk, cs, irq, SPI_myLCD 00031 SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd"); 00032 RF24 radio(P10_14,P10_15, P10_12,P8_14, P10_13); // mosi, miso, sck, csn, ce, irq 00033 00034 AnalogIn temp(A4); 00035 DigitalOut led3(LED3); 00036 int temp_count=0,in_pic=0; 00037 00038 struct Screen { 00039 int16_t title[60*320]; 00040 int titlex,titley; 00041 int16_t logo[80*320]; 00042 int logox,logoy; 00043 int16_t hc[157*156]; 00044 int hcx,hcy,hch,hcw; 00045 int16_t aut[158*156]; 00046 int autx,auty,autw,auth; 00047 int16_t sec[157*158]; 00048 int secx,secy,secw,sech; 00049 int16_t ind[158*158]; 00050 int indx,indy,indw,indh; 00051 int indsize; 00052 int secsize; 00053 int autsize; 00054 int hcsize; 00055 int logosize; 00056 int titlesize; 00057 } dis_nav; 00058 00059 //Variables 00060 unsigned short backgroundcolor=Black; 00061 unsigned short foregroundcolor=Red; 00062 int pos[4]; 00063 int16_t colors[16]= { 00064 0x000F,0x0000,0x03E0,0x03EF,0x7800,0x780F,0x7BE0,0xC618,0x7BEF,0x001F,0x07E0,0x07FF,0xF800,0xF81F,0xFFE0,0xFFFF 00065 }; 00066 int color_count=0; 00067 int cam_sel=0; 00068 int ind_speed=0; 00069 int ind_of=0; 00070 int16_t prev_col=0; 00071 EthernetInterface network; 00072 HTTPServer svr; 00073 TCPSocketServer rf_server; 00074 TCPSocketConnection client; 00075 00076 00077 static unsigned short col_buf[PIXEL_VW][PIXEL_HW]__attribute((section("NC_BSS"),aligned(8))); //8 bytes aligned!; 00078 static uint8_t JCUBuffer_OUTPUT[PIXEL_HW * VIDEO_BUFFER_HEIGHT*4]__attribute((section("NC_BSS"),aligned(8))); //8 bytes aligned!; 00079 00080 00081 00082 //Init LCD and touch 00083 void Init_lcd_touch() 00084 { 00085 Matrix matrix; 00086 Coordinate ScreenSample[3]; 00087 myLCD.set_orientation(2); 00088 // myLCD.claim(stdout); // send stdout to the LCD display 00089 //myLCD.claim(stderr); // send stderr to the LCD display 00090 myLCD.background(backgroundcolor); // set background to black 00091 myLCD.foreground(foregroundcolor); // set chars to white 00092 myLCD.cls(); 00093 myLCD.set_font((unsigned char*) Arial12x12); 00094 myLCD.locate(0,20); 00095 TP.TouchPanel_Calibrate(); 00096 00097 // myLCD.set_orientation(0); 00098 // Display calibration values 00099 TP.GetCalibration(&matrix, &ScreenSample[0]); 00100 myLCD.cls(); 00101 myLCD.locate(0,20); 00102 // read calibration results 00103 printf("Read calibration results.\n"); 00104 printf("matrix.An = %d\n", matrix.An); 00105 printf("matrix.Bn = %d\n", matrix.Bn); 00106 printf("matrix.Cn = %d\n", matrix.Cn); 00107 printf("matrix.Dn = %d\n", matrix.Dn); 00108 printf("matrix.En = %d\n", matrix.En); 00109 printf("matrix.Fn = %d\n", matrix.Fn); 00110 printf("matrix.Di = %d\n", matrix.Divider); 00111 for (int i=0; i<3; i++) 00112 printf("sample x[%d] = %d\nsample y[%d] = %d\n", i, ScreenSample[i].x, i, ScreenSample[i].y); 00113 // Write calibration results 00114 printf("\nWrite calibration results...\n"); 00115 TP.SetCalibration(&matrix, &ScreenSample[0]); 00116 printf("Done.\nTouch panel to start\n"); 00117 while(TP._tp_irq); 00118 } 00119 00120 int get_xy() 00121 { 00122 int x=0; 00123 if(!TP._tp_irq) { 00124 if (TP.Read_Ads7843()) { 00125 TP.getDisplayPoint() ; 00126 //myLCD.cls(); 00127 //myLCD.locate(20,0); 00128 // TP.TP_DrawPoint(TP.display.x,TP.display.y, Blue); 00129 x=1; 00130 } 00131 } 00132 wait(0.1); 00133 return x; 00134 } 00135 00136 void init_dis_nav() 00137 { 00138 dis_nav.indsize=158*158; 00139 dis_nav.secsize=157*158; 00140 dis_nav.autsize=158*156; 00141 dis_nav.hcsize=157*156; 00142 dis_nav.logosize=80*320; 00143 dis_nav.titlesize=60*320; 00144 myLCD.BMP_16(0,0,"/sd/gui/title.bmp",dis_nav.title); 00145 dis_nav.titlex=0; 00146 dis_nav.titley=0; 00147 myLCD.BMP_16(0,400,"/sd/gui/logo.bmp",dis_nav.logo); 00148 dis_nav.logox=0; 00149 dis_nav.logoy=400; 00150 myLCD.BMP_16(0,81,"/sd/gui/hc.bmp",dis_nav.hc); 00151 dis_nav.hcx=0; 00152 dis_nav.hcy=81; 00153 dis_nav.hcw=157; 00154 dis_nav.hch=158; 00155 //myLCD.fillrect(161,81,319,237,White); 00156 myLCD.BMP_16(dis_nav.autx=161,dis_nav.auty=81,"/sd/gui/auto.bmp",dis_nav.aut); 00157 dis_nav.autw=158; 00158 dis_nav.auth=156; 00159 //myLCD.fillrect(0,241,157,399,White); 00160 myLCD.BMP_16(dis_nav.secx=0,dis_nav.secy=241,"/sd/gui/secu.bmp",dis_nav.sec); 00161 dis_nav.secw=157; 00162 dis_nav.sech=158; 00163 //myLCD.fillrect(161,241,319,399,White); 00164 myLCD.BMP_16(dis_nav.indx=161,dis_nav.indy=241,"/sd/gui/indus.bmp",dis_nav.ind); 00165 dis_nav.indw=158; 00166 dis_nav.indh=158; 00167 } 00168 00169 void init_gui() 00170 { 00171 init_dis_nav(); 00172 myLCD.cls(); 00173 myLCD.BMP_disp(dis_nav.titlex,dis_nav.titley,dis_nav.title,dis_nav.titlesize,0,60); 00174 myLCD.BMP_disp(dis_nav.logox,dis_nav.logoy,dis_nav.logo,dis_nav.logosize,0,80); 00175 myLCD.rect(0,60,319,80,Red); 00176 myLCD.rect(1,61,318,79,Red); 00177 myLCD.locate(4,65); 00178 // myLCD.fillrect(0,81,157,237,White); 00179 myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch); 00180 //myLCD.fillrect(161,81,319,237,White); 00181 myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth); 00182 //myLCD.fillrect(0,241,157,399,White); 00183 myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech); 00184 //myLCD.fillrect(161,241,319,399,White); 00185 myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh); 00186 myLCD.set_font((unsigned char*) Arial12x12); 00187 myLCD.printf("Select a menu"); 00188 for(int i=158; i<160; i++) { 00189 myLCD.line(i,80,i,400,Blue); 00190 } 00191 for(int i=238; i<240; i++) { 00192 myLCD.line(0,i,319,i,Blue); 00193 } 00194 00195 } 00196 00197 00198 void set_ind(int o_f,int speed) 00199 { 00200 uint8_t add[]= {0xe7,0xe7,0xe7,0xe7,0xe8}; 00201 radio.stopListening(); 00202 radio.openWritingPipe(add); 00203 wait_ms(2); 00204 00205 int count=0; 00206 char c[20]; 00207 sprintf(c,"NEO,1,%d,%d,1\n",o_f,speed); 00208 myLCD.fillrect(2,62,317,78,Black); 00209 myLCD.locate(4,65); 00210 myLCD.set_font((unsigned char*) Arial12x12); 00211 myLCD.printf("Writing %s",c); 00212 while (!radio.write( &c, 20 )) { 00213 myLCD.fillrect(2,62,317,78,Black); 00214 myLCD.locate(4,65); 00215 myLCD.set_font((unsigned char*) Arial12x12); 00216 myLCD.printf("Failed"); 00217 count++; 00218 if(count>=10) 00219 break; 00220 wait(0.1); 00221 } 00222 wait_ms(2); 00223 radio.startListening(); 00224 wait_ms(1); 00225 } 00226 00227 void set_color(char r,char g,char b) 00228 { 00229 uint8_t add[]= {0xe7,0xe7,0xe7,0xe8,0xe8}; 00230 radio.stopListening(); 00231 radio.openWritingPipe(add); 00232 wait_ms(2); 00233 00234 int count=0; 00235 char c[20]; 00236 sprintf(c,"N,5,%d,%d,%d,%d,1\n",0x01,(r<<3),(g<<2),(b<<3)); 00237 myLCD.fillrect(2,62,317,78,Black); 00238 myLCD.locate(4,65); 00239 myLCD.set_font((unsigned char*) Arial12x12); 00240 myLCD.printf("Writing %s",c); 00241 while (!radio.write( &c, 20 )) { 00242 myLCD.fillrect(2,62,317,78,Black); 00243 myLCD.locate(4,65); 00244 myLCD.set_font((unsigned char*) Arial12x12); 00245 myLCD.printf("Failed"); 00246 count++; 00247 if(count>=10) 00248 break; 00249 wait(0.1); 00250 } 00251 wait_ms(2); 00252 radio.startListening(); 00253 wait_ms(1); 00254 } 00255 00256 void take_pic_jpg(int name) 00257 { 00258 led2=1; 00259 JPEG_Converter encoder; 00260 JPEG_Converter::bitmap_buff_info_t aBitmapData; 00261 size_t EncodeSize; 00262 FILE * wr_fp = NULL; 00263 00264 aBitmapData.width = PIXEL_HW; 00265 aBitmapData.height = VIDEO_BUFFER_HEIGHT; 00266 aBitmapData.format = JPEG_Converter::WR_RD_YCbCr422; //YCbCr[0] & ARGB8888[1] is 4byte, not RGB565[2] is 2byte 00267 aBitmapData.buffer_address = (void *)save_buff_addr; 00268 if (encoder.encode(&aBitmapData, JCUBuffer_OUTPUT, &EncodeSize) == JPEG_Converter::JPEG_CONV_OK) { 00269 00270 char c[20]; 00271 sprintf(c,"/sd/abc%d.jpg",name); 00272 wr_fp = fopen(c, "w"); 00273 fwrite(JCUBuffer_OUTPUT, sizeof(char), EncodeSize, wr_fp); 00274 fclose(wr_fp); 00275 led2=0; 00276 } 00277 00278 } 00279 00280 unsigned short yuvtorgb(int y,int u,int v) 00281 { 00282 unsigned short rgb=0; 00283 int r = y + (1.402 * (v-128)); 00284 int g = y - (0.34414 * (u-128)) - (0.71414 * (v-128)); 00285 int b = y + (1.772* (u-128)); 00286 if(r<0)r=0; 00287 else if(r>255)r=255; 00288 if(g<0)g=0; 00289 else if(g>255)g=255; 00290 if(b<0)b=0; 00291 else if(b>255)b=255; 00292 r=r>>3; 00293 g=g>>2; 00294 b=b>>3; 00295 rgb=(r<<11)|(g<<5)|b; 00296 return rgb; 00297 00298 } 00299 void take_picture() 00300 { 00301 // uint8_t col_buf[PIXEL_HW * VIDEO_BUFFER_HEIGHT*4]; 00302 pos[2]=pos[1]=pos[0]=pos[3]=0; 00303 DisplayBase::graphics_error_t error; 00304 in_pic=1; 00305 led1 = 1; 00306 00307 if (write_buff_addr == FrameBuffer_Video_A) { 00308 write_buff_addr = FrameBuffer_Video_B; 00309 save_buff_addr = FrameBuffer_Video_A; 00310 } else { 00311 write_buff_addr = FrameBuffer_Video_A; 00312 save_buff_addr = FrameBuffer_Video_B; 00313 } 00314 00315 /* Change write buffer */ 00316 error = Display.Video_Write_Change( 00317 VIDEO_INPUT_CH, 00318 write_buff_addr, 00319 VIDEO_BUFFER_STRIDE); 00320 if (error != DisplayBase::GRAPHICS_OK) { 00321 uart.printf("Line %d, error %d\n", __LINE__, error); 00322 while (1); 00323 } 00324 /* Wait 2 Vfield(Top or bottom field) */ 00325 00326 WaitVfield(2); 00327 00328 myLCD.WindowMax(); 00329 int j=0,k=0; 00330 for(int i=0; i<VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT; i++) { 00331 unsigned short rgb1=0,rgb2=0; 00332 int yb=save_buff_addr[i]; 00333 int v=save_buff_addr[i+1]; 00334 int ya=save_buff_addr[i+2]; 00335 int u=save_buff_addr[i+3]; 00336 i=i+3; 00337 rgb1=yuvtorgb(ya,u,v); 00338 rgb2=yuvtorgb(yb,u,v); 00339 col_buf[j][k++]=rgb2; 00340 col_buf[j][k++]=rgb1; 00341 if(k==320) { 00342 j++; 00343 k=0; 00344 } 00345 } 00346 00347 for(int i=0; i<480; i++) { 00348 for(int j=0; j<320; j++) { 00349 for(int k=3; k>=0; k--) { 00350 myLCD.wr_gram(col_buf[i][k+j]); 00351 } 00352 j=j+3; 00353 } 00354 } 00355 00356 led1=0; 00357 00358 take_pic_jpg(10); 00359 00360 } 00361 00362 00363 void navigate(int x,int y) 00364 { 00365 if(in_pic==1) { 00366 in_pic=0; 00367 myLCD.cls(); 00368 myLCD.BMP_disp(dis_nav.titlex,dis_nav.titley,dis_nav.title,dis_nav.titlesize,0,60); 00369 myLCD.BMP_disp(dis_nav.logox,dis_nav.logoy,dis_nav.logo,dis_nav.logosize,0,80); 00370 myLCD.rect(0,60,319,80,Red); 00371 myLCD.rect(1,61,318,79,Red); 00372 myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh); 00373 myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech); 00374 myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth); 00375 myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch); 00376 pos[0]=pos[1]=pos[2]=pos[3]=0; 00377 return; 00378 } 00379 if(y>85 && y<235) { 00380 if(x<155) { //Healthcare Navigation 00381 if(pos[0]==0) { 00382 myLCD.fillrect(0,81,157,237,Black); 00383 myLCD.BMP_16(2,82,"/sd/gui/heart.bmp"); 00384 myLCD.BMP_16(2,170,"/sd/gui/temp.bmp"); 00385 myLCD.BMP_16(58,136,"/sd/gui/b_but.bmp"); 00386 myLCD.set_font((unsigned char*) Arial28x28); 00387 myLCD.foreground(Red); 00388 //myLCD.set_font_zoom(2,2); 00389 // myLCD.rect(96,96,144,128,Red); 00390 // myLCD.locate(100,100); 00391 // myLCD.printf("92"); 00392 // myLCD.locate(78,194); 00393 // myLCD.printf("32"); 00394 // // myLCD.rect(76,188,152,225,Red); 00395 // myLCD.circle(116,197,3,Red); 00396 // myLCD.locate(124,194); 00397 // myLCD.printf("C"); 00398 pos[0]=1; 00399 } else { 00400 if(x>58&& x<108 && y>136 && y<176) { 00401 myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch); 00402 pos[0]=0; 00403 } 00404 } 00405 00406 } else { 00407 if(pos[1]==0) { //Automation Navigation 00408 myLCD.fillrect(161,81,319,237,Black); 00409 myLCD.BMP_16(280,88,"/sd/gui/b_but.bmp"); 00410 myLCD.BMP_16(207,82,"/sd/gui/bulb.bmp"); 00411 myLCD.circle(190,105,15,White); 00412 myLCD.fillcircle(190,105,13,prev_col); 00413 int count=0; 00414 for(int i=0; i<3; i++) { 00415 for(int j=0; j<5; j++) { 00416 int a=164+(j*30); 00417 int b=138+(i*30); 00418 myLCD.fillrect(a,b,a+30,b+30,colors[count++]); 00419 } 00420 } 00421 pos[1]=1; 00422 } else { 00423 if(x>275 && x<319 && y>84 &&y<130) { 00424 myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth); 00425 pos[1]=0; 00426 } else if(x>164 && x<319 && y>138 && y<236) { 00427 int a=(x-164)/30; 00428 int b=(y-138)/30; 00429 int c=a+(b*5); 00430 myLCD.fillcircle(190,105,13,colors[c]); 00431 char r=(char)((colors[c]>>11)&0x1f); 00432 char g=(char)((colors[c]>>5)&0x3f); 00433 char bl=(char)((colors[c])&0x1f); 00434 set_color(r,g,bl); 00435 prev_col=colors[c]; 00436 00437 } 00438 00439 } 00440 } 00441 } else if(y>238 && y<400) { 00442 if(x<155) { //Security Navigation 00443 if(pos[2]==0) { 00444 myLCD.fillrect(dis_nav.secx,dis_nav.secy,dis_nav.secw+dis_nav.secx,dis_nav.sech+dis_nav.secy,Black); 00445 myLCD.BMP_16(10,245,"/sd/gui/d_close.bmp"); 00446 myLCD.BMP_16(113,245,"/sd/gui/b_but.bmp"); 00447 myLCD.rect(10,365,35,390,White); 00448 myLCD.rect(11,366,34,389,White); 00449 myLCD.locate(45,365); 00450 myLCD.set_font((unsigned char*) Arial24x23); 00451 myLCD.printf("Camera"); 00452 pos[2]=1; 00453 } else { 00454 if(x>9 && y >364 && x<36 && y<391) { 00455 if(cam_sel==0) { 00456 myLCD.fillrect(12,367,33,388,Blue); 00457 cam_sel=1; 00458 } else { 00459 myLCD.fillrect(12,367,33,388,Black); 00460 cam_sel=0; 00461 } 00462 } else if(x>112 && y>244 && x<154 && y<286) { 00463 myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech); 00464 pos[2]=0; 00465 } 00466 } 00467 00468 00469 } else { // Industry 00470 if(pos[3]==0) { 00471 myLCD.fillrect(dis_nav.indx,dis_nav.indy,dis_nav.indw+dis_nav.indx,dis_nav.indh+dis_nav.indy,Black); 00472 myLCD.BMP_16(278,245,"/sd/gui/b_but.bmp"); 00473 myLCD.BMP_16(200,250,"/sd/gui/blower.bmp"); 00474 myLCD.BMP_16(163,345,"/sd/gui/minus.bmp"); 00475 if(ind_of==0) 00476 myLCD.BMP_16(214,335,"/sd/gui/b_p_off.bmp"); 00477 else 00478 myLCD.BMP_16(214,335,"/sd/gui/b_p_on.bmp"); 00479 myLCD.BMP_16(266,345,"/sd/gui/plus.bmp"); 00480 myLCD.locate(170,270); 00481 myLCD.set_font((unsigned char*) Arial28x28); 00482 myLCD.printf("%d",ind_speed); 00483 pos[3]=1; 00484 } else { 00485 if(x>=266 && y>=345 && x<=316 && y<=395) { 00486 ind_speed++; 00487 if(ind_speed>9) 00488 ind_speed=9; 00489 00490 set_ind(ind_of,ind_speed); 00491 myLCD.locate(170,270); 00492 myLCD.set_font((unsigned char*) Arial28x28); 00493 myLCD.printf("%d",ind_speed); 00494 } else if(x>=163 && y>=345 && x<=213 && y<=395) { 00495 ind_speed--; 00496 if(ind_speed<0) 00497 ind_speed=0; 00498 set_ind(ind_of,ind_speed); 00499 myLCD.locate(170,270); 00500 myLCD.set_font((unsigned char*) Arial28x28); 00501 myLCD.printf("%d",ind_speed); 00502 } else if(x>=214 && y>=335 && x<=264 && y<=385) { 00503 if(ind_of==0) { 00504 myLCD.BMP_16(214,335,"/sd/gui/b_p_on.bmp"); 00505 ind_of=1; 00506 set_ind(ind_of,ind_speed); 00507 } else { 00508 myLCD.BMP_16(214,335,"/sd/gui/b_p_off.bmp"); 00509 ind_of=0; 00510 set_ind(ind_of,ind_speed); 00511 } 00512 } else if(x>=278 && y>=245 && x<=318 && y<=285) { 00513 00514 myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh); 00515 pos[3]=0; 00516 } 00517 } 00518 00519 } 00520 } else if(y>400) { 00521 myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh); 00522 myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech); 00523 myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth); 00524 myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch); 00525 pos[0]=pos[1]=pos[2]=pos[3]=0; 00526 } 00527 wait(0.1); 00528 } 00529 00530 void init_radio() 00531 { 00532 uint8_t hb[]= {0xe7,0xe7,0xe7,0xe8,0xe9}; 00533 uint8_t sec[]= {0xe8,0xe7,0xe7,0xe8,0xe9}; 00534 radio.begin(); 00535 radio.setAutoAck(1); 00536 radio.setChannel(100); 00537 radio.setDataRate(RF24_1MBPS); 00538 radio.enableAckPayload(); // Allow optional ack payloads 00539 radio.setRetries(15, 15); 00540 radio.setPALevel(RF24_PA_MAX); 00541 radio.enableDynamicPayloads(); 00542 radio.openReadingPipe(1,hb); 00543 radio.openReadingPipe(2,sec); 00544 radio.startListening(); 00545 00546 } 00547 00548 void cli_decode(char *c) 00549 { 00550 int count=0; 00551 string s[10]; 00552 char c1[20]; 00553 int s_count=0; 00554 for(int i=0; i<20; i++) { 00555 if(c[i]=='\n') 00556 break; 00557 if(c[i]==',') { 00558 s_count++; 00559 continue; 00560 } 00561 s[s_count]+=c[i]; 00562 } 00563 00564 if(s[0]!="NEO"&&s[0]!="N") 00565 return; 00566 myLCD.fillrect(2,62,317,78,Black); 00567 myLCD.locate(4,65); 00568 myLCD.set_font((unsigned char*) Arial12x12); 00569 myLCD.printf("Writing %s",c); 00570 if(s[1]=="1") { 00571 sprintf(c1,"%s,%s,%s,%s,1\n",s[0].c_str(),s[1].c_str(),s[2].c_str(),s[3].c_str()); 00572 uint8_t add[]= {0xe7,0xe7,0xe7,0xe7,0xe8}; 00573 radio.stopListening(); 00574 radio.openWritingPipe(add); 00575 wait_ms(2); 00576 while (!radio.write( &c1, 20 )) { 00577 myLCD.fillrect(2,62,317,78,Black); 00578 myLCD.locate(4,65); 00579 myLCD.set_font((unsigned char*) Arial12x12); 00580 myLCD.printf("Failed"); 00581 count++; 00582 if(count>=10) 00583 break; 00584 wait(0.1); 00585 } 00586 wait_ms(2); 00587 radio.startListening(); 00588 wait_ms(1); 00589 00590 } else if(s[1]=="5") { 00591 sprintf(c1,"%s,%s,%s,%s,%s,%s,1\n",s[0].c_str(),s[1].c_str(),s[2].c_str(),s[3].c_str(),s[4].c_str(),s[5].c_str()); 00592 uint8_t add[]= {0xe7,0xe7,0xe7,0xe8,0xe8}; 00593 radio.stopListening(); 00594 radio.openWritingPipe(add); 00595 wait_ms(2); 00596 int count=0; 00597 while (!radio.write( &c1, 20 )) { 00598 myLCD.fillrect(2,62,317,78,Black); 00599 myLCD.locate(4,65); 00600 myLCD.set_font((unsigned char*) Arial12x12); 00601 myLCD.printf("Failed"); 00602 count++; 00603 if(count>=10) 00604 break; 00605 wait(0.1); 00606 } 00607 wait_ms(2); 00608 radio.startListening(); 00609 wait_ms(1); 00610 00611 00612 } 00613 } 00614 00615 void rf_decode(char *c) 00616 { 00617 string s[10]; 00618 c[19]='\n'; 00619 00620 int s_count=0; 00621 for(int i=0; i<20; i++) { 00622 if(c[i]=='\n') 00623 break; 00624 if(c[i]==',') { 00625 s_count++; 00626 continue; 00627 } 00628 s[s_count]+=c[i]; 00629 } 00630 if(s[0]!="NEO") 00631 return; 00632 char send_cli[20]; 00633 sprintf(send_cli,"%s,%s,%s,%s,%s\n",s[0].c_str(),s[1].c_str(),s[2].c_str(),s[3].c_str(),"1"); 00634 if(client.is_connected()==true) { 00635 client.send(send_cli,strlen(send_cli)); 00636 } 00637 00638 if(s[1]=="2") { 00639 00640 if(pos[0]==1) { 00641 myLCD.set_font((unsigned char*) Arial28x28); 00642 myLCD.locate(86,100); 00643 if(atoi(s[2].c_str())<100) 00644 myLCD.printf("0%s",s[2].c_str()); 00645 else 00646 myLCD.printf("%s",s[2].c_str()); 00647 } 00648 } else if(s[1]=="3") { 00649 if(pos[2]==1) { 00650 if(s[2]=="1") { 00651 myLCD.BMP_16(10,245,"/sd/gui/d_open.bmp"); 00652 if(cam_sel==1) 00653 take_picture(); 00654 } else 00655 myLCD.BMP_16(10,245,"/sd/gui/d_close.bmp"); 00656 } 00657 } 00658 00659 } 00660 00661 00662 void init_internet() 00663 { 00664 network.init("192.168.0.100","255.255.255.0","192.168.0.254"); //Use DHCP 00665 network.connect(); 00666 myLCD.fillrect(2,62,317,78,Black); 00667 myLCD.locate(4,65); 00668 myLCD.set_font((unsigned char*) Arial12x12); 00669 myLCD.printf("IP Address is %s\n", network.getIPAddress()); 00670 00671 } 00672 00673 void init_fs() 00674 { 00675 char indexPage[256]; 00676 sprintf(indexPage,"<HTML><HEAD><META content=\"text/html\" http-equiv=Content-Type><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /> </HEAD><BODY><img src=\"abc10.jpg\" alt=\"Smiley face\" height=\"480\" width=\"320\"></BODY></HTML>\r\n\r\n"); 00677 FILE *fp; 00678 fp = fopen("/sd/index.htm", "w"); 00679 fwrite(indexPage, sizeof(char), strlen(indexPage), fp); 00680 fclose(fp); 00681 } 00682 00683 00684 00685 00686 void init_m_connect() 00687 { 00688 if(rf_server.bind(10101)<0) { 00689 myLCD.fillrect(2,62,317,78,Black); 00690 myLCD.locate(4,65); 00691 myLCD.set_font((unsigned char*) Arial12x12); 00692 myLCD.printf("Error in RF Server%s\n", network.getIPAddress()); 00693 while(1); 00694 } 00695 if(rf_server.listen(1)<0) { 00696 myLCD.fillrect(2,62,317,78,Black); 00697 myLCD.locate(4,65); 00698 myLCD.set_font((unsigned char*) Arial12x12); 00699 myLCD.printf("Failed to listen", network.getIPAddress()); 00700 while(1); 00701 } 00702 rf_server.set_blocking(false,100); 00703 00704 } 00705 00706 void poll_rfserver() 00707 { 00708 char a_buf[256]; 00709 if(client.is_connected()==false) { 00710 led3=0; 00711 if(rf_server.accept(client)<0) { 00712 return; 00713 } 00714 } else { 00715 00716 int len=0; 00717 led3=1; 00718 client.set_blocking(false,100); 00719 if((len=client.receive(a_buf,256))>0) { 00720 a_buf[len+1]='\0'; 00721 a_buf[len]='\n'; 00722 00723 myLCD.fillrect(2,62,317,78,Black); 00724 myLCD.locate(4,65); 00725 myLCD.set_font((unsigned char*) Arial12x12); 00726 myLCD.printf("Received from client %s", a_buf); 00727 cli_decode(a_buf); 00728 } 00729 } 00730 00731 } 00732 00733 00734 int main() 00735 { 00736 uart.baud (115200); 00737 Init_lcd_touch(); 00738 init_gui(); 00739 pos[0]=pos[1]=pos[2]=pos[3]=0; 00740 init_radio(); 00741 init_camera(); 00742 init_internet(); 00743 init_fs(); 00744 HTTPFsRequestHandler::mount("/sd/", "/"); 00745 svr.addHandler<HTTPFsRequestHandler>("/"); 00746 if (!svr.start(80,&network)) { 00747 myLCD.fillrect(2,62,317,78,Black); 00748 myLCD.locate(4,65); 00749 myLCD.set_font((unsigned char*) Arial12x12); 00750 myLCD.printf("Error in http server start", network.getIPAddress()); 00751 while(1); 00752 } 00753 init_m_connect(); 00754 char c[20]; 00755 while(1) { 00756 if(network.getIPAddress()==NULL) { 00757 init_internet(); 00758 if (!svr.start(80,&network)) { 00759 myLCD.fillrect(2,62,317,78,Black); 00760 myLCD.locate(4,65); 00761 myLCD.set_font((unsigned char*) Arial12x12); 00762 myLCD.printf("Error in http server start", network.getIPAddress()); 00763 while(1); 00764 } 00765 init_m_connect(); 00766 00767 } 00768 svr.poll(); 00769 poll_rfserver(); 00770 if(get_xy()==1) { 00771 navigate(TP.display.x,TP.display.y); 00772 } 00773 if(radio.available()) { 00774 while(radio.available()) { 00775 radio.read(&c,20); 00776 c[19]='\0'; 00777 if(in_pic!=1) { 00778 myLCD.fillrect(2,62,317,78,Black); 00779 myLCD.locate(4,65); 00780 myLCD.set_font((unsigned char*) Arial12x12); 00781 myLCD.printf("Reading %s",c); 00782 } 00783 rf_decode(c); 00784 } 00785 } 00786 temp_count++; 00787 if(temp_count>=10) { 00788 temp_count=0; 00789 char c[20]; 00790 float tem=temp.read()*3.3*100; 00791 sprintf(c,"NEO,5,%2.0f,0,1\n",tem); 00792 if(client.is_connected()==true) { 00793 client.send(c,strlen(c)); 00794 } 00795 if(pos[0]==1 && in_pic!=1) { 00796 myLCD.set_font((unsigned char*) Arial28x28); 00797 00798 myLCD.locate(78,194); 00799 myLCD.printf("%2.0f",tem); 00800 // myLCD.rect(76,188,152,225,Red); 00801 myLCD.circle(116,197,3,Red); 00802 myLCD.locate(124,194); 00803 myLCD.printf("C"); 00804 pos[0]=1; 00805 } 00806 } 00807 } 00808 }
Generated on Tue Jul 12 2022 15:10:51 by
1.7.2
