// Every-9F
// 2020.3.12
// PWM周波数を15.7kHzにする。

#define  ST1   14
#define  ST2   15
#define  UNTEN 16
#define  VOL   A3
#define  GEN   A4
#define  SEN1  19
#define  SEN2  20
#define  F1_1  3
#define  F2_1  5
#define  F0_1  6
#define  SIG1  11
#define  SIG2  12

  int i;
  int sen1;
  int sen2;
  int st1;
  int st2;
  int vol;
  int gen;
  int unten;
  int exist1 = 1 ;
  int exist2 = 1 ;

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

void loop() {
  unten = digitalRead(UNTEN);
  while (unten == LOW) {
    unten = digitalRead(UNTEN);
    analogWrite(F1_1,0);
    analogWrite(F2_1,0);
    analogWrite(F0_1,0);
  }
  
  vol=analogRead(VOL)/4;
  delay(10);
  analogWrite(F0_1,vol);
  
  sen1 = digitalRead(SEN1);
  if (sen1==LOW){
    arrive1();
  }
  sen2 = digitalRead(SEN2);
  if (sen2==LOW){
    arrive2();
  }
  
  st1 = digitalRead(ST1);
  if (st1==LOW && exist1==1 ){
    departure1();
  }
  
  st2 = digitalRead(ST2);
  if (st2==LOW && exist2==1){
    departure2();
  }
}

void arrive1(){
  digitalWrite(SIG1,LOW);
  analogWrite(F1_1,vol);
  delay(1000);
  for(i=255;i>-1;i--){
    gen=analogRead(GEN)/5;
    analogWrite(F1_1,vol*i/255);
    delay(gen);
  }
  delay(4000);
  exist1=1;
  return;
}

void arrive2(){
  digitalWrite(SIG2,LOW);
  analogWrite(F2_1,vol);
  delay(1000);
  for(i=255;i>-1;i--){
    gen=analogRead(GEN)/5;
    analogWrite(F2_1,vol*i/255);
    delay(gen);
  }
  delay(4000);
  exist2=1;
  return;
}

void departure1(){
  digitalWrite(SIG1,HIGH);
  delay(4000);
  for(i=50;i<255;i++){
    analogWrite(F1_1,vol*i/255);
    delay(150);
  }
  exist1=0 ;
  return;
}

void departure2(){
  digitalWrite(SIG2,HIGH);
  delay(4000);
  for(i=50;i<255;i++){
    analogWrite(F2_1,vol*i/255);
    delay(150);
  }
  exist2=0 ;
  return;
}