Uart 3
#include <ESP8266WiFI.h>
/*F********************************************************************
*
**********************************************************************/
#include <ESP8266WiFi.h>

//************************* DEFINES ************************************
#define  BAUD  9600

//************************* PROTOTYPES ************************************

//************************* VARIABLES ************************************
// WiFiClient Clnt;
WiFiClient Clnt = Srv.available();
WiFiServer Srv( 80 );
char Ssid[] = "Linksys59517";                              // HOME WiFi SSID 
IPAddress Ip( 192,168,1,213 );                        // ESP NAME IP ADDRESS 
IPAddress Gwy( 192,168,1,1 );                             // NETWORK GATEWAY
IPAddress SubNet( 255,255,255,0 );                    // NETWORK SUBNET MASK 
float BattV;
int HiBandLim = 2500, LoBandLim = 1400, SloStartLim = 3600;
int SloStopLim = 500, UpDownInt, UpDownInt2, Val3Int, Val4Int;
int MotorVal, PwmVal0, PwmVal2;
String Start, UpDown, UpDowna, UpDownb, UpDownc, UpDownd, UpDown2;
String UpDown2a, UpDown2b, UpDown2c, UpDown2d; 
String Val3, Val3A, Val3B, Val3C, Val3D, Val4, Val4A, Val4B, Val4C, Val4D;

/*F********************************************************************
*
**********************************************************************/
void 
setup() 
{
    // Serial.begin( BAUD );                               // ONLY FOR DEBUG
    WiFi.config( Ip, Gwy, SubNet );                   // FORCES FIXED IP
    WiFi.begin( Ssid, pass );                     // CONNECTS TO WiFi ROUTER
    while( WiFi.status() != WL_CONNECTED ) 
    {
        Serial.println( "." );
        delay( 50 );
    }  
    Serial.println( "Connected to wifi" );
    Srv.begin(); 
    pinMode( 0, OUTPUT );
    pinMode( 2, OUTPUT );
    pinMode( 4, OUTPUT );    
    pinMode( 5, OUTPUT );    
    pinMode( 12, OUTPUT );   
    pinMode( 13, OUTPUT );   
    pinMode( 14, OUTPUT );   
    pinMode( 16, OUTPUT );   
    digitalWrite( 4,  LOW ); 
    digitalWrite( 5,  LOW ); 
    digitalWrite( 12, LOW ); 
    digitalWrite( 13, LOW ); 
    digitalWrite( 14, LOW ); 
    digitalWrite( 16, LOW ); 
}
/*F********************************************************************
*
**********************************************************************/
void 
loop () 
{
	String   req;

    Serial.println( "Not connected" );  
    // BattV = analogRead( A0 );
    if( Clnt = Srv.available())
    {
        Srv.begin();
        while( Clnt.connected() )
        {
            if( !Clnt.connected() ) 
            {
                digitalWrite( 2, HIGH );
                delay( 100 );
                digitalWrite( 2, LOW );
                delay( 100 );
                Serial.println();
                Serial.println( "disconnecting." );
                Clnt.stop();
                Srv.available();
            }
            if( Clnt.available() )
            {
                req = Clnt.readStringUntil( 'y' );
                UpDowna = req.charAt( 0 );                     // UpDown
                UpDownb = req.charAt( 1 );
                UpDownc = req.charAt( 2 );
                UpDownd = req.charAt( 3 );
                UpDown = UpDowna + UpDownb + UpDownc + UpDownd;
                UpDown2a = req.charAt( 4 );                   // UpDown2
                UpDown2b = req.charAt( 5 );
                UpDown2c = req.charAt( 6 );
                UpDown2d = req.charAt( 7 );
                UpDown2 = UpDown2a + UpDown2b + UpDown2c + UpDown2d;
                Val3A = req.charAt( 8 );                         // Val3
                Val3B = req.charAt( 9 );
                Val3C = req.charAt( 10 );
                Val3D = req.charAt( 11 );
                Val3 = Val3A + Val3B + Val3C + Val3D;
                Val4A = req.charAt( 12 );                        // Val4
                Val4B = req.charAt( 13 );
                Val4C = req.charAt( 14 ); 
                Val4D = req.charAt( 15 );
                Val4 = Val4A + Val4B + Val4C + Val4D;
                UpDownInt = UpDown.toInt();
                UpDownInt2 = UpDown2.toInt();
                Val3Int = Val3.toInt();
                Val4Int = Val4.toInt();
                Serial.println( "UpDown is: " + UpDown );
                Serial.println( "UpDown2 is: " + UpDown2 );
                Serial.println( "Val3 is: " + Val3 );  
                Serial.println( "Val4 is: "+ Val4 );   
                if( Val3Int > HiBandLim && Val4Int < HiBandLim 
                    && Val4Int > LoBandLim )
                {        // MOVE FORWARD, BOTH MOTORS CCW
                    digitalWrite( 5, LOW );
                    digitalWrite( 4, HIGH );
                    digitalWrite( 12, LOW );
                    digitalWrite( 13, HIGH );
                    if( Val3Int > HiBandLim && Val3Int < SloStartLim ) 
                    { 
                        for( int MotorVal = HiBandLim 
                            ; MotorVal <= SloStartLim; MotorVal += 10 )
                        {
                            // MotorVal = min( MotorVal, 3000 );
                            analogWrite( 0, MotorVal ); 
                            analogWrite( 2, MotorVal ); 
                            delay( 1 );
                        }
                    } 
                }              
                else 
                if( Val3Int < LoBandLim && Val4Int < HiBandLim 
                    && Val4Int > LoBandLim )
                {                           // MOVE BACKWARD, BOTH MOTORS CW
                    digitalWrite( 5, HIGH );
                    digitalWrite( 4, LOW );
                    digitalWrite( 13, LOW );
                    digitalWrite( 12, HIGH );
                    if( Val3Int > SloStopLim && Val3Int < LoBandLim ) 
                    {
                        for( MotorVal = LoBandLim; MotorVal >= 10
                            ; MotorVal -= 10 )
                        {
                            // min( MotorVal, 3000 );
                            analogWrite( 0, ( 4095-MotorVal ) ); 
                            analogWrite( 2, ( 4095-MotorVal ) );              
                            delay( 1 );
                        }
                    } 
                }
                else if( Val4Int < LoBandLim && Val3Int < HiBandLim 
                    && Val3Int > LoBandLim )
                {                                   // MOVE RIGHT, VAL4 ONLY
                    digitalWrite( 12, HIGH );
                    digitalWrite( 13, LOW );
                    digitalWrite( 4, LOW );
                    digitalWrite( 5, LOW );
                    Serial.println( "right" );
                    analogWrite( 0, ( 4095-MotorVal ) ); 
                }
                else if( Val4Int > HiBandLim && Val3Int < HiBandLim 
                    && Val3Int > LoBandLim )
                {                                    // MOVE LEFT, VAL3 ONLY
                    digitalWrite( 12, LOW );
                    digitalWrite( 13, LOW );
                    digitalWrite( 4, HIGH );
                    digitalWrite( 5, LOW );
                    Serial.println( "left" );
                    analogWrite( 0, ( 4095-MotorVal ) ); 
                }
                else if( UpDownInt < 2000 )
                {                                                 // GO DOWN
                    digitalWrite( 16, HIGH );
                    digitalWrite( 14, LOW );
                    Serial.println( "down" );
                }
                else if( UpDownInt2 < 2000 )
                {                                                   // GO UP
                    digitalWrite( 14, HIGH );
                    digitalWrite( 16, LOW );
                    Serial.println( "up" );
                }
                else if( UpDownInt >= 2000 && Val3Int > LoBandLim 
                    && Val3Int < HiBandLim && Val4Int > LoBandLim 
                    && Val4Int < HiBandLim )
                {
                    digitalWrite( 4, LOW );
                    digitalWrite( 5, LOW );
                    digitalWrite( 12, LOW );
                    digitalWrite( 13, LOW );
                    digitalWrite( 14, LOW );
                    digitalWrite( 16, LOW );
                    Serial.print( "ALL OFF  " );
                }           
            }
        }
    }
}