// Local-sen-47
// 2023.4.2
// Arduino MEGA 2560 を使用する。
// PWM周波数を31kHzにする。

#define  AUT   55
#define  SRT   65
#define  VOL   A2
#define  GEN   A3
#define  CH1   58
#define  CH2   59
#define  CH3   60
#define  CH4   61
#define  CH5   62
#define  CH6   63
#define  TS1   22
#define  TS4   24
#define  TS2   26
#define  TS5   30
#define  TS6   32
#define  TS8   34
#define  TS3   38
#define  TS9   40
#define  TS7   42
#define  PIN4  46
#define  PIN1  48
#define  PIN2  50
#define  PIN3  52
#define  F1W   49
#define  F2W   51
#define  F3W   53
#define  F1C   41
#define  F2C   43
#define  F3C   45

#define  POUT1 23
#define  POUT2 25
#define  POUT3 27
#define  POUT4 29
#define  F11   12
#define  F12   11
#define  F21   10
#define  F22    9
#define  F31    5
#define  F32    4
#define  F12PWM 8
#define  F3PWM  7

  int vol;
  int gen;
  int duty;
  int i;
  int dnumber;
  int ts1;
  int ts2;
  int ts3;
  int ts4;
  int ts5;
  int ts6;
  int ts7;
  int ts8;
  int ts9;
  int strt;
  char TS;

void setup() {
  pinMode(VOL,INPUT);
  pinMode(GEN,INPUT);  
  pinMode(AUT,INPUT);
  pinMode(SRT,INPUT);
  pinMode(CH1,INPUT);
  pinMode(CH2,INPUT);
  pinMode(CH3,INPUT);
  pinMode(CH4,INPUT);
  pinMode(CH5,INPUT);
  pinMode(CH6,INPUT);
  pinMode(TS1,INPUT);
  pinMode(TS2,INPUT);
  pinMode(TS3,INPUT);
  pinMode(TS4,INPUT);
  pinMode(TS5,INPUT);
  pinMode(TS6,INPUT);
  pinMode(TS7,INPUT);
  pinMode(TS8,INPUT);
  pinMode(TS9,INPUT);
  pinMode(PIN4,INPUT);
  pinMode(PIN1,INPUT);
  pinMode(PIN2,INPUT);
  pinMode(PIN3,INPUT);
  pinMode(F1W,INPUT);
  pinMode(F2W,INPUT);
  pinMode(F3W,INPUT);
  pinMode(F1C,INPUT);
  pinMode(F2C,INPUT);
  pinMode(F3C,INPUT);
  
  pinMode(F11,OUTPUT);
  pinMode(F12,OUTPUT);
  pinMode(F21,OUTPUT);
  pinMode(F22,OUTPUT);
  pinMode(F31,OUTPUT);
  pinMode(F32,OUTPUT);
  pinMode(F12PWM,OUTPUT);
  pinMode(F3PWM,OUTPUT);
  pinMode(POUT1,OUTPUT);
  pinMode(POUT2,OUTPUT);
  pinMode(POUT3,OUTPUT);
  pinMode(POUT4,OUTPUT);

  TCCR4B = (TCCR4B & 0b11111000) | 0x01;   //Timer4を31KHzにする

  digitalWrite(F11,LOW);
  digitalWrite(F12,LOW);
  digitalWrite(F21,LOW);
  digitalWrite(F22,LOW);
  digitalWrite(F31,LOW);
  digitalWrite(F32,LOW);  
  analogWrite(F12PWM,0);
  analogWrite(F3PWM,0);  
  digitalWrite(POUT1,LOW);
  digitalWrite(POUT2,LOW);
  digitalWrite(POUT3,LOW);
  digitalWrite(POUT4,LOW);

  duty = 0;
}

void kasoku(){
    int i;
    for (i=0;i<20;i++){
      duty = analogRead(VOL)/4*i/20;
      analogWrite(F12PWM,duty);
      analogWrite(F3PWM,duty);
      delay(200);
    }
    return;
}

void gensoku(){
    int i;
    vol = analogRead(VOL)/4;
    gen = analogRead(GEN)/4;
    for (i=0;i<20;i++){
      duty =vol - (vol-gen)*i/20;
      analogWrite(F12PWM,duty);
      analogWrite(F3PWM,duty);
      delay(50);
    }
    return;
}

void kyuden_zero(){
    digitalWrite(F11,LOW);
    digitalWrite(F12,LOW);
    digitalWrite(F21,LOW);
    digitalWrite(F22,LOW);
    digitalWrite(F31,LOW);
    digitalWrite(F32,LOW);
    return;
}

