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;
}
}
}
}
