Servo controll with gainspan GS1011M wifi module

Dependencies:   GSwifiInterface Servo mbed

Committer:
diasea
Date:
Wed Feb 06 15:52:47 2013 +0000
Revision:
0:de06f19dce2b
Servo controll with gainspan GS1011M wifi module

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diasea 0:de06f19dce2b 1 #include "mbed.h"
diasea 0:de06f19dce2b 2 #include "GSwifiInterface.h"
diasea 0:de06f19dce2b 3 #include "Servo.h"
diasea 0:de06f19dce2b 4
diasea 0:de06f19dce2b 5 Servo servo1(p22);
diasea 0:de06f19dce2b 6 Servo servo2(p23);
diasea 0:de06f19dce2b 7
diasea 0:de06f19dce2b 8 Serial pc(USBTX, USBRX);
diasea 0:de06f19dce2b 9
diasea 0:de06f19dce2b 10 GSwifiInterface gs(p13, p14, NC, NC, p9, "SSID", "PHRASE", GSwifi::SEC_WPA_PSK);
diasea 0:de06f19dce2b 11 // TX, RX, CTS, RTS, RESET
diasea 0:de06f19dce2b 12
diasea 0:de06f19dce2b 13 unsigned char buff[30];
diasea 0:de06f19dce2b 14 int RecvCount = 0;
diasea 0:de06f19dce2b 15 int ParamLen = 0;
diasea 0:de06f19dce2b 16 int ParamCount = 0;
diasea 0:de06f19dce2b 17 void Recv(unsigned char data);
diasea 0:de06f19dce2b 18 void ServoCmdExec();
diasea 0:de06f19dce2b 19
diasea 0:de06f19dce2b 20 int main () {
diasea 0:de06f19dce2b 21 pc.baud(115200);
diasea 0:de06f19dce2b 22 RecvCount = 0;
diasea 0:de06f19dce2b 23 ParamLen = 0;
diasea 0:de06f19dce2b 24 ParamCount = 0;
diasea 0:de06f19dce2b 25 servo1 = 0.5f;
diasea 0:de06f19dce2b 26 servo2 = 0.5f;
diasea 0:de06f19dce2b 27 pc.printf("OK");
diasea 0:de06f19dce2b 28
diasea 0:de06f19dce2b 29 gs.init("192,168,1,17", "255,255,255,0", "192,168,1,254"); // use Static IP
diasea 0:de06f19dce2b 30 if (gs.connect() == false) {
diasea 0:de06f19dce2b 31 return -1; // join the network
diasea 0:de06f19dce2b 32 }
diasea 0:de06f19dce2b 33 printf("IP Address is %s\n\r", gs.getIPAddress());
diasea 0:de06f19dce2b 34
diasea 0:de06f19dce2b 35 TCPSocketServer server;
diasea 0:de06f19dce2b 36 server.bind(10002);
diasea 0:de06f19dce2b 37 server.listen();
diasea 0:de06f19dce2b 38
diasea 0:de06f19dce2b 39 while (true) {
diasea 0:de06f19dce2b 40 printf("\nWait for new connection...\n");
diasea 0:de06f19dce2b 41 TCPSocketConnection client;
diasea 0:de06f19dce2b 42 server.accept(client);
diasea 0:de06f19dce2b 43 client.set_blocking(false, 1500); // Timeout after (1.5)s
diasea 0:de06f19dce2b 44
diasea 0:de06f19dce2b 45 printf("Connection from: %s\n", client.get_address());
diasea 0:de06f19dce2b 46 char buf[300];
diasea 0:de06f19dce2b 47 while (true) {
diasea 0:de06f19dce2b 48 int len = client.receive(buf, sizeof(buf));
diasea 0:de06f19dce2b 49 for (int i = 0; i < len; i++) {
diasea 0:de06f19dce2b 50 Recv((unsigned char)buf[i]);
diasea 0:de06f19dce2b 51 }
diasea 0:de06f19dce2b 52 }
diasea 0:de06f19dce2b 53
diasea 0:de06f19dce2b 54 client.close();
diasea 0:de06f19dce2b 55 }
diasea 0:de06f19dce2b 56
diasea 0:de06f19dce2b 57 gs.disconnect();
diasea 0:de06f19dce2b 58 }
diasea 0:de06f19dce2b 59
diasea 0:de06f19dce2b 60 void Recv(unsigned char data) {
diasea 0:de06f19dce2b 61 switch (RecvCount) {
diasea 0:de06f19dce2b 62 case 0:
diasea 0:de06f19dce2b 63 ParamLen = 0;
diasea 0:de06f19dce2b 64 ParamCount = 0;
diasea 0:de06f19dce2b 65 if (data == 0xff) { // Headder
diasea 0:de06f19dce2b 66 buff[RecvCount++] = data;
diasea 0:de06f19dce2b 67 }
diasea 0:de06f19dce2b 68 break;
diasea 0:de06f19dce2b 69 case 1:
diasea 0:de06f19dce2b 70 if (data == 0) { // ID
diasea 0:de06f19dce2b 71 buff[RecvCount++] = data;
diasea 0:de06f19dce2b 72 }
diasea 0:de06f19dce2b 73 break;
diasea 0:de06f19dce2b 74 case 2: // LENGTH
diasea 0:de06f19dce2b 75 buff[RecvCount++] = data;
diasea 0:de06f19dce2b 76 ParamLen = data;
diasea 0:de06f19dce2b 77 break;
diasea 0:de06f19dce2b 78 default:
diasea 0:de06f19dce2b 79 if (ParamLen > 0) {
diasea 0:de06f19dce2b 80 buff[RecvCount++] = data;
diasea 0:de06f19dce2b 81 ParamCount++;
diasea 0:de06f19dce2b 82 if (ParamCount >= ParamLen) {
diasea 0:de06f19dce2b 83 ServoCmdExec();
diasea 0:de06f19dce2b 84 RecvCount = 0;
diasea 0:de06f19dce2b 85 }
diasea 0:de06f19dce2b 86 } else {
diasea 0:de06f19dce2b 87 RecvCount = 0;
diasea 0:de06f19dce2b 88 }
diasea 0:de06f19dce2b 89 break;
diasea 0:de06f19dce2b 90 }
diasea 0:de06f19dce2b 91 }
diasea 0:de06f19dce2b 92
diasea 0:de06f19dce2b 93 void ServoCmdExec() {
diasea 0:de06f19dce2b 94 float tmp1 = (float)buff[4]/255.0f;
diasea 0:de06f19dce2b 95 float tmp2 = (float)buff[5]/255.0f;
diasea 0:de06f19dce2b 96 servo1 = tmp1;
diasea 0:de06f19dce2b 97 servo2 = tmp2;
diasea 0:de06f19dce2b 98
diasea 0:de06f19dce2b 99 pc.printf("servo1 = %02Xh %.1f",buff[4],tmp1);
diasea 0:de06f19dce2b 100 pc.printf("servo2 = %02Xh %.1f",buff[5],tmp2);
diasea 0:de06f19dce2b 101 }