// Every-10-6
// 2020.4.21
// Arduino Nano Every を使用する。
// PWM周波数を15.7kHzにする。
#define UNTEN 14
#define VOL A2
#define GEN A3
#define SEN1 11
#define SEN2 12
#define SEN3 20
#define SEN4 19
#define SEN5 10
#define F1 6
#define F2 5
#define F3 3
#define P1 8
#define P2 9
int i;
int sen1;
int sen2;
int sen3;
int sen4;
int sen5;
int vol;
int gen;
int unten;
int point;
void setup() {
pinMode(UNTEN,INPUT);
pinMode(VOL,INPUT);
pinMode(GEN,INPUT);
pinMode(SEN1,INPUT);
pinMode(SEN2,INPUT);
pinMode(SEN3,INPUT);
pinMode(SEN4,INPUT);
pinMode(SEN5,INPUT);
pinMode(F1,OUTPUT);
pinMode(F2,OUTPUT);
pinMode(F3,OUTPUT);
pinMode(P1,OUTPUT);
pinMode(P2,OUTPUT);
TCA0.SINGLE.CTRLA = 0b0101; //PWM周波数の変更
analogWrite(F1,0);
analogWrite(F2,0);
analogWrite(F3,0);
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(F1,0);
analogWrite(F2,0);
analogWrite(F3,0);
}
//****** 待避モード ************
sen1 = digitalRead(SEN1);
while (sen1 == HIGH) { //列車イが来るまで待て
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F2,vol);
sen1 = digitalRead(SEN1);
}
point= 0; //列車イが来たので判断する
sen2 = digitalRead(SEN2); //後方に列車がいるか?
if (sen2 == LOW) { //列車ロがいるのでイは待避モードに入る
digitalWrite(P1,HIGH); //P1を反位に
delay(8000);
sen3 = digitalRead(SEN3);
while (sen3 == HIGH) { //待避線センサまでイは走行せよ
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F3,vol);
sen3 = digitalRead(SEN3);
sen1 = digitalRead(SEN1);
if (sen1 == HIGH){ //イの最後尾は通過したか?
delay(1000);
sen1 = digitalRead(SEN1); //ダブルカウント
if (sen1 == HIGH){
point= 1; //フラグを立てる
}
}
sen1 = digitalRead(SEN1); //もう一度チェック
if (sen1 == LOW && point==1){ //次の列車ロが来た
digitalWrite(P1,LOW); //P1を定位に
}
}
point= 0; //イが待避線センサまで来たのでフラグを消す
digitalWrite(P1,LOW); //P1を定位に
delay(8000);
for(i=255;i>-1;i--){ //イは待避線停車
gen=analogRead(GEN)/5;
analogWrite(F3,vol*i/255);
delay(gen);
}
analogWrite(F3,0);
//****** 待避線出発 ************
sen4 = digitalRead(SEN4);
if (sen4 == LOW){ //先行の列車はまだいるか
while (sen4 == LOW){ //列車が通り過ぎるまで待て
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F2,vol);
sen4 = digitalRead(SEN4);
}
}
delay(10000);
sen4 = digitalRead(SEN4); //改めてセンサをチェック
while (sen4 == HIGH) { //追越した列車ロは来たか?
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F2,vol);
sen4 = digitalRead(SEN4);
}
delay(10000);
sen5 = digitalRead(SEN5); //本線のセンサをチェック
if (sen5 == LOW){ //本線に後続の列車ハがいるか
while (sen5 == LOW){ //列車ハが通り過ぎるまで待て
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F2,vol);
sen5 = digitalRead(SEN5);
}
delay(20000);
sen4 = digitalRead(SEN4);
while (sen4 == HIGH) { //改めて列車ハは来たか?
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F2,vol);
sen4 = digitalRead(SEN4);
}
}
digitalWrite(P2,HIGH); //P2を反位に
delay(8000);
for(i=50;i<255;i++){ //副本線の電車イを発車
gen=analogRead(GEN)/5;
analogWrite(F3,vol*i/255);
delay(gen);
}
sen4 = digitalRead(SEN4);
while (sen4 == LOW) { //列車ロまたはハは通過したか?
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F2,vol);
sen4 = digitalRead(SEN4);
}
sen4 = digitalRead(SEN4);
while (sen4 == HIGH) { //列車イは来たか?
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F2,vol);
sen4 = digitalRead(SEN4);
}
digitalWrite(P2,LOW); //P2を定位に
delay(8000);
} else { //列車イは本線を通過せよ
while (sen1 == LOW) { //列車イがセンサ1を通過するまで待て
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F1,vol);
analogWrite(F2,vol);
sen1 = digitalRead(SEN1);
}
delay(10000);
}
}