// 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);
}