TJ-8 ホスト側 Sketch

コピーしてArduino IDEに貼り付けて下さい。
スケッチは素人なので完全ではありません。間違いやアドバイスがあればお知らせ下さい。
プログラムの開発にあたり、次の先輩方の記事を参考にさせて頂きました。
http://goji2100.com/blog/?p=534
https://sites.google.com/site/interactiond2015/sample-program1
http://unicore32.hatenablog.jp/entry/20160201/1454332248
http://d.hatena.ne.jp/clayfish/20090405/1238924970
有難うございましたお礼を申し上げます。

//WiFi control of the sketch. by CNC Paradise. (july-2016)
#include "ESP8266WiFi.h"
#include "WiFiUDP.h"
#include "Servo.h"
Servo leftservo;
Servo rightservo;

WiFiUDP UDP;
char recbuff[2];
IPAddress myIP(192, 168, 4, 1);
IPAddress HOSTIP (192, 168, 4, 2);
const char *ssid = "TJ-8"; // ID is the same configuration as the controller side.
const char *password = "*********"; // password is the same configuration as the controller and the side.

int IRsensor_L;
int IRsensor_R;
int IRsensor_FL;
int IRsensor_FR;
int ModeSW;
int Val_x, Val_y, Val_z, Val_c ;
int x, y, z, c;
const int turntime = 400; // 自動運転時旋回時間の設定

void setup() {
  WiFi.softAP(ssid, password); // setting SSID and Password
  WiFi.config(myIP, WiFi.gatewayIP(), WiFi.subnetMask()); // setting IP Address
  UDP.begin(8000); // setting UDP port,port number is the same setting as the controller and the side.
  Serial.begin(115200);

  pinMode(12, INPUT); // L_IRsensor
  pinMode(13, INPUT); // FL_IRsensor
  pinMode(14, INPUT); // FR_IRsensor
  pinMode(16, INPUT); // R_IRsensor
  pinMode(2, OUTPUT); // WiFi Status LED
  pinMode(15,OUTPUT); // IRsensor-Power_Control
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);
  digitalWrite(14, HIGH);
  digitalWrite(16, HIGH);
  digitalWrite(15,  LOW);
  ModeSW = 1;
}

 // 以下のサーボPWM値設定は機体により要調整(スピードやモーターの負担を考慮)
void Forwards() { // 前進時のサーボPWM値設定(固定)
  leftservo.write(30);
  rightservo.write(150);
}

void backwards() { // 後進時のサーボPWM値設定(固定)
  leftservo.write(150);
  rightservo.write(30);
}

void turnleft(int t) { // 左旋回時のサーボPWM値設定(固定)
  leftservo.write(150);
  rightservo.write(150);
  delay(t);
}

void turnright(int t) { // 右旋回時のサーボPWM値設定(固定)
  leftservo.write(30);
  rightservo.write(30);
  delay(t);
}

void stopmove() { // 停止時のサーボPWM値設定(固定)
  leftservo.write(90);
  rightservo.write(90);
}

void Automatic_Control() { // IRセンサーによる自動運転の処理
  IRsensor_L  = digitalRead(12);
  IRsensor_R  = digitalRead(13);
  IRsensor_FL = digitalRead(16);
  IRsensor_FR = digitalRead(14);
  stopmove();
  Forwards();
  if (IRsensor_L == 0 ) {
    turnright(turntime);
    Forwards();
  }
  if (IRsensor_R == 0 ) {
    turnleft(turntime);
    Forwards();
  }
  if (IRsensor_FL == 0 ) {
    stopmove();
    delay(50);
    backwards();
    delay(200);
    turnleft(turntime);
    Forwards();
  }
  if (IRsensor_FR == 0 ) {
    stopmove();
    delay(50);
    backwards();
    delay(200);
    turnleft(turntime);
    Forwards();
  }
}

void Manual_Control() { // 手動運転の処理 0~255の受信入力値をPWM値に設定
    if (x <= 100) { // turnleft 左旋回
      leftservo.write(150);
      rightservo.write(150);
    }
    if (x >= 155) { // turnleft 右旋回
      leftservo.write(30);
      rightservo.write(30);
    }
    if (y >= 155) { // 前進
      Forwards();
    }
    if (y <= 100) { // 後退
      backwards();
    }
    if (y >= 101 & y <= 154 & x >= 101 & x <= 154) { // 停止範囲の設定
      stopmove();
    }  
}
  
void loop() {
  if (UDP.parsePacket() > 0) { // UDPパケットの受信処理
    UDP.read(recbuff, 2);
    UDP.flush();
  }
  switch (recbuff[0]) {
    case 'X':
      x = recbuff[1];
      break;
    case 'Y':
      y = recbuff[1];
      break;
    case 'Z':
      z = recbuff[1];
      if (z == 0) {
        ModeSW = 0;
      }
      break;
    case 'C':
      c = recbuff[1];
      if (c == 0) {
        ModeSW = 1;
      }
      break;
  }

  if (ModeSW == 0) { // Automatic_Mode 自動モード
    Automatic_Control();
    digitalWrite(15, HIGH ); // IRsensor-Power_ON
  }
  if (ModeSW == 1) { // Manual_Mode 手動操作モード
    Manual_Control();
    digitalWrite(15, LOW ); // IRsensor-Power_OFF
  }

  if (WiFi.status() != WL_CONNECTED) {
    digitalWrite(2, LOW); // WiFi Status LED_OFF
    stopmove();
    leftservo.detach();
    rightservo.detach();
  } else {
    digitalWrite(2, HIGH ); // WiFi Status LED_ON
  leftservo.attach(4);
  rightservo.attach(5);    
  }
}




inserted by FC2 system