// Every-2
// 2020.2.8

#define  SEN1  5
#define  SEN2  4
#define  SEN3  3
#define  SEN4  2
#define  FED  7
#define  PWM  6
#define  P1  11
#define  P2  9
#define  P3  8
#define  P4  10
#define  SIG1  15
#define  SIG2  14
#define  UNTEN  12

void setup() {
  pinMode(SEN1,INPUT);
  pinMode(SEN2,INPUT);
  pinMode(SEN3,INPUT);
  pinMode(SEN4,INPUT);
  pinMode(FED,OUTPUT);
  pinMode(PWM,OUTPUT);
  pinMode(P1,OUTPUT);
  pinMode(P2,OUTPUT);
  pinMode(P3,OUTPUT);
  pinMode(P4,OUTPUT);
  pinMode(SIG1,OUTPUT);
  pinMode(SIG2,OUTPUT);

  digitalWrite(SIG1,LOW);
  digitalWrite(SIG2,LOW);
  digitalWrite(FED,LOW);
  analogWrite(PWM,0);
  
  digitalWrite(P1,HIGH);
  delay(500);
  digitalWrite(P2,HIGH);
  delay(500);
  digitalWrite(P3,HIGH);
  delay(500);
  digitalWrite(P4,HIGH);
  delay(500);
  digitalWrite(P1,LOW);
  delay(500);
  digitalWrite(P2,LOW);
  delay(500);
  digitalWrite(P3,LOW);
  delay(500);
  digitalWrite(P4,LOW);
  delay(500);
}

void loop() {
  int i;
  int sen1;
  int sen2;
  int sen3;
  int sen4;
  int unten;

  unten = digitalRead(UNTEN);
  while (unten == LOW) {
           unten = digitalRead(UNTEN);
      }
      
  digitalWrite(SIG1,HIGH);  //出発進行
  digitalWrite(SIG2,HIGH);
  delay(1000);
  digitalWrite(FED,HIGH);
  for(i=0;i<256;i++){
      analogWrite(PWM, i);
      delay(5);
  }

  sen3 = digitalRead(SEN3);
  while (sen3 == HIGH) {
           sen3 = digitalRead(SEN3);
      }

  sen1 = digitalRead(SEN1);     //駅を通過させる
  while (sen1 == HIGH) {
           sen1 = digitalRead(SEN1);
      } 

  sen3 = digitalRead(SEN3);
  while (sen3 == HIGH) {
           sen3 = digitalRead(SEN3);
      }
  
  digitalWrite(SIG1,LOW);       //信号を赤にする
  sen1 = digitalRead(SEN1);     //駅で停車させる
  while (sen1 == HIGH) {
           sen1 = digitalRead(SEN1);
      } 
  for(i=255;i>-1;i--){
      analogWrite(PWM, i);
      delay(5);
  }
  digitalWrite(FED,LOW);
  delay(2000);
  
  digitalWrite(P2,HIGH);    //リバース設定
  delay(500);
  digitalWrite(P3,HIGH);
  delay(500);
  digitalWrite(SIG1,HIGH);  //出発進行
  delay(1000);
  digitalWrite(FED,HIGH);
  for(i=0;i<256;i++){
      analogWrite(PWM, i);
      delay(5);
  }

  sen4 = digitalRead(SEN4);
  while (sen4 == HIGH) {
           sen4 = digitalRead(SEN4);
      }
  digitalWrite(SIG2,LOW);

  sen2 = digitalRead(SEN2);
  while (sen2 == HIGH) {
           sen2 = digitalRead(SEN2);
      }
  for(i=255;i>-1;i--){
      analogWrite(PWM, i);
      delay(5);
  }
  digitalWrite(FED,LOW);

  digitalWrite(P2,LOW);
  delay(500);
  digitalWrite(P3,LOW);
  delay(2000);                //リバース完了
  
  digitalWrite(SIG2,HIGH);  //出発進行
  delay(1000);
  digitalWrite(FED,HIGH);
  for(i=0;i<256;i++){
      analogWrite(PWM, i);
      delay(5);
  }

  sen4 = digitalRead(SEN4);
  while (sen4 == HIGH) {
           sen4 = digitalRead(SEN4);
      }

  sen2 = digitalRead(SEN2);     //駅を通過させる
  while (sen2 == HIGH) {
           sen2 = digitalRead(SEN2);
      } 

  sen4 = digitalRead(SEN4);
  while (sen4 == HIGH) {
           sen4 = digitalRead(SEN4);
      }
  
  digitalWrite(SIG2,LOW);       //信号を赤にする
  sen2 = digitalRead(SEN2);     //駅で停車させる
  while (sen2 == HIGH) {
           sen2 = digitalRead(SEN2);
      } 
  for(i=255;i>-1;i--){
      analogWrite(PWM, i);
      delay(5);
  }
  digitalWrite(FED,LOW);
  delay(2000);
    
  digitalWrite(P4,HIGH);    //リバース設定
  delay(500);
  digitalWrite(P1,HIGH);
  delay(500);
  digitalWrite(SIG2,HIGH);  //出発進行
  delay(1000);
  digitalWrite(FED,HIGH);
  for(i=0;i<256;i++){
      analogWrite(PWM, i);
      delay(5);
  }

  sen3 = digitalRead(SEN3);
  while (sen3 == HIGH) {
           sen3 = digitalRead(SEN3);
      }
  digitalWrite(SIG1,LOW);

  sen1 = digitalRead(SEN1);
  while (sen1 == HIGH) {
           sen1 = digitalRead(SEN1);
      }
  for(i=255;i>-1;i--){
      analogWrite(PWM, i);
      delay(5);
  }
  digitalWrite(FED,LOW);

  digitalWrite(P4,LOW);
  delay(500);
  digitalWrite(P1,LOW);
  delay(2000);                //リバース完了

}