Electric Skateboard using Wi-Fi controller.

Dependencies:   Servo WizFi250Interface mbed

Revision:
0:aca1f2f5443d
Child:
1:a710607c27cd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 28 11:25:26 2015 +0000
@@ -0,0 +1,314 @@
+#include "mbed.h"
+#include "Servo.h"
+#include "WizFi250Interface.h"
+
+#define SECURE WizFi250::SEC_WPA2_MIXED
+#define SSID "Kaizen_Skate"
+#define PASS "qwertyuiop"
+
+#define SERVER_PORT    5000
+#define STOP_MOTOR     50
+
+
+#if defined(TARGET_WIZwiki_W7500P)
+    WizFi250Interface wizfi250(PC_2,PC_3,PC_13,PC_14,PC_12,NC,115200);
+    Serial pc(USBTX, USBRX);
+    Servo motor_speed(PC_8);      // it used to percentage value ( 0 ~ 1 )
+    DigitalOut green_led(LED2);    
+    DigitalOut red_led(LED1);
+    DigitalOut blue_led(LED3);
+#endif
+
+//#define START_SIGNAL        0x0102FEFD
+//#define END_SIGNAL          0x0201FDFE
+//#define CONTROL_UP          0x0304FCFB
+//#define CONTROL_DOWN        0x0403FBFD
+//#define CONTROL_CRUISER     0x0506FAF9
+//
+//#define STATUS_CMD_OK       0x10101010
+//#define STATUS_CMD_FAIL     0x01010101
+
+#define START_MSG       "START"
+#define END_MSG         "END\n"
+#define CONTROL_UP      "UPXX"
+#define CONTROL_DOWN    "DOWN"
+#define CONTROL_CRUISER "CRUI"
+#define CONTROL_STOP    "STOP"
+
+#define STATUS_CMD_OK   "OKXX"
+#define STATUS_CMD_FAIL "FAIL"
+
+#define CONTROL_MSG_SIZE    19
+
+// Control Pkt Format : START,CONTROL,SPEED_VALUE,END
+//                      START,UPXX,500,END
+// Status Pkt Format : START,CONTROL,SPEED_VALUE,STATUS,END
+
+struct control_pkt{
+    char start_msg[6];
+    char control_msg[5];
+    char speed_msg[4];
+    char end_msg[4];
+};
+void parse(char buffer[], int *j, char *string);
+//struct status_pkt{
+//    char start_msg[6];
+//    char speed_msg[4];
+//    char status_msg[5];
+//    char end_msg[4];
+//}
+
+int main() {    
+    int recv_cnt,j;
+    volatile float speed_value = 0.5;
+    char recv_control_msg[100];
+    char status_msg[100];
+    control_pkt control;
+
+    pc.baud(115200);
+    green_led = 1; red_led = 1; blue_led = 1;
+
+    wizfi250.init();
+    wizfi250.setAntMode(WizFi250::PCB);
+    wizfi250.setAddress("192.168.100.2","255.255.255.0","192.168.100.1");
+    if ( wizfi250.connect(SECURE, SSID, PASS, WizFi250::WM_AP))
+    {
+        red_led = 0;
+        return -1;
+    }
+    printf("IP Address is %s\r\n", wizfi250.getIPAddress());
+    green_led = 0; red_led = 0; blue_led = 0;
+
+    TCPSocketServer server;
+    TCPSocketConnection client;
+
+    while(true)
+    {
+        if( client.is_connected() == false )
+        {
+            green_led = 1; red_led = 1; blue_led = 0;            
+            client.close();
+            server.close();
+            
+            if(speed_value == 0.5)
+            {
+                server.bind(SERVER_PORT);
+                server.listen();
+
+                printf("\nWait for new connection...\r\n");
+                server.accept(client);
+                client.set_blocking(false, 1500);
+            }
+            else if(speed_value <= 0.45)
+            {
+                printf("Speed decrease +\r\n");
+                speed_value += 0.05;
+                motor_speed = speed_value;
+            }
+            else if(speed_value >= 0.55)
+            {
+                printf("Speed decrease -\r\n");
+                speed_value -= 0.05;
+                motor_speed = speed_value;
+            }
+        }
+        else
+        {
+            motor_speed = speed_value;
+
+            green_led = 0; red_led = 1; blue_led = 1;
+            //recv_cnt = client.receive_all((char*)recv_control_msg, sizeof(control)-1);
+            recv_cnt = client.receive_all((char*)recv_control_msg, sizeof(control));
+            
+            j=0;
+            parse(recv_control_msg, &j, control.start_msg);
+            parse(recv_control_msg, &j, control.control_msg);
+            parse(recv_control_msg, &j, control.speed_msg);
+            parse(recv_control_msg, &j, control.end_msg);
+            
+            if(recv_cnt > 0)
+            {
+                if( (strncmp(control.start_msg,START_MSG,sizeof(control.start_msg)) != 0) || 
+                    (strncmp(control.end_msg,END_MSG,sizeof(control.end_msg)) != 0) )
+                {
+                    printf("TEST Error\r\n");
+                    sprintf(status_msg,"%s,%03d,%s,%s\n",START_MSG,int(speed_value*100),STATUS_CMD_FAIL,END_MSG);
+                    client.send_all((char*)status_msg,strlen(status_msg));
+                    continue;
+                }
+                
+                if( strncmp(control.control_msg,CONTROL_UP,sizeof(control.control_msg)) == 0 )
+                {
+                    speed_value += 0.05; 
+                    motor_speed = speed_value;
+                    printf("TEST UP %f\r\n",speed_value); 
+                }
+                else if( strncmp(control.control_msg,CONTROL_DOWN,sizeof(control.control_msg)) == 0)
+                {
+                    speed_value -= 0.05; 
+                    motor_speed = speed_value;
+                    printf("TEST DOWN %f\r\n",speed_value);
+                }
+                else if( strncmp(control.control_msg,CONTROL_CRUISER,sizeof(control.control_msg)) == 0)
+                {
+                    printf("TEST CRUISER\r\n"); 
+                    speed_value = (float)(atoi(control.speed_msg)) / 100;
+                    motor_speed = speed_value;
+                }
+                else if( strncmp(control.control_msg,CONTROL_STOP,sizeof(control.control_msg)) == 0)
+                {
+                    speed_value = 0.5;
+                    motor_speed = speed_value;
+                    printf("TEST STOP\r\n"); 
+                }
+                else
+                {
+                    printf("TEST Error 1-2\r\n");
+                    sprintf(status_msg,"%s,%03d,%s,%s\n",START_MSG,int(speed_value*100),STATUS_CMD_FAIL,END_MSG);
+                    client.send_all((char*)status_msg,strlen(status_msg));
+                    continue;
+                }
+
+                sprintf(status_msg,"%s,%03d,%s,%s\n",START_MSG,int(speed_value*100),STATUS_CMD_OK,END_MSG);
+                client.send_all((char*)status_msg,strlen(status_msg));
+            }
+            else
+            {
+                sprintf(status_msg,"%s,%03d,%s,%s\n",START_MSG,int(speed_value*100),STATUS_CMD_OK,END_MSG);
+                client.send_all((char*)status_msg,strlen(status_msg));
+            }
+        }
+    }// while
+}
+
+/*
+int main() {    
+    int recv_cnt;
+    volatile float speed_value = 0.5;
+    control_pkt skate_control_pkt;
+    status_pkt  skate_status_pkt;
+    char recv_control_msg[100];
+    
+
+    pc.baud(115200);
+    green_led = 1; red_led = 1; blue_led = 1;
+
+    wizfi250.init();
+    wizfi250.setAntMode(WizFi250::UFL);
+    wizfi250.setAddress("192.168.100.2","255.255.255.0","192.168.100.1");
+    if ( wizfi250.connect(SECURE, SSID, PASS, WizFi250::WM_AP))
+    {
+        red_led = 0;
+        return -1;
+    }
+    printf("IP Address is %s\r\n", wizfi250.getIPAddress());
+    green_led = 0; red_led = 0; blue_led = 0;
+
+    TCPSocketServer server;
+    TCPSocketConnection client;
+
+    while(true)
+    {
+        if( client.is_connected() == false )
+        {
+            green_led = 1; red_led = 1; blue_led = 0;            
+            client.close();
+            server.close();
+            
+            if(speed_value == 0.5)
+            {
+                server.bind(SERVER_PORT);
+                server.listen();
+
+                printf("\nWait for new connection...\r\n");
+                server.accept(client);
+                client.set_blocking(false, 1500);
+            }
+            else if(speed_value <= 0.45)
+            {
+                 speed_value += 0.005;
+                 motor_speed = speed_value;
+            }
+            else if(speed_value >= 0.55)
+            {
+                 speed_value -= 0.005;
+                motor_speed = speed_value;
+            }
+        }
+        else
+        {
+            motor_speed = speed_value;
+
+            green_led = 0; red_led = 1; blue_led = 1;
+            //recv_cnt = client.receive_all((char*)&skate_control_pkt, sizeof(skate_control_pkt));
+            recv_cnt = client.receive_all((char*)recv_control_msg, sizeof(recv_control_msg));
+            
+            if(recv_cnt > 0)
+            {
+                //printf("%x,%x,%x,%x\r\n",skate_control_pkt.start_signal,skate_control_pkt.control,skate_control_pkt.speed_value,skate_control_pkt.end_signal);
+                
+                printf("TEST %s\r\n",
+                if( (skate_control_pkt.start_signal != START_SIGNAL) || (skate_control_pkt.end_signal != END_SIGNAL) )
+                {
+                    printf("TEST 100\r\n");
+                    skate_status_pkt.start_signal = START_SIGNAL;
+                    skate_status_pkt.end_signal = END_SIGNAL;
+                    skate_status_pkt.speed_value = speed_value * 100;
+                    skate_status_pkt.status = STATUS_CMD_FAIL;
+                    client.send_all((char*)&skate_status_pkt, sizeof(skate_status_pkt));
+                    continue;
+                }
+    
+                if( skate_control_pkt.control == CONTROL_UP )
+                {
+                    speed_value += 0.005; 
+                    motor_speed = speed_value;
+                    printf("TEST UP %f\r\n",speed_value); 
+                }
+                else if( skate_control_pkt.control == CONTROL_DOWN )
+                {
+                    speed_value -= 0.005; 
+                    motor_speed = speed_value;
+                    printf("TEST DOWN %f\r\n",speed_value);
+                }
+                else if( skate_control_pkt.control == CONTROL_CRUISER )
+                {
+                    speed_value = skate_control_pkt.speed_value / 100; 
+                    motor_speed = speed_value;
+                    printf("TEST CRUISER\r\n"); 
+                }
+                else
+                {
+                    printf("TEST 101\r\n");
+                    skate_status_pkt.start_signal = START_SIGNAL;
+                    skate_status_pkt.end_signal = END_SIGNAL;
+                    skate_status_pkt.status = STATUS_CMD_FAIL;
+                    skate_status_pkt.speed_value = speed_value * 100;                
+                    client.send_all((char*)&skate_status_pkt, sizeof(skate_status_pkt));
+                    continue;
+                }
+                printf("TEST 103\r\n");
+
+                skate_status_pkt.start_signal = START_SIGNAL;
+                skate_status_pkt.end_signal = END_SIGNAL;
+                skate_status_pkt.status = STATUS_CMD_OK;
+                skate_status_pkt.speed_value = speed_value * 100;
+                client.send_all((char*)&skate_status_pkt, sizeof(skate_status_pkt));
+            }
+        }
+    }// while
+}
+*/
+
+void parse(char buffer[], int *j, char *string) {
+//extracts next location string data item from buffer
+    int i=0;
+    for (i=0; i<=strlen(buffer); i++) {  //TOTAL SIZE OF RETURNED DATA
+        if ((buffer[*j+i] == ',')||(buffer[*j+i] == '\0' )) { //IF comma or end of string
+            //comma is the string field delimiter
+            string[i]=0; //SETS END OF SRTRING TO 0
+            *j=*j+i+1; //UPDATES to 1 after comma seperated value
+            break;
+        } else string[i]=buffer[*j+i]; //Keep adding to the string
+    }
+}