void point_teii(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    return;
}

void senser_check(char TS){
   while(digitalRead(TS)==LOW){
      duty = analogRead(VOL)/4;
      analogWrite(F12PWM,duty);
      analogWrite(F3PWM,duty);
      delay(50);
    }
    return;
}

void senser_check_g(char TS){
    while(digitalRead(TS)==LOW){
      duty = analogRead(GEN)/4;
      analogWrite(F12PWM,duty);
      analogWrite(F3PWM,duty);
      delay(50);
    }
    return;
}

void tuka_check(char TS){
    while(digitalRead(TS)==HIGH){
      duty = analogRead(GEN)/4;
      analogWrite(F12PWM,duty);
      analogWrite(F3PWM,duty);
      delay(50);
    }
    return;
}

void mode1(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS2);
    gensoku();
    senser_check_g(TS1);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode2(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS2);
    gensoku();
    senser_check_g(TS1);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode3(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS1);
    gensoku();
    senser_check_g(TS2);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode4(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS1);
    gensoku();
    senser_check_g(TS2);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode5(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS6);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    senser_check(TS3);   
    gensoku();
    senser_check_g(TS4);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode6(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS6);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    senser_check(TS4);   
    gensoku();
    senser_check_g(TS3);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode7(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS6);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    senser_check(TS4);   
    gensoku();
    senser_check_g(TS3);
    kyuden_zero();
    point_teii();
    delay(2000);

    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(F12,HIGH);
    digitalWrite(F22,HIGH);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS6);
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(F12,LOW);
    digitalWrite(F11,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    senser_check(TS2);   
    gensoku();
    senser_check_g(TS1);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode13(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS6);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    senser_check(TS4);   
    gensoku();
    senser_check_g(TS3);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode14(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS7);
    digitalWrite(POUT1,HIGH); delay(100);
    senser_check(TS3);   
    gensoku();
    senser_check_g(TS4);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode15(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS5);
    digitalWrite(POUT1,LOW); delay(100);
    senser_check(TS1);   
    gensoku();
    senser_check_g(TS2);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode16(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS6);
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(F12,LOW);
    digitalWrite(F11,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    senser_check(TS2);   
    gensoku();
    senser_check_g(TS1);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode17(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS6);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(F12,LOW);
    digitalWrite(F11,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    senser_check(TS2);   
    gensoku();
    senser_check_g(TS1);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode18(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS6);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    senser_check(TS4);   
    gensoku();
    senser_check_g(TS3);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode19(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,HIGH); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS8);
    gensoku();
    senser_check_g(TS9);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode21(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,HIGH); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS1);
    gensoku();
    senser_check_g(TS2);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode22(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,LOW);
    digitalWrite(F31,LOW);
    digitalWrite(F32,LOW);
    senser_check_g(TS7);
    kyuden_zero();
    delay(2000);
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    senser_check_g(TS4);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode20(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS8);
    gensoku();
    tuka_check(TS8);
    kyuden_zero();
    delay(2000);
    digitalWrite(POUT4,HIGH); delay(100);
    digitalWrite(F12,LOW);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    senser_check_g(TS9);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode23(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,HIGH); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,LOW);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS5);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    senser_check(TS2);
    gensoku();
    senser_check_g(TS1);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode24(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,HIGH); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,LOW);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS5);
    gensoku();
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode12(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS4);
    gensoku();
    senser_check_g(TS3);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode11(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,LOW);
    digitalWrite(F22,LOW);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS5);
    gensoku();
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode10(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS2);
    gensoku();
    senser_check_g(TS1);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode25(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS8);
    digitalWrite(F12,LOW);
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(F32,LOW);
    digitalWrite(F31,HIGH);
    senser_check(TS6);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    analogWrite(F12PWM,0);
    digitalWrite(F11,HIGH);
    for (i=0;i<20;i++){
      duty = analogRead(VOL)/4*i/20;
      analogWrite(F12PWM,duty);
      delay(200);
    }
    senser_check(TS2);
    vol = analogRead(VOL)/4;
    gen = analogRead(GEN)/4;
    for (i=0;i<20;i++){
      duty =vol - (vol-gen)*i/20;
      analogWrite(F12PWM,duty);
      delay(50);
    }
    while(digitalRead(TS1)==LOW){
      duty = analogRead(GEN)/4;
      analogWrite(F12PWM,duty);
      delay(50);
    }
    digitalWrite(POUT1,HIGH); delay(100);
    senser_check(TS3);
    gensoku();
    digitalWrite(F22,HIGH);
    digitalWrite(F21,LOW);
    senser_check_g(TS4);
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode26(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS6);
    analogWrite(F12PWM,0);     //1番線発車
    digitalWrite(POUT1,LOW); delay(100);
    for (i=0;i<20;i++){
      duty = analogRead(VOL)/4*i/20;
      analogWrite(F12PWM,duty);
      delay(200);
    }
    
    senser_check(TS1);    //1番線入場、減速
    vol = analogRead(VOL)/4;
    gen = analogRead(GEN)/4;
    for (i=0;i<20;i++){
      duty =vol - (vol-gen)*i/20;
      analogWrite(F12PWM,duty);
      delay(50);
    }
    while(digitalRead(TS2)==LOW){   //停車
      duty = analogRead(GEN)/4;
      analogWrite(F12PWM,duty);
      delay(50);
    }
   
    digitalWrite(POUT1,HIGH); delay(100);   //ポイント切り替え
    senser_check(TS5);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    
    senser_check(TS4);    //2番線入場、減速
    gensoku();
    senser_check_g(TS3);   //停車
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode27(){
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS5);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);

    senser_check(TS6);
    analogWrite(F12PWM,0);      //1番線発車
    digitalWrite(POUT1,LOW); delay(100);
    for (i=0;i<20;i++){
      duty = analogRead(VOL)/4*i/20;
      analogWrite(F12PWM,duty);
      delay(200);
    }
    
    senser_check(TS2);    //1番線入場、減速
    gensoku();
    senser_check_g(TS1);   //停車
    digitalWrite(POUT1,HIGH); delay(100);   //ポイント切り替え
    senser_check(TS7);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
//    digitalWrite(F31,LOW);
    
    senser_check(TS3);    //2番線入場、減速
    gensoku();
    senser_check_g(TS4);   //停車
    kyuden_zero();
    point_teii();
    delay(2000);
    return;
}

void mode40(){
    mode24();
    mode20();
  
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F31,LOW);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS8);
    analogWrite(F3PWM,0);
    digitalWrite(F32,HIGH);    //3番ホーム発車
    for (i=0;i<20;i++){
      duty = analogRead(VOL)/4*i/20;
      analogWrite(F3PWM,duty);
      delay(200);
    }
    senser_check(TS1);    //1番線入場、減速
    vol = analogRead(VOL)/4;
    gen = analogRead(GEN)/4;
    for (i=0;i<20;i++){
      duty =vol - (vol-gen)*i/20;
      analogWrite(F12PWM,duty);
      delay(50);
    }
    while(digitalRead(TS2)==LOW){
      analogWrite(F12PWM,gen);
      delay(50);
    }
    digitalWrite(F12,LOW);   //1番ホーム停車
    
    senser_check(TS5);    //3番線入場、減速
    vol = analogRead(VOL)/4;
    gen = analogRead(GEN)/4;
    for (i=0;i<20;i++){
      duty =vol - (vol-gen)*i/20;
      analogWrite(F3PWM,duty);
      delay(50);
    }
    digitalWrite(F32,LOW);
    delay(2000);
    
    mode12();
    return;
}

void mode41(){
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F11,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F22,LOW);
    digitalWrite(F31,LOW);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS5);   //通過確認
    senser_check(TS2);
    gensoku();
    senser_check_g(TS1);
    digitalWrite(F11,LOW);
    delay(2000);   

    mode24();
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(F11,LOW);
    digitalWrite(F12,HIGH);
    digitalWrite(F22,HIGH);
    digitalWrite(F32,LOW);
    kasoku();
    senser_check(TS8);
    gensoku();
    tuka_check(TS8);
    kyuden_zero();
    delay(1500);
    digitalWrite(POUT4,HIGH); delay(100);
    digitalWrite(F12,LOW);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    senser_check_g(TS9);
    digitalWrite(F21,LOW);
    delay(2000);
    
    digitalWrite(POUT1,HIGH); delay(100);
    digitalWrite(POUT2,LOW); delay(100);
    digitalWrite(POUT3,HIGH); delay(100);
    digitalWrite(POUT4,LOW); delay(100);
    digitalWrite(F12,HIGH);
    digitalWrite(F21,HIGH);
    digitalWrite(F32,HIGH);
    kasoku();
    senser_check(TS4);
    gensoku();
    senser_check_g(TS3);
    digitalWrite(POUT1,LOW); delay(100);
    digitalWrite(POUT2,HIGH); delay(100);
    digitalWrite(F21,LOW);
    digitalWrite(F22,HIGH);
    digitalWrite(F32,LOW);
    digitalWrite(F31,HIGH);

    senser_check(TS5);    //3番線通過確認
    digitalWrite(POUT3,LOW); delay(100);
    digitalWrite(F22,LOW);
    digitalWrite(F21,HIGH);
    digitalWrite(F12,LOW);
    digitalWrite(F11,HIGH);
    senser_check(TS2);
    gensoku();
    senser_check_g(TS1);
    kyuden_zero();
    point_teii();
    return;
}

void loop(){
  if (digitalRead(AUT)==LOW){     //手動運転モード
      vol = analogRead(VOL);
      if (digitalRead(PIN1)==HIGH){                //ポイント1 操作
        digitalWrite(POUT1,HIGH);
        delay(100);
      } else {
        digitalWrite(POUT1,LOW);
        delay(100);
      }
      if (digitalRead(PIN2)==HIGH){                //ポイント2 操作
        digitalWrite(POUT2,HIGH);
        delay(100);
      } else {
        digitalWrite(POUT2,LOW);
        delay(100);
      }
      if (digitalRead(PIN3)==HIGH){                //ポイント3 操作
        digitalWrite(POUT3,HIGH);
        delay(100);
      } else {
        digitalWrite(POUT3,LOW);
        delay(100);
      }
      if (digitalRead(PIN4)==HIGH){                //ポイント4 操作
        digitalWrite(POUT4,HIGH);
        delay(100);
      } else {
        digitalWrite(POUT4,LOW);
        delay(100);
      }

      if (digitalRead(F1W)==HIGH){           //F1 進行方向設定
        digitalWrite(F11,HIGH);
      }  else {
        digitalWrite(F11,LOW);
      }
      if (digitalRead(F1C)==HIGH){
        digitalWrite(F12,HIGH);
      } else {
        digitalWrite(F12,LOW);
      }
      if (digitalRead(F2W)==HIGH){           //F2 進行方向設定
        digitalWrite(F21,HIGH);
      }  else {
        digitalWrite(F21,LOW);
      }
      if (digitalRead(F2C)==HIGH){
        digitalWrite(F22,HIGH);
      } else {
        digitalWrite(F22,LOW);
      }
      if (digitalRead(F3W)==HIGH){           //F3 進行方向設定
        digitalWrite(F31,HIGH);
      }  else {
        digitalWrite(F31,LOW);
      }
      if (digitalRead(F3C)==HIGH){
        digitalWrite(F32,HIGH);
      } else {
        digitalWrite(F32,LOW);
      }
      
      duty=vol/4;
      analogWrite(F12PWM,duty);
      analogWrite(F3PWM,duty);
      
  } else if (digitalRead(AUT)==HIGH && digitalRead(SRT)==HIGH){   //自動運転モード
      analogWrite(F12PWM, 0);  //暴走防止
      analogWrite(F3PWM, 0); 
      
      dnumber = 1;            //ダイヤルの数字をデコード
      if (digitalRead(CH1)==LOW){dnumber=dnumber+1;}
      if (digitalRead(CH2)==LOW){dnumber=dnumber+2;}
      if (digitalRead(CH3)==LOW){dnumber=dnumber+4;}
      if (digitalRead(CH4)==LOW){dnumber=dnumber+8;}
      if (digitalRead(CH5)==HIGH){dnumber=dnumber+12;}
      if (digitalRead(CH6)==HIGH){dnumber=dnumber+24;}
      
      switch(dnumber){        //モード選択
        case 1: mode1(); break;
        case 2: mode2(); break;
        case 3: mode3(); break;
        case 4: mode4(); break;
        case 5: mode5(); break;
        case 6: mode6(); break;
        case 7: mode7(); break;
        case 10: mode10(); break;
        case 11: mode11(); break;
        case 12: mode12(); break;        
        case 13: mode13(); break;
        case 14: mode14(); break;
        case 15: mode15(); break;
        case 16: mode16(); break;
        case 17: mode17(); break;
        case 18: mode18(); break;
        case 19: mode19(); break;
        case 20: mode20(); break;
        case 21: mode21(); break;
        case 22: mode22(); break;
        case 23: mode23(); break;
        case 24: mode24(); break;        
        case 25: mode25(); break;
        case 26: mode26(); break;
        case 27: mode27(); break;
        case 37: mode5(); mode1();break;
        case 38: mode6(); mode3();break;
        case 39: mode20(); mode13(); mode23();break;
        case 40: mode40(); break;
        case 41: mode41(); break;
        case 42: mode11();mode12(); mode20();mode24();mode10();break;
      }
  }
  delay(10);
}