Servo controll with gainspan GS1011M wifi module
Dependencies: GSwifiInterface Servo mbed
main.cpp@0:de06f19dce2b, 2013-02-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |