////////////////
//Le Petit Bot//
////////////////
/* un programme conu par Julien Rat sous licence CC-By-Sa. 
Ce programme sert  piloter le "Petit Bot". 
C'est un robot pdagogique, trs peu cher, utilis par les petits dbrouillards*/

#include <ESP8266WiFi.h>

//////////////////////
//Dfinition du Wifi//
//////////////////////
const char WiFiAPPSK[] = "1234567890"; //mot de passe

//////////////////////////
//Dfinition des broches//
//////////////////////////

#include <Servo.h>

Servo monservo1;

Servo monservo2;

WiFiServer server(80);

void setup()
{
  initHardware();
  setupWiFi();
  server.begin();
  monservo1.attach(5);
  monservo2.attach(4);
  monservo1.write(91); 
  monservo2.write(93); 

}

void loop()
{
  // Regarder si un client s'est connect
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Lire la premire ligne de la requte
  String req = client.readStringUntil('\r');
  
  client.flush();

  // Tester la requte pour identifier la consigne
  int val = -1; 

  if (req.indexOf("/stop") != -1)
    val = 0; 
  else if (req.indexOf("/avance") != -1)
    val = 1;
  else if (req.indexOf("/recule") != -1)
    val = 2; 
  else if (req.indexOf("/gauche") != -1)
    val = 3; 
  else if (req.indexOf("/droite") != -1)
    val = 4; 



  // Prpare la page web de rponse. Dbute par le len-tte (header) commun :
  String s = "HTTP/1.1 200 OK\r\n";
  s += "Content-Type: text/html\r\n\r\n";
  s += "<!DOCTYPE HTML>\r\n<html>\r\n";
  if (req.indexOf("/commande") != -1 ) {
    s += "<input type=\"button\" onclick=\"location.href='192.168.4.1/led/1';\" value=\" OFF \" />";
    s += "<input type=\"button\" onclick=\"location.href='192.168.4.1/led/0';\" value=\" ON \" />";

  }
  // Si on a reu linstruction, il faut la lappliquer au robot
  if (val == 2 ) //avance
  {
    s += " avance ";
    monservo2.write(0);  //avance
    monservo1.write(180);  //avance
  }
  if (val == 1)//recule
  { 
    s += " recule ";
    monservo2.write(180);  //recule
    monservo1.write(0);  //recule
  }
  if (val == 0)
  { 
    s += " recule ";
    monservo1.write(91);  //recule
    monservo2.write(93);  //recule
  }
  if (val == 3)
  { 
    s += " gauche ";
    monservo1.write(180);  //gauche
    monservo2.write(180);  //recule
  }
  if (val == 4)
  { 
    s += " droite ";
    monservo1.write(0);  //droite
    monservo2.write(0);  //recule
  }


  s += "</html>\n";

  // Envoie la rponse au client
  client.print(s);
  delay(1);
  Serial.println("Client deconnectay );
  client.flush();

}

void setupWiFi()
{
  WiFi.mode(WIFI_AP);
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();
  String AP_NameString = "PetitBot";

  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, 0, AP_NameString.length() + 1);//zero out AP_NameChar

  for (int i = 0; i < AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);

  WiFi.softAP(AP_NameChar, WiFiAPPSK, 7);
}

void initHardware()
{
  Serial.begin(115200);//ouvre le moniteur srie
} //Ce programme est inspir de celui-ci : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf