// Every-RF-6-1
// 2020.4.7
// Arduino Nano Every を使用する。
// PWM周波数を15.7kHzにする。
// Takujo-6-3をリフレッシュする。

#define  UNTEN 14
#define  VOL   A2
#define  GEN   A3
#define  SEN1  18
#define  SEN2  19
#define  SEN3  20
#define  F0_1  6
#define  F0_2  5
#define  F1_1  3
#define  P1    8
#define  P2    9
#define  SIG1  11

  int i;
  int sen1;
  int sen2;
  int sen3;
  int vol;
  int gen;
  int unten;

void setup() {
  pinMode(UNTEN,INPUT);
  pinMode(VOL,INPUT);
  pinMode(GEN,INPUT);
  pinMode(SEN1,INPUT);
  pinMode(SEN2,INPUT);
  pinMode(SEN3,INPUT);
  pinMode(F0_1,OUTPUT);
  pinMode(F0_2,OUTPUT);
  pinMode(F1_1,OUTPUT);
  pinMode(P1,OUTPUT);
  pinMode(P2,OUTPUT);
  pinMode(SIG1,OUTPUT);
  
  TCA0.SINGLE.CTRLA = 0b0101; //PWM周波数の変更
  
  analogWrite(F0_1,0);
  analogWrite(F0_2,0);
  analogWrite(F1_1,0);
  digitalWrite(SIG1,HIGH);

  digitalWrite(P1,HIGH);
  delay(8000);
  digitalWrite(P2,HIGH);
  delay(8000);
  digitalWrite(P1,LOW);
  delay(8000);
  digitalWrite(P2,LOW);
  delay(8000);
}

void loop() {
  unten = digitalRead(UNTEN);
  while (unten == LOW) {
    unten = digitalRead(UNTEN);
    analogWrite(F0_1,0);
    analogWrite(F0_2,0);
  }

// ホーム1
  digitalWrite(P1,LOW);
  delay(8000);
  digitalWrite(P2,LOW);
  delay(8000);
  vol=analogRead(VOL)/4;
  delay(100);
  digitalWrite(SIG1,HIGH);
  delay(4000);
  for(i=50;i<255;i++){          //発車
    gen=analogRead(GEN)/5;
    analogWrite(F0_1,vol*i/255);
    analogWrite(F0_2,0);
    delay(gen);
  }
  delay(20000);
  
  sen3 = digitalRead(SEN3);
  while (sen3 == HIGH) {
    vol=analogRead(VOL)/4;
    delay(10);
    analogWrite(F0_1,vol);
    analogWrite(F1_1,vol);
    analogWrite(F0_2,0);
    sen3 = digitalRead(SEN3);
  }

  digitalWrite(P2,HIGH);  //リバース切り替え
  analogWrite(F0_1,0);
  analogWrite(F0_2,vol);

  sen1 = digitalRead(SEN1);
  while (sen1 == HIGH) {     //ホーム到着?
    vol=analogRead(VOL)/4;
    delay(10);
    analogWrite(F0_2,vol);
    sen1 = digitalRead(SEN1);
  }

  digitalWrite(SIG1,LOW);
  vol=analogRead(VOL)/4;
  delay(100);
  for(i=255;i>-1;i--){
      gen=analogRead(GEN)/5;
      analogWrite(F0_2,vol*i/255);
      delay(gen);
  }
  analogWrite(F0_2,0);
  delay(20000);

// ホーム2
  digitalWrite(P1,HIGH);
  delay(8000);
  digitalWrite(P2,LOW);
  delay(8000);
  vol=analogRead(VOL)/4;
  delay(100);
  digitalWrite(SIG1,HIGH);
  delay(4000);
  for(i=50;i<255;i++){          //発車
    gen=analogRead(GEN)/5;
    analogWrite(F0_1,vol*i/255);
    analogWrite(F0_2,0);
    delay(gen);
  }
  delay(20000);
  
  sen3 = digitalRead(SEN3);
  while (sen3 == HIGH) {
    vol=analogRead(VOL)/4;
    delay(10);
    analogWrite(F0_1,vol);
    analogWrite(F1_1,vol);
    analogWrite(F0_2,0);
    sen3 = digitalRead(SEN3);
  }

  digitalWrite(P2,HIGH);  //リバース切り替え
  analogWrite(F0_1,0);
  analogWrite(F0_2,vol);

  sen2 = digitalRead(SEN2);
  while (sen2 == HIGH) {     //ホーム到着?
    vol=analogRead(VOL)/4;
    delay(10);
    analogWrite(F0_2,vol);
    sen2 = digitalRead(SEN2);
  }

  digitalWrite(SIG1,LOW);
  vol=analogRead(VOL)/4;
  delay(100);
  for(i=255;i>-1;i--){
      gen=analogRead(GEN)/5;
      analogWrite(F0_2,vol*i/255);
      delay(gen);
  }
  analogWrite(F0_2,0);
  delay(20000);
}