// Tozan-Auto-14 2018/4/3 // #define Vr1_pin 0 #define Vr2_pin 1 #define Vr3_pin 2 #define UNTEN_PIN 18 #define T1_PIN 19 #define T2_PIN 17 #define T3_PIN 2 #define T4_PIN 3 #define E1_PIN 4 #define E2_PIN 5 #define E3_PIN 7 #define E4_PIN 6 #define E5_PIN 8 #define Fr_PIN 9 #define Fl_PIN 10 #define P3_PIN 11 #define P2_PIN 12 #define P1_PIN 13 int t1; int t2; int t3; int t4; int e1; int e2; int e3; int e4; int e5; int duty; int i; void setup() { pinMode(Vr1_pin, INPUT); pinMode(Vr2_pin, INPUT); pinMode(Vr3_pin, INPUT); pinMode(UNTEN_PIN, INPUT); pinMode(T1_PIN, INPUT); pinMode(T2_PIN, INPUT); pinMode(T3_PIN, INPUT); pinMode(T4_PIN, INPUT); pinMode(E1_PIN, INPUT); pinMode(E2_PIN, INPUT); pinMode(E3_PIN, INPUT); pinMode(E4_PIN, INPUT); pinMode(E5_PIN, INPUT); pinMode(Fr_PIN, OUTPUT); pinMode(Fl_PIN, OUTPUT); pinMode(P3_PIN, OUTPUT); pinMode(P2_PIN, OUTPUT); pinMode(P1_PIN, OUTPUT); } void direction1(int densha) { if (analogRead(densha) < 400 ) { //電車の設定の有無チェック return; //無の場合はこの運行をパスする } digitalWrite(P1_PIN, LOW); //経路を設定する delay(500); digitalWrite(P2_PIN, LOW); delay(500); digitalWrite(P3_PIN, LOW); delay(500); analogWrite(Fl_PIN, 0); //フィーダー出力0 for (i=0;i<17;i++ ) { //走行加速開始 duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) *(0.1 + 0.025*i ); analogWrite(Fr_PIN, duty); //フィーダー出力 delay(200); } t2 = digitalRead(T2_PIN); //到着点通過チェック while (t2 == LOW ) { //到着点通過待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.5; //通常速度 analogWrite(Fr_PIN, duty); //フィーダー出力 t2 = digitalRead(T2_PIN); //到着点通過チェック delay(50); } e2 = digitalRead(E2_PIN); //到着チェック while (e2 == LOW ) { //到着待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.2; //低速走行 analogWrite(Fr_PIN, duty); //フィーダー出力 e2 = digitalRead(E2_PIN); //到着点通過チェック delay(50); } delay(500); analogWrite(Fr_PIN, 0); delay(1000); return; } void direction2(int densha) { if (analogRead(densha) < 400 ) { //電車の設定の有無チェック return; //無の場合はこの運行をパスする } digitalWrite(P1_PIN, LOW); //経路を設定する delay(500); digitalWrite(P2_PIN, LOW); delay(500); digitalWrite(P3_PIN, HIGH); delay(500); analogWrite(Fr_PIN, 0); //フィーダー出力0 for ( i=0; i<9; i++ ) { //走行加速開始 duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) *(0.1 + 0.025*i ); analogWrite(Fl_PIN, duty); //フィーダー出力 delay(200); } t1 = digitalRead(T1_PIN); //到着点通過チェック while (t1 == LOW ) { //到着点通過待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.3; //通常速度 analogWrite(Fl_PIN, duty); //フィーダー出力 t1 = digitalRead(T1_PIN); //到着点通過チェック delay(50); } e1 = digitalRead(E1_PIN); //到着チェック while (e1 == LOW ) { //到着待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.25; //低速走行 analogWrite(Fl_PIN, duty); //フィーダー出力 e1 = digitalRead(E1_PIN); //到着点通過チェック delay(50); } delay(500); analogWrite(Fl_PIN, 0); delay(1000); return; } void direction3(int densha) { if (analogRead(densha) < 400 ) { //電車の設定の有無チェック return; //無の場合はこの運行をパスする } digitalWrite(P1_PIN, HIGH); //経路を設定する delay(500); digitalWrite(P2_PIN, LOW); delay(500); digitalWrite(P3_PIN, LOW); delay(500); analogWrite(Fr_PIN, 0); //フィーダー出力0 for ( i=0; i<9; i++ ) { //走行加速開始 duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) *(0.1 + 0.025*i ); analogWrite(Fl_PIN, duty); //フィーダー出力 delay(200); } t3 = digitalRead(T3_PIN); //到着点通過チェック while (t3 == LOW ) { //到着点通過待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.3; //通常速度 analogWrite(Fl_PIN, duty); //フィーダー出力 t3 = digitalRead(T3_PIN); //到着点通過チェック delay(50); } e3 = digitalRead(E3_PIN); //到着チェック while (e3 == LOW ) { //到着待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.25; //低速走行 analogWrite(Fl_PIN, duty); //フィーダー出力 e3 = digitalRead(E3_PIN); //到着点通過チェック delay(50); } delay(500); analogWrite(Fl_PIN, 0); delay(1000); return; } void direction4(int densha) { if (analogRead(densha) < 400 ) { //電車の設定の有無チェック return; //無の場合はこの運行をパスする } digitalWrite(P1_PIN, HIGH); //経路を設定する delay(500); digitalWrite(P2_PIN, LOW); delay(500); digitalWrite(P3_PIN, HIGH); delay(500); analogWrite(Fl_PIN, 0); //フィーダー出力0 for ( i=0; i<9; i++ ) { //走行加速開始 duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) *(0.1 + 0.025*i ); analogWrite(Fr_PIN, duty); //フィーダー出力 delay(200); } t2 = digitalRead(T2_PIN); //到着点通過チェック while (t2 == LOW ) { //到着点通過待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.3; //通常速度 analogWrite(Fr_PIN, duty); //フィーダー出力 t2 = digitalRead(T2_PIN); //到着点通過チェック delay(50); } e2 = digitalRead(E2_PIN); //到着チェック while (e2 == LOW ) { //到着待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.25; //低速走行 analogWrite(Fr_PIN, duty); //フィーダー出力 e2 = digitalRead(E2_PIN); //到着点通過チェック delay(50); } delay(500); analogWrite(Fr_PIN, 0); delay(1000); return; } void direction5(int densha) { if (analogRead(densha) < 400 ) { //電車の設定の有無チェック return; //無の場合はこの運行をパスする } digitalWrite(P1_PIN, LOW); delay(500); digitalWrite(P2_PIN, HIGH); delay(500); digitalWrite(P3_PIN, HIGH); delay(700); digitalWrite(P3_PIN, LOW); delay(500); analogWrite(Fl_PIN, 0); //フィーダー出力0 for ( i=0; i<17; i++ ) { //走行加速開始 duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) *(0.1 + 0.025*i ); analogWrite(Fr_PIN, duty); //フィーダー出力 delay(200); } t4 = digitalRead(T4_PIN); //到着点通過チェック while (t4 == LOW ) { //到着点通過待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.5; //通常速度 analogWrite(Fr_PIN, duty); //フィーダー出力 t4 = digitalRead(T4_PIN); //到着点通過チェック delay(50); } e5 = digitalRead(E5_PIN); //到着チェック while (e5 == LOW ) { //到着待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.25; //低速走行 analogWrite(Fr_PIN, duty); //フィーダー出力 e5 = digitalRead(E5_PIN); //到着点通過チェック delay(50); } delay(500); analogWrite(Fr_PIN, 0); delay(1000); return; } void direction6(int densha) { if (analogRead(densha) < 400 ) { //電車の設定の有無チェック return; //無の場合はこの運行をパスする } digitalWrite(P1_PIN, LOW); delay(500); digitalWrite(P2_PIN, HIGH); delay(500); digitalWrite(P3_PIN, HIGH); delay(500); analogWrite(Fr_PIN, 0); //フィーダー出力0 for ( i=0; i<9; i++ ) { //走行加速開始 duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) *(0.1 + 0.025*i ); analogWrite(Fl_PIN, duty); //フィーダー出力 delay(200); } t3 = digitalRead(T3_PIN); //到着点通過チェック while (t3 == LOW ) { //到着点通過待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.3; //通常速度 analogWrite(Fl_PIN, duty); //フィーダー出力 t3 = digitalRead(T3_PIN); //到着点通過チェック delay(50); } e4 = digitalRead(E4_PIN); //到着チェック while (e4 == LOW ) { //到着待ち duty = analogRead(densha); //VRの値を読込む duty = (duty - 500) * 0.25; //低速走行 analogWrite(Fl_PIN, duty); //フィーダー出力 e4 = digitalRead(E4_PIN); //到着点通過チェック delay(50); } delay(500); analogWrite(Fl_PIN, 0); return; } void loop() { while (digitalRead(UNTEN_PIN) == LOW){ //運行ボタンを待つ delay(200); } digitalWrite(P1_PIN, HIGH); //経路を設定する delay(500); digitalWrite(P2_PIN, HIGH); delay(500); digitalWrite(P3_PIN, HIGH); delay(500); digitalWrite(P1_PIN, LOW); //経路を設定する delay(500); digitalWrite(P2_PIN, LOW); delay(500); digitalWrite(P3_PIN, LOW); delay(500); direction5(1); //運行ダイヤ第1クール delay(1000); direction1(0); delay(1000); direction3(0); delay(1000); direction4(2); delay(1000); direction2(2); delay(1000); direction6(1); delay(1000); direction5(0); //運行ダイヤ第2クール delay(1000); direction1(2); delay(1000); direction3(2); delay(1000); direction4(1); delay(1000); direction2(1); delay(1000); direction6(0); delay(2000); direction5(2); //運行ダイヤ第3クール delay(1000); direction1(1); delay(1000); direction3(1); delay(1000); direction4(0); delay(1000); direction2(0); delay(1000); direction6(2); delay(1000); }