Set key(p20)を押したあと、Upper key(p19)、Down key(p18)をクリックしても、表示されるアドレス(ipe[4][4][3])が変化しない。もう一度Set keyを押さないと表示されない。ループで回している以上、逐次表示されるはずでは? あと、Right key(p16), Left key(p19)をおすと、表示される数字が、 Right:42, 41 , 00 Left: 41 , 40, 32 という数字。 なのに、実際数字が入力される配列は、 ipe[0][0〜2]の、3つのみである。 本当に不可解。
Diff: main.cpp
- Revision:
- 0:4c9b6e0bb8d5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat May 19 20:35:17 2012 +0000 @@ -0,0 +1,360 @@ +#include "mbed.h" +#include "EthernetNetIf.h" +#include "HTTPServer.h" +#include "TextLCD.h" + +EthernetNetIf *eth; +IpAddr ipaddr, netmask, gateway, nameserver; + +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalIn Setkey(p20); +DigitalIn Leftkey(p19); +DigitalIn Downkey(p18); +DigitalIn Upperkey(p17); +DigitalIn Rightkey(p16); + +TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d0-d3 +LocalFileSystem local("local"); + + +struct keystate{ + int state; // push(0) or left(1)? +}; + +struct keystate port20; // setup key +struct keystate port19; // left key +struct keystate port18; // down key +struct keystate port17; // up key +struct keystate port16; // right key + + +void ipe_print(int ipe[4][4][3], int mode){ + lcd.locate(0,1); + lcd.printf("%d%d%d.%d%d%d.%d%d%d.%d%d%d", + ipe[mode][0][0],ipe[mode][0][1],ipe[mode][0][2], + ipe[mode][1][0],ipe[mode][1][1],ipe[mode][1][2], + ipe[mode][2][0],ipe[mode][2][1],ipe[mode][2][2], + ipe[mode][3][0],ipe[mode][3][1],ipe[mode][3][2]); + +}; + + +void edit(){ + int ipe[4][4][3]= + {{{0,0,0},{0,0,0},{0,0,0},{0,0,0}}, + {{0,0,0},{0,0,0},{0,0,0},{0,0,0}}, + {{0,0,0},{0,0,0},{0,0,0},{0,0,0}}, + {{0,0,0},{0,0,0},{0,0,0},{0,0,0}}}; + // ipe[mode][i][j]; + + int ip[4][4]={0,0,0,0}; + int mono=0, keta=0; + int mode = 0; // 0:IP Adress, 1:NetMask, 2: Gateway, 3:DNS + char address[4][16]; // address[mode][Address] + char word[4][16] = {"IP Address","NetMask", "Gateway", "Domain Name"}; + + lcd.locate(0,0); + lcd.printf("%d %s",mode,word[mode]); + + while(mode < 4){ /*edit Address*/ + ipe_print(ipe,mode); + + /* ----Settei Key -----*/ + if((Setkey == 0 )&& (port20.state==1)){ + lcd.locate(14,0); + lcd.printf("S"); + + port20.state = 0; + mode = mode + 1; + if(mode >= 4){ + lcd.locate(0,0);// lcd.printf("%s",address[mode]); + lcd.printf("edited\n"); + break; + }else{;} + + lcd.cls(); + lcd.locate(0,0);// lcd.printf("%s",address[mode]); + lcd.printf("%d %s",mode,word[mode]); + + }else if((Setkey == 1 )&& (port20.state == 0)){ + port20.state = 1; + }else{;} + + /* ----Right Key -----*/ + if((Rightkey == 0 )&& (port16.state== 1)){ + port16.state = 0; + keta = keta+1; + if( keta >= 3){ + keta = 0; + mono = mono+1; + if( mono = 4 ){ + mono = 0; + }else{ //i == 0, 1, 2, 3 + ; + } + }else{ // j == 0, 1, 2; + ; + } + /* debug */ + lcd.locate(15,0); + lcd.printf("R"); + lcd.locate(13,0); + lcd.printf("%d%d",mono, keta); + }else if((Rightkey == 1) && (port16.state == 0)){ + port16.state = 1; + }else{;} + + /* ----Left Key -----*/ + if((Leftkey == 0) && (port19.state==1)){ + + port19.state = 0; + keta = keta - 1; + if( keta < 0){ // j== 0, 1, 2; + keta = 2; + mono = mono - 1; + if( mono < 0 ){ // i == 0, 1, 2, 3 + mono = 3; + }else{ + ; + } + }else{ + ; + } + /* debug */ + lcd.locate(15,0); + lcd.printf("L"); + lcd.locate(13,0); + lcd.printf("%d%d",mono,keta); + + }else if((Leftkey == 1 )&& (port19.state == 0)){ + port19.state = 1; + }else{;} + + /* ----Down Key -----*/ + if((Downkey == 0) && (port18.state==1)){ + port18.state = 0; + ipe[mode][mono][keta] = ipe[mode][mono][keta]-1; + if(ipe[mode][mono][keta] < 0){ + ipe[mode][mono][keta] = 9; + }else{;} + /* debug */ + lcd.locate(15,0); + lcd.printf("D"); + lcd.locate(13,0); + lcd.printf("%d ",ipe[mode][mono][keta]); + }else if((Downkey == 1 )&& (port18.state == 0)){ + port18.state = 1; + }else{;} + + /* ----Upper Key -----*/ + if((Upperkey == 0 )&& (port17.state==1)){ + port17.state = 0; + ipe[mode][mono][keta] = ipe[mode][mono][keta]+1; + if(ipe[mode][mono][keta] > 9){ + ipe[mode][mono][keta] = 0; + }else{;} + /* debug */ + lcd.locate(15,0); + lcd.printf("U"); + lcd.locate(13,0); + lcd.printf("%d ",ipe[mode][mono][keta]); + + + }else if((Upperkey == 1) && (port17.state == 0)){ + port17.state = 1; + }else{;} + +// lcd.locate(1,0); lcd.printf("%d.%d.%d.%d", ip[0],ip[1],ip[2],ip[3]); + + + + for(mono=0; mono<4; mono++){ + ip[mode][mono] = 100*ipe[mode][mono][0] + 10*ipe[mode][mono][1] + ipe[mode][mono][2]; + } + sprintf(address[mode],"%3d.%3d.%3d.%3d", ip[mode][0],ip[mode][1],ip[mode][2],ip[mode][3]); +// lcd.cls(); +// lcd.locate(0,0); lcd.printf("%s",address[mode]); +// lcd.printf("%s\n",word[mode]); + + + wait(0.2); + } + + // config_write(); + lcd.cls(); +// return 0; +} + +/* +int config_write(int *IP[4], int *NM[4], int *GW[4], int *NS[4]){ + FILE *conf_fp; + char buf[80], name[16]; + int ip0, ip1, ip2, ip3; + + conf_fp = fopen("/local/ipconfig.txt","w"); + if(NULL == conf_fp){ + //printf("\r\nError: The message file cannot be accessed\r\n"); + lcd.printf("File access error"); + return -1; + } + + fclose(conf_fp); r + return 0; +} +*/ + + +int config_read(){ + FILE *conf_fp; + char buf[80], name[16]; + int ip0, ip1, ip2, ip3; + + conf_fp = fopen("/local/ipconfig.txt","r"); + if(NULL == conf_fp){ + //printf("\r\nError: The message file cannot be accessed\r\n"); + lcd.printf("File access error"); + return -1; + } + + while( fgets(buf,sizeof(buf),conf_fp) != NULL){ + lcd.cls(); //debug + //lcd.locate(0,0);lcd.printf("%s\n",buf); // debug + if(sscanf(buf, "%s %d,%d,%d,%d", name, &ip0, &ip1, &ip2, &ip3) != 0){ + //lcd.locate(0,0); + //lcd.printf("%s\n%3d,%3d,%3d,%3d", name, ip0, ip1, ip2, ip3); + }else{ + lcd.printf("error..."); + return -1; + } + + if(strcmp(name,"IPAddress")==0){ + lcd.printf("IP Address\n"); + lcd.printf("%d.%d.%d.%d",ip0, ip1, ip2, ip3); + ipaddr = IpAddr(ip0, ip1, ip2, ip3); + + } + if(strcmp(name,"NetworkMask")==0){ + lcd.printf("NetworkMask\n"); + lcd.printf("%d.%d.%d.%d",ip0, ip1, ip2, ip3); + netmask = IpAddr(ip0, ip1, ip2, ip3); + } + if(strcmp(name,"Gateway")==0){ + lcd.printf("Gateway\n"); + lcd.printf("%d.%d.%d.%d",ip0, ip1, ip2, ip3); + gateway = IpAddr(ip0, ip1, ip2, ip3); + } + if(strcmp(name,"DNS")==0){ + lcd.printf("Domain Name\n"); + lcd.printf("%d.%d.%d.%d",ip0, ip1, ip2, ip3); + nameserver = IpAddr(ip0, ip1, ip2, ip3); + } + wait(3); + }; + + fclose(conf_fp); + return 0; +} + + +int setup(){ + if (ipaddr[0] == 255) { + // dhcp ip address + eth = new EthernetNetIf; + } else { + // static ip address + eth = new EthernetNetIf(ipaddr, netmask, gateway, nameserver); + } + + EthernetErr ethErr = eth->setup(); + + if(ethErr){ + lcd.cls(); + lcd.printf("Error %d in setup.", ethErr); + return -1; + } + + return 0; +} + +int test(){ + led2 = 1; + return 0; +} + + +int main() { + int i=0; + + lcd.printf("Setting up..."); + config_read(); + if(setup() != 0){ + return -1; + } + + + lcd.cls(); + lcd.printf("Setup OK"); + + IpAddr ip = eth->getIp() ; + + lcd.cls(); + lcd.printf("IP Address\n"); + lcd.printf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); +// wait(5); + +// Timer tm; +// tm.start(); + + + //Listen indefinitely + while(true){ + + Net::poll(); + //if(tm.read()>.5){ + + + if(i>5){ + led1=!led1; //Show that we are alive + i=0; + }else{ + i++; + } + // lcd.printf("main loop\n"); + + + if(Setkey == 0 && port20.state==1){ + port20.state = 0; + test(); + +// led2 = !led2; + edit(); + + lcd.cls(); + lcd.printf("IP Address\n"); + //lcd.printf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); + //lcd.printf("main loop\n"); + lcd.printf("%3d.%3d.%3d.%3d.", ip[0], ip[1], ip[2], ip[3]); + +/* if((config_read() != 0) && (setup() !=0)){ + return -1; + } + IpAddr ip = eth->getIp() ; +*/ + }else if(Setkey == 1 && port20.state == 0){ + port20.state = 1; + led2 = 0; + }else if(Setkey == 0 && port20.state == 0){ // state == 0 +// led2 = !led2; + }else{ //Setkey ==1 && state == 1 +// led2 = !led2; + } +// tm.start(); +// } + wait(0.1); + } + + lcd.cls(); + lcd.printf("bye!"); + return 0; +} \ No newline at end of file