//ESP32 テスト43

#include <WiFi.h>
#include <WebServer.h>

const char* ssid = "ooooooo";   //ssidを入力
const char* passwd = "xxxxxxxxx";  //ネットワークパスワード入力

WebServer server(80);           //通信を受けるポート番号(通常は80に設定)

const int led_point1 = 12;
const int led_point2 = 14;
const int led_left = 26;
const int led_right = 25;
const int led_spd = 32;
    
void setup(){
  Serial.begin(115200);       //シリアル通信のデータ転送レートを115200bpsで指定
  pinMode(led_point1, OUTPUT);
  pinMode(led_point2, OUTPUT); 
  pinMode(led_left, OUTPUT); 
  pinMode(led_right, OUTPUT); 
  pinMode(led_spd, OUTPUT); 
  digitalWrite(led_point1, LOW);
  digitalWrite(led_point2, LOW); 
  digitalWrite(led_left, LOW); 
  digitalWrite(led_right, LOW); 
  digitalWrite(led_spd, LOW); 

  WiFi.begin(ssid, passwd);       //アクセスポイント接続のためのIDとパスワードの設定
  while (WiFi.status() != WL_CONNECTED){  //接続状態の確認
    delay(300);                           //接続していなければ0.3秒待つ
    Serial.print(".");                    //接続しなかったらシリアルモニタに「.」と表示
  }

  Serial.println("");                     //シリアルモニタ改行
  Serial.println("WiFi Connected");       //接続したらシリアルモニタに「WiFi Connected」と表示
  Serial.print("IP Address : ");          //シリアルモニタに表示
  Serial.println(WiFi.localIP());         //割り当てられたIPアドレスをシリアルモニタに表示

  server.on("/", handleLedOnOff);         //TOPページのアドレスにアクセスしたときの処理関数
  server.onNotFound(handleNotFound);      //存在しないアドレスにアクセスしたときの処理関数
  server.begin();                         //WebServer起動
}

void loop(){
  server.handleClient();
}

void handleLedOnOff(){              //アクセスしたときの処理関数
  if (server.hasArg("point1")){
    if (server.arg("point1").equals("on")){
      digitalWrite(led_point1, HIGH);
      server.send(200, "text/html", "Point No1 is Revers Position");
    }
    else if (server.arg("point1").equals("off")){
      digitalWrite(led_point1, LOW);
      server.send(200, "text/html", "Point No1 is Normal Position");
    }
  }
  if (server.hasArg("point2")){
    if (server.arg("point2").equals("on")){
      digitalWrite(led_point2, HIGH);
      server.send(200, "text/html", "Point No2 is Revers Position");
    } else if (server.arg("point2").equals("off")){
      digitalWrite(led_point2, LOW);
      server.send(200, "text/html", "Point No2 is Normal Position");
    }
  }
  if (server.hasArg("direction")){
    if (server.arg("direction").equals("left")){
      digitalWrite(led_left, HIGH);
      server.send(200, "text/html", "LEFT Direction !");
    } else if (server.arg("direction").equals("right")){
      digitalWrite(led_right, HIGH);
      server.send(200, "text/html", "Right Direction !");
    } else if (server.arg("direction").equals("stop")){
      digitalWrite(led_left, LOW);
      digitalWrite(led_right, LOW);
      server.send(200, "text/html", "Now STOP");
    }
  }
  if (server.hasArg("speed")){ 
    if (server.arg("speed").equals("up")){
      digitalWrite(led_spd, HIGH);
      server.send(200, "text/html", "Speed UP !");
    } else if (server.arg("speed").equals("down")){
      digitalWrite(led_spd, LOW);
      server.send(200, "text/html", "Speed DOWN !");
    }
  }
}

void handleNotFound(void) {               //存在しないアドレスへアクセスしたときの処理関数
  server.send(404, "text/plain", "Not Found");
}