전시회용
Dependencies: Servo WizFi250Interface mbed
Fork of Remote_Boat_WIZwiki-W7500ECO_WizFi250 by
Diff: main.cpp
- Revision:
- 0:5bf873326d8c
- Child:
- 1:91f8a27fc9a0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Mar 28 06:48:38 2016 +0000 @@ -0,0 +1,192 @@ +#include <stdio.h> +#include "mbed.h" +#include "WizFi250Interface.h" +#include "Servo.h" + + + +Serial pc(USBTX, USBRX); + +/* network setup */ +WizFi250Interface wizfi250(P13,P14,P11,P12,P15,NC,115200); +TCPSocketServer server; +TCPSocketConnection client; + +#define SECURE WizFi250::SEC_WPA2_MIXED +#define SSID "WIZnet_Boat" +#define PASS "wiznetboat" +#define PORT 5000 + + +/* motor setup */ +Servo servo(P23); +PwmOut motor(P21); + + + +/* direction define */ +#define forward "WIZnet_boat_direction:forward" +#define back "WIZnet_boat_direction:back" +#define left "WIZnet_boat_direction:left" +#define right "WIZnet_boat_direction:right" +#define stop "WIZnet_boat_direction:stop" + + + +/* Connection Steps */ +typedef enum ConnectionStep { DISASSOCIATED = 1, ASSOCIATED, LISTENED, CONNECTED, DISCONNECTED } conStep; +conStep ConnectionStep = DISASSOCIATED; + +/* functions */ +int TryApUp(); +int TryServerUpAndWaitClient(); + + +int main() +{ + pc.baud(115200); + motor.period_ms(1); + float speed = 0.0; + + while(1) + { + char rcvBuf[1024] = {0,}; + int len = 0; + switch(ConnectionStep) + { + case DISASSOCIATED: + TryApUp(); + break; + + case ASSOCIATED: + case LISTENED: + TryServerUpAndWaitClient(); + break; + + case CONNECTED: + + int isconnected = client.is_connected(); + if( isconnected == 0 ) ConnectionStep = DISCONNECTED; + + if( wizfi250.readable(0) > 0 ) + { + len = client.receive(rcvBuf, 1023); + if( len < 0 ) ConnectionStep = DISCONNECTED; + else if( len > 0) + { + if( strcmp(rcvBuf,forward) == 0 ) + { + speed = speed + 0.5; + printf("forward\r\n"); + } + else if( strcmp(rcvBuf,back) == 0 ) + { + speed = speed - 0.5; + printf("back\r\n"); + } + else if( strcmp(rcvBuf,left) == 0 ) + { + servo = servo - 0.1; + printf("left\r\n"); + } + else if( strcmp(rcvBuf,right) == 0 ) + { + servo = servo + 0.1; + printf("right\r\n"); + } + else if( strcmp(rcvBuf,stop) == 0 ) + { + servo = 0.5; // center + speed = 0; + printf("stop\r\n"); + } + + if( speed < 0.0 ) speed = 0.0; + else if ( speed > 255.0 ) speed = 255.0; + printf("speed %.3f\r\n", speed); + motor.write(speed); + } + } + break; + case DISCONNECTED: + servo = 0.5; + motor.write(0); + ConnectionStep = LISTENED; + + + } + + } + + +} + +int TryApUp() +{ + + if( wizfi250.isAssociated() == 1 ) return -1; + + printf(" AP UP\r\n"); + printf("SSID: %s\r\nPASS: %s", SSID, PASS); + + for(int i= 0; i<5; i++) + { + wizfi250.init(); + wizfi250.setAddress("192.168.0.2","255.255.255.0","192.168.0.2"); + if ( wizfi250.connect(SECURE, SSID, PASS, WizFi250::WM_AP) ) + continue; + else { + printf("IP Address is %s\r\n", wizfi250.getIPAddress()); + if( wizfi250.isAssociated() == 1 ) + { + ConnectionStep = ASSOCIATED; + return 0; + } else { + continue; + } + } + } + + printf("Fail to make AP\r\n"); + ConnectionStep = DISASSOCIATED; + return -1; +} + + +int TryServerUpAndWaitClient() +{ + if( wizfi250.isAssociated() != 1 ) return -1; + + if( ConnectionStep == ASSOCIATED ) + { + if( server.bind(PORT) < 0 ) + { + printf("Bind fail..\r\n"); + return -1; + } + + if( server.listen(1) < 0) + { + printf("Listen fail..\r\n"); + return -1; + } else { + printf("Listen PORT: %d\r\n",PORT); + ConnectionStep = LISTENED; + } + } + + while(ConnectionStep == LISTENED) + { + if( server.accept(client) < 0 ) + { + printf("accept fail..\r\n"); + return -1; + }else{ + printf("Connection Success!!\r\nIP: %s\r\n", client.get_address()); + ConnectionStep = CONNECTED; + return 0; + } + } + + return -1; +}