This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest
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
- Committer:
- vipinranka
- Date:
- 2017-01-11
- Revision:
- 12:9a20164dcc47
- Parent:
- 8:bb09890333fe
File content as of revision 12:9a20164dcc47:
#include "mbed.h" #include "RF24.h" #include "ILI9486.h" #include "DisplayBace.h" #include "SDFileSystem.h" #include "JPEG_Converter.h" #include "HTTPServer.h" #include "FsHandler.h" #include "rtos.h" #include "stdio.h" #include "string" #include "Arial12x12.h" #include "Arial28x28.h" #include "Arial24x23.h" //#include "Terminal6x8.h" #include "Arial43x48_numb.h" #include "pict.h" #include "pavement_48x34.h" #include "Touch.h" #include "camera.h" #include "EthernetInterface.h" //Initialization Serial uart(USBTX, USBRX); 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 TouchScreenADS7843 TP(P4_6 ,P4_7 ,P4_4 ,P2_9 ,P7_15, &myLCD);// ADS7843 -> mosi, miso, sclk, cs, irq, SPI_myLCD SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd"); RF24 radio(P10_14,P10_15, P10_12,P8_14, P10_13); // mosi, miso, sck, csn, ce, irq AnalogIn temp(A4); DigitalOut led3(LED3); int temp_count=0,in_pic=0; struct Screen { int16_t title[60*320]; int titlex,titley; int16_t logo[80*320]; int logox,logoy; int16_t hc[157*156]; int hcx,hcy,hch,hcw; int16_t aut[158*156]; int autx,auty,autw,auth; int16_t sec[157*158]; int secx,secy,secw,sech; int16_t ind[158*158]; int indx,indy,indw,indh; int indsize; int secsize; int autsize; int hcsize; int logosize; int titlesize; } dis_nav; //Variables unsigned short backgroundcolor=Black; unsigned short foregroundcolor=Red; int pos[4]; int16_t colors[16]= { 0x000F,0x0000,0x03E0,0x03EF,0x7800,0x780F,0x7BE0,0xC618,0x7BEF,0x001F,0x07E0,0x07FF,0xF800,0xF81F,0xFFE0,0xFFFF }; int color_count=0; int cam_sel=0; int ind_speed=0; int ind_of=0; int16_t prev_col=0; EthernetInterface network; HTTPServer svr; TCPSocketServer rf_server; TCPSocketConnection client; static unsigned short col_buf[PIXEL_VW][PIXEL_HW]__attribute((section("NC_BSS"),aligned(8))); //8 bytes aligned!; static uint8_t JCUBuffer_OUTPUT[PIXEL_HW * VIDEO_BUFFER_HEIGHT*4]__attribute((section("NC_BSS"),aligned(8))); //8 bytes aligned!; //Init LCD and touch void Init_lcd_touch() { Matrix matrix; Coordinate ScreenSample[3]; myLCD.set_orientation(2); // myLCD.claim(stdout); // send stdout to the LCD display //myLCD.claim(stderr); // send stderr to the LCD display myLCD.background(backgroundcolor); // set background to black myLCD.foreground(foregroundcolor); // set chars to white myLCD.cls(); myLCD.set_font((unsigned char*) Arial12x12); myLCD.locate(0,20); TP.TouchPanel_Calibrate(); // myLCD.set_orientation(0); // Display calibration values TP.GetCalibration(&matrix, &ScreenSample[0]); myLCD.cls(); myLCD.locate(0,20); // read calibration results printf("Read calibration results.\n"); printf("matrix.An = %d\n", matrix.An); printf("matrix.Bn = %d\n", matrix.Bn); printf("matrix.Cn = %d\n", matrix.Cn); printf("matrix.Dn = %d\n", matrix.Dn); printf("matrix.En = %d\n", matrix.En); printf("matrix.Fn = %d\n", matrix.Fn); printf("matrix.Di = %d\n", matrix.Divider); for (int i=0; i<3; i++) printf("sample x[%d] = %d\nsample y[%d] = %d\n", i, ScreenSample[i].x, i, ScreenSample[i].y); // Write calibration results printf("\nWrite calibration results...\n"); TP.SetCalibration(&matrix, &ScreenSample[0]); printf("Done.\nTouch panel to start\n"); while(TP._tp_irq); } int get_xy() { int x=0; if(!TP._tp_irq) { if (TP.Read_Ads7843()) { TP.getDisplayPoint() ; //myLCD.cls(); //myLCD.locate(20,0); // TP.TP_DrawPoint(TP.display.x,TP.display.y, Blue); x=1; } } wait(0.1); return x; } void init_dis_nav() { dis_nav.indsize=158*158; dis_nav.secsize=157*158; dis_nav.autsize=158*156; dis_nav.hcsize=157*156; dis_nav.logosize=80*320; dis_nav.titlesize=60*320; myLCD.BMP_16(0,0,"/sd/gui/title.bmp",dis_nav.title); dis_nav.titlex=0; dis_nav.titley=0; myLCD.BMP_16(0,400,"/sd/gui/logo.bmp",dis_nav.logo); dis_nav.logox=0; dis_nav.logoy=400; myLCD.BMP_16(0,81,"/sd/gui/hc.bmp",dis_nav.hc); dis_nav.hcx=0; dis_nav.hcy=81; dis_nav.hcw=157; dis_nav.hch=158; //myLCD.fillrect(161,81,319,237,White); myLCD.BMP_16(dis_nav.autx=161,dis_nav.auty=81,"/sd/gui/auto.bmp",dis_nav.aut); dis_nav.autw=158; dis_nav.auth=156; //myLCD.fillrect(0,241,157,399,White); myLCD.BMP_16(dis_nav.secx=0,dis_nav.secy=241,"/sd/gui/secu.bmp",dis_nav.sec); dis_nav.secw=157; dis_nav.sech=158; //myLCD.fillrect(161,241,319,399,White); myLCD.BMP_16(dis_nav.indx=161,dis_nav.indy=241,"/sd/gui/indus.bmp",dis_nav.ind); dis_nav.indw=158; dis_nav.indh=158; } void init_gui() { init_dis_nav(); myLCD.cls(); myLCD.BMP_disp(dis_nav.titlex,dis_nav.titley,dis_nav.title,dis_nav.titlesize,0,60); myLCD.BMP_disp(dis_nav.logox,dis_nav.logoy,dis_nav.logo,dis_nav.logosize,0,80); myLCD.rect(0,60,319,80,Red); myLCD.rect(1,61,318,79,Red); myLCD.locate(4,65); // myLCD.fillrect(0,81,157,237,White); myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch); //myLCD.fillrect(161,81,319,237,White); myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth); //myLCD.fillrect(0,241,157,399,White); myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech); //myLCD.fillrect(161,241,319,399,White); myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Select a menu"); for(int i=158; i<160; i++) { myLCD.line(i,80,i,400,Blue); } for(int i=238; i<240; i++) { myLCD.line(0,i,319,i,Blue); } } void set_ind(int o_f,int speed) { uint8_t add[]= {0xe7,0xe7,0xe7,0xe7,0xe8}; radio.stopListening(); radio.openWritingPipe(add); wait_ms(2); int count=0; char c[20]; sprintf(c,"NEO,1,%d,%d,1\n",o_f,speed); myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Writing %s",c); while (!radio.write( &c, 20 )) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Failed"); count++; if(count>=10) break; wait(0.1); } wait_ms(2); radio.startListening(); wait_ms(1); } void set_color(char r,char g,char b) { uint8_t add[]= {0xe7,0xe7,0xe7,0xe8,0xe8}; radio.stopListening(); radio.openWritingPipe(add); wait_ms(2); int count=0; char c[20]; sprintf(c,"N,5,%d,%d,%d,%d,1\n",0x01,(r<<3),(g<<2),(b<<3)); myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Writing %s",c); while (!radio.write( &c, 20 )) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Failed"); count++; if(count>=10) break; wait(0.1); } wait_ms(2); radio.startListening(); wait_ms(1); } void take_pic_jpg(int name) { led2=1; JPEG_Converter encoder; JPEG_Converter::bitmap_buff_info_t aBitmapData; size_t EncodeSize; FILE * wr_fp = NULL; aBitmapData.width = PIXEL_HW; aBitmapData.height = VIDEO_BUFFER_HEIGHT; aBitmapData.format = JPEG_Converter::WR_RD_YCbCr422; //YCbCr[0] & ARGB8888[1] is 4byte, not RGB565[2] is 2byte aBitmapData.buffer_address = (void *)save_buff_addr; if (encoder.encode(&aBitmapData, JCUBuffer_OUTPUT, &EncodeSize) == JPEG_Converter::JPEG_CONV_OK) { char c[20]; sprintf(c,"/sd/abc%d.jpg",name); wr_fp = fopen(c, "w"); fwrite(JCUBuffer_OUTPUT, sizeof(char), EncodeSize, wr_fp); fclose(wr_fp); led2=0; } } unsigned short yuvtorgb(int y,int u,int v) { unsigned short rgb=0; int r = y + (1.402 * (v-128)); int g = y - (0.34414 * (u-128)) - (0.71414 * (v-128)); int b = y + (1.772* (u-128)); if(r<0)r=0; else if(r>255)r=255; if(g<0)g=0; else if(g>255)g=255; if(b<0)b=0; else if(b>255)b=255; r=r>>3; g=g>>2; b=b>>3; rgb=(r<<11)|(g<<5)|b; return rgb; } void take_picture() { // uint8_t col_buf[PIXEL_HW * VIDEO_BUFFER_HEIGHT*4]; pos[2]=pos[1]=pos[0]=pos[3]=0; DisplayBase::graphics_error_t error; in_pic=1; led1 = 1; if (write_buff_addr == FrameBuffer_Video_A) { write_buff_addr = FrameBuffer_Video_B; save_buff_addr = FrameBuffer_Video_A; } else { write_buff_addr = FrameBuffer_Video_A; save_buff_addr = FrameBuffer_Video_B; } /* Change write buffer */ error = Display.Video_Write_Change( VIDEO_INPUT_CH, write_buff_addr, VIDEO_BUFFER_STRIDE); if (error != DisplayBase::GRAPHICS_OK) { uart.printf("Line %d, error %d\n", __LINE__, error); while (1); } /* Wait 2 Vfield(Top or bottom field) */ WaitVfield(2); myLCD.WindowMax(); int j=0,k=0; for(int i=0; i<VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT; i++) { unsigned short rgb1=0,rgb2=0; int yb=save_buff_addr[i]; int v=save_buff_addr[i+1]; int ya=save_buff_addr[i+2]; int u=save_buff_addr[i+3]; i=i+3; rgb1=yuvtorgb(ya,u,v); rgb2=yuvtorgb(yb,u,v); col_buf[j][k++]=rgb2; col_buf[j][k++]=rgb1; if(k==320) { j++; k=0; } } for(int i=0; i<480; i++) { for(int j=0; j<320; j++) { for(int k=3; k>=0; k--) { myLCD.wr_gram(col_buf[i][k+j]); } j=j+3; } } led1=0; take_pic_jpg(10); } void navigate(int x,int y) { if(in_pic==1) { in_pic=0; myLCD.cls(); myLCD.BMP_disp(dis_nav.titlex,dis_nav.titley,dis_nav.title,dis_nav.titlesize,0,60); myLCD.BMP_disp(dis_nav.logox,dis_nav.logoy,dis_nav.logo,dis_nav.logosize,0,80); myLCD.rect(0,60,319,80,Red); myLCD.rect(1,61,318,79,Red); myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh); myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech); myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth); myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch); pos[0]=pos[1]=pos[2]=pos[3]=0; return; } if(y>85 && y<235) { if(x<155) { //Healthcare Navigation if(pos[0]==0) { myLCD.fillrect(0,81,157,237,Black); myLCD.BMP_16(2,82,"/sd/gui/heart.bmp"); myLCD.BMP_16(2,170,"/sd/gui/temp.bmp"); myLCD.BMP_16(58,136,"/sd/gui/b_but.bmp"); myLCD.set_font((unsigned char*) Arial28x28); myLCD.foreground(Red); //myLCD.set_font_zoom(2,2); // myLCD.rect(96,96,144,128,Red); // myLCD.locate(100,100); // myLCD.printf("92"); // myLCD.locate(78,194); // myLCD.printf("32"); // // myLCD.rect(76,188,152,225,Red); // myLCD.circle(116,197,3,Red); // myLCD.locate(124,194); // myLCD.printf("C"); pos[0]=1; } else { if(x>58&& x<108 && y>136 && y<176) { myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch); pos[0]=0; } } } else { if(pos[1]==0) { //Automation Navigation myLCD.fillrect(161,81,319,237,Black); myLCD.BMP_16(280,88,"/sd/gui/b_but.bmp"); myLCD.BMP_16(207,82,"/sd/gui/bulb.bmp"); myLCD.circle(190,105,15,White); myLCD.fillcircle(190,105,13,prev_col); int count=0; for(int i=0; i<3; i++) { for(int j=0; j<5; j++) { int a=164+(j*30); int b=138+(i*30); myLCD.fillrect(a,b,a+30,b+30,colors[count++]); } } pos[1]=1; } else { if(x>275 && x<319 && y>84 &&y<130) { myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth); pos[1]=0; } else if(x>164 && x<319 && y>138 && y<236) { int a=(x-164)/30; int b=(y-138)/30; int c=a+(b*5); myLCD.fillcircle(190,105,13,colors[c]); char r=(char)((colors[c]>>11)&0x1f); char g=(char)((colors[c]>>5)&0x3f); char bl=(char)((colors[c])&0x1f); set_color(r,g,bl); prev_col=colors[c]; } } } } else if(y>238 && y<400) { if(x<155) { //Security Navigation if(pos[2]==0) { myLCD.fillrect(dis_nav.secx,dis_nav.secy,dis_nav.secw+dis_nav.secx,dis_nav.sech+dis_nav.secy,Black); myLCD.BMP_16(10,245,"/sd/gui/d_close.bmp"); myLCD.BMP_16(113,245,"/sd/gui/b_but.bmp"); myLCD.rect(10,365,35,390,White); myLCD.rect(11,366,34,389,White); myLCD.locate(45,365); myLCD.set_font((unsigned char*) Arial24x23); myLCD.printf("Camera"); pos[2]=1; } else { if(x>9 && y >364 && x<36 && y<391) { if(cam_sel==0) { myLCD.fillrect(12,367,33,388,Blue); cam_sel=1; } else { myLCD.fillrect(12,367,33,388,Black); cam_sel=0; } } else if(x>112 && y>244 && x<154 && y<286) { myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech); pos[2]=0; } } } else { // Industry if(pos[3]==0) { myLCD.fillrect(dis_nav.indx,dis_nav.indy,dis_nav.indw+dis_nav.indx,dis_nav.indh+dis_nav.indy,Black); myLCD.BMP_16(278,245,"/sd/gui/b_but.bmp"); myLCD.BMP_16(200,250,"/sd/gui/blower.bmp"); myLCD.BMP_16(163,345,"/sd/gui/minus.bmp"); if(ind_of==0) myLCD.BMP_16(214,335,"/sd/gui/b_p_off.bmp"); else myLCD.BMP_16(214,335,"/sd/gui/b_p_on.bmp"); myLCD.BMP_16(266,345,"/sd/gui/plus.bmp"); myLCD.locate(170,270); myLCD.set_font((unsigned char*) Arial28x28); myLCD.printf("%d",ind_speed); pos[3]=1; } else { if(x>=266 && y>=345 && x<=316 && y<=395) { ind_speed++; if(ind_speed>9) ind_speed=9; set_ind(ind_of,ind_speed); myLCD.locate(170,270); myLCD.set_font((unsigned char*) Arial28x28); myLCD.printf("%d",ind_speed); } else if(x>=163 && y>=345 && x<=213 && y<=395) { ind_speed--; if(ind_speed<0) ind_speed=0; set_ind(ind_of,ind_speed); myLCD.locate(170,270); myLCD.set_font((unsigned char*) Arial28x28); myLCD.printf("%d",ind_speed); } else if(x>=214 && y>=335 && x<=264 && y<=385) { if(ind_of==0) { myLCD.BMP_16(214,335,"/sd/gui/b_p_on.bmp"); ind_of=1; set_ind(ind_of,ind_speed); } else { myLCD.BMP_16(214,335,"/sd/gui/b_p_off.bmp"); ind_of=0; set_ind(ind_of,ind_speed); } } else if(x>=278 && y>=245 && x<=318 && y<=285) { myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh); pos[3]=0; } } } } else if(y>400) { myLCD.BMP_disp(dis_nav.indx,dis_nav.indy,dis_nav.ind,dis_nav.indsize,dis_nav.indw,dis_nav.indh); myLCD.BMP_disp(dis_nav.secx,dis_nav.secy,dis_nav.sec,dis_nav.secsize,dis_nav.secw,dis_nav.sech); myLCD.BMP_disp(dis_nav.autx,dis_nav.auty,dis_nav.aut,dis_nav.autsize,dis_nav.autw,dis_nav.auth); myLCD.BMP_disp(dis_nav.hcx,dis_nav.hcy,dis_nav.hc,dis_nav.hcsize,dis_nav.hcw,dis_nav.hch); pos[0]=pos[1]=pos[2]=pos[3]=0; } wait(0.1); } void init_radio() { uint8_t hb[]= {0xe7,0xe7,0xe7,0xe8,0xe9}; uint8_t sec[]= {0xe8,0xe7,0xe7,0xe8,0xe9}; radio.begin(); radio.setAutoAck(1); radio.setChannel(100); radio.setDataRate(RF24_1MBPS); radio.enableAckPayload(); // Allow optional ack payloads radio.setRetries(15, 15); radio.setPALevel(RF24_PA_MAX); radio.enableDynamicPayloads(); radio.openReadingPipe(1,hb); radio.openReadingPipe(2,sec); radio.startListening(); } void cli_decode(char *c) { int count=0; string s[10]; char c1[20]; int s_count=0; for(int i=0; i<20; i++) { if(c[i]=='\n') break; if(c[i]==',') { s_count++; continue; } s[s_count]+=c[i]; } if(s[0]!="NEO"&&s[0]!="N") return; myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Writing %s",c); if(s[1]=="1") { sprintf(c1,"%s,%s,%s,%s,1\n",s[0].c_str(),s[1].c_str(),s[2].c_str(),s[3].c_str()); uint8_t add[]= {0xe7,0xe7,0xe7,0xe7,0xe8}; radio.stopListening(); radio.openWritingPipe(add); wait_ms(2); while (!radio.write( &c1, 20 )) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Failed"); count++; if(count>=10) break; wait(0.1); } wait_ms(2); radio.startListening(); wait_ms(1); } else if(s[1]=="5") { 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()); uint8_t add[]= {0xe7,0xe7,0xe7,0xe8,0xe8}; radio.stopListening(); radio.openWritingPipe(add); wait_ms(2); int count=0; while (!radio.write( &c1, 20 )) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Failed"); count++; if(count>=10) break; wait(0.1); } wait_ms(2); radio.startListening(); wait_ms(1); } } void rf_decode(char *c) { string s[10]; c[19]='\n'; int s_count=0; for(int i=0; i<20; i++) { if(c[i]=='\n') break; if(c[i]==',') { s_count++; continue; } s[s_count]+=c[i]; } if(s[0]!="NEO") return; char send_cli[20]; 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"); if(client.is_connected()==true) { client.send(send_cli,strlen(send_cli)); } if(s[1]=="2") { if(pos[0]==1) { myLCD.set_font((unsigned char*) Arial28x28); myLCD.locate(86,100); if(atoi(s[2].c_str())<100) myLCD.printf("0%s",s[2].c_str()); else myLCD.printf("%s",s[2].c_str()); } } else if(s[1]=="3") { if(pos[2]==1) { if(s[2]=="1") { myLCD.BMP_16(10,245,"/sd/gui/d_open.bmp"); if(cam_sel==1) take_picture(); } else myLCD.BMP_16(10,245,"/sd/gui/d_close.bmp"); } } } void init_internet() { network.init("192.168.0.100","255.255.255.0","192.168.0.254"); //Use DHCP network.connect(); myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("IP Address is %s\n", network.getIPAddress()); } void init_fs() { char indexPage[256]; 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"); FILE *fp; fp = fopen("/sd/index.htm", "w"); fwrite(indexPage, sizeof(char), strlen(indexPage), fp); fclose(fp); } void init_m_connect() { if(rf_server.bind(10101)<0) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Error in RF Server%s\n", network.getIPAddress()); while(1); } if(rf_server.listen(1)<0) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Failed to listen", network.getIPAddress()); while(1); } rf_server.set_blocking(false,100); } void poll_rfserver() { char a_buf[256]; if(client.is_connected()==false) { led3=0; if(rf_server.accept(client)<0) { return; } } else { int len=0; led3=1; client.set_blocking(false,100); if((len=client.receive(a_buf,256))>0) { a_buf[len+1]='\0'; a_buf[len]='\n'; myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Received from client %s", a_buf); cli_decode(a_buf); } } } int main() { uart.baud (115200); Init_lcd_touch(); init_gui(); pos[0]=pos[1]=pos[2]=pos[3]=0; init_radio(); init_camera(); init_internet(); init_fs(); HTTPFsRequestHandler::mount("/sd/", "/"); svr.addHandler<HTTPFsRequestHandler>("/"); if (!svr.start(80,&network)) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Error in http server start", network.getIPAddress()); while(1); } init_m_connect(); char c[20]; while(1) { if(network.getIPAddress()==NULL) { init_internet(); if (!svr.start(80,&network)) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Error in http server start", network.getIPAddress()); while(1); } init_m_connect(); } svr.poll(); poll_rfserver(); if(get_xy()==1) { navigate(TP.display.x,TP.display.y); } if(radio.available()) { while(radio.available()) { radio.read(&c,20); c[19]='\0'; if(in_pic!=1) { myLCD.fillrect(2,62,317,78,Black); myLCD.locate(4,65); myLCD.set_font((unsigned char*) Arial12x12); myLCD.printf("Reading %s",c); } rf_decode(c); } } temp_count++; if(temp_count>=10) { temp_count=0; char c[20]; float tem=temp.read()*3.3*100; sprintf(c,"NEO,5,%2.0f,0,1\n",tem); if(client.is_connected()==true) { client.send(c,strlen(c)); } if(pos[0]==1 && in_pic!=1) { myLCD.set_font((unsigned char*) Arial28x28); myLCD.locate(78,194); myLCD.printf("%2.0f",tem); // myLCD.rect(76,188,152,225,Red); myLCD.circle(116,197,3,Red); myLCD.locate(124,194); myLCD.printf("C"); pos[0]=1; } } } }