// Every-11-4
// 2020.11.14
// Arduino Nano Every を使用する。
// PWM周波数を15.7kHzにする。
#define UNTEN 11
#define VOL A0
#define SIN 13
#define SEN1 12
#define SEN2 15
#define SEN3 21
#define SEN4 17
#define SEN5 16
#define SEN6 20
#define SEN7 19
#define SEN8 18
#define F11 9
#define F12 6
#define F21 5
#define F22 3
#define P1 7
#define P2 4
#define P3 2
#define P4 8
#define P6 10
int i;
int sen1;
int sen2;
int sen3;
int sen4;
int sen5;
int sen6;
int sen7;
int sen8;
int vol;
int unten;
void setup() {
pinMode(UNTEN,INPUT);
pinMode(VOL,INPUT);
pinMode(SEN1,INPUT);
pinMode(SEN2,INPUT);
pinMode(SEN3,INPUT);
pinMode(SEN4,INPUT);
pinMode(SEN5,INPUT);
pinMode(SEN6,INPUT);
pinMode(SEN7,INPUT);
pinMode(SEN8,INPUT);
pinMode(F11,OUTPUT);
pinMode(F12,OUTPUT);
pinMode(F21,OUTPUT);
pinMode(F22,OUTPUT);
pinMode(SIN,OUTPUT);
pinMode(P1,OUTPUT);
pinMode(P2,OUTPUT);
pinMode(P3,OUTPUT);
pinMode(P4,OUTPUT);
pinMode(P6,OUTPUT);
TCA0.SINGLE.CTRLA = 0b0101; //PWM周波数の変更
analogWrite(F11,0);
analogWrite(F12,0);
analogWrite(F21,0);
analogWrite(F22,0);
digitalWrite(P1,HIGH);
delay(8000);
digitalWrite(P2,HIGH);
delay(8000);
digitalWrite(P3,HIGH);
delay(8000);
digitalWrite(P4,HIGH);
delay(8000);
digitalWrite(P6,HIGH);
delay(8000);
digitalWrite(P1,LOW);
delay(8000);
digitalWrite(P2,LOW);
delay(8000);
digitalWrite(P3,LOW);
delay(8000);
digitalWrite(P4,LOW);
delay(8000);
digitalWrite(P6,LOW);
delay(8000);
}
void loop() {
unten = digitalRead(UNTEN);
while (unten == LOW) {
unten = digitalRead(UNTEN);
analogWrite(F11,0);
analogWrite(F12,0);
analogWrite(F21,0);
analogWrite(F22,0);
digitalWrite(SIN,HIGH); //信号は赤
}
//****** 周回モード ************
digitalWrite(SIN,LOW); //信号を緑にする
delay(16000);
for(i=50;i<255;i++){ //加速する
vol=analogRead(VOL)/4;
delay(200);
analogWrite(F11,vol*i/255);
}
sen3 = digitalRead(SEN3); //S3を待つ
while (sen3 == HIGH) {
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F11,vol);
sen3 = digitalRead(SEN3);
}
sen4 = digitalRead(SEN4); //S4を待つ
while (sen4 == HIGH) {
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F11,vol);
analogWrite(F21,vol);
sen4 = digitalRead(SEN4);
}
digitalWrite(P1,HIGH); //P1を反位に
delay(8000);
sen5 = digitalRead(SEN5); //S5を待つ
while (sen5 == HIGH) {
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F11,vol);
analogWrite(F21,vol);
sen5 = digitalRead(SEN5);
}
sen4 = digitalRead(SEN4); //S4を待つ
while (sen4 == HIGH) {
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F11,vol);
analogWrite(F21,vol);
sen4 = digitalRead(SEN4);
}
sen5 = digitalRead(SEN5); //S5を待つ
while (sen5 == HIGH) {
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F11,vol);
analogWrite(F21,vol);
sen5 = digitalRead(SEN5);
}
digitalWrite(P2,HIGH); //P2を反位に
delay(8000);
digitalWrite(P3,HIGH); //P3を反位に
delay(8000);
sen6 = digitalRead(SEN6); //S6を待つ
while (sen6 == HIGH) {
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F11,vol);
analogWrite(F21,vol);
sen6 = digitalRead(SEN6);
}
analogWrite(F21,0);
delay(500);
analogWrite(F22,vol);
sen4 = digitalRead(SEN4); //S4を待つ
while (sen4 == HIGH) {
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F11,vol);
analogWrite(F22,vol);
sen4 = digitalRead(SEN4);
}
analogWrite(F11,0);
digitalWrite(P2,LOW); //P2を定位に
delay(8000);
digitalWrite(P3,LOW); //P3を定位に
delay(8000);
analogWrite(F12,vol);
digitalWrite(P1,LOW); //P1を定位に
delay(8000);
digitalWrite(SIN,HIGH); //信号を赤
sen2 = digitalRead(SEN2);
while (sen2 == HIGH) {
vol=analogRead(VOL)/4;
delay(10);
analogWrite(F12,vol);
analogWrite(F22,vol);
sen2 = digitalRead(SEN2);
}
for(i=255;i>50;i--){ //減速
vol=analogRead(VOL)/4;
delay(500);
analogWrite(F12,vol*i/255);
analogWrite(F22,0);
}
analogWrite(F12,0); //停車
delay(32000);
//****** 交換モード ************
digitalWrite(SIN,LOW); //信号を緑にする
delay(16000);
digitalWrite(P4,HIGH); //P4,5を反位に
delay(8000);
for(i=50;i<255;i++){ //加速する
vol=analogRead(VOL)/6;
delay(200);
analogWrite(F11,vol*i/255);
analogWrite(F22,vol*i/255);
}
sen3 = digitalRead(SEN3); //S3を待つ
while (sen3 == HIGH) {
vol=analogRead(VOL)/6;
delay(10);
analogWrite(F11,vol);
analogWrite(F22,vol);
sen3 = digitalRead(SEN3);
}
sen7 = digitalRead(SEN7); //S7を待つ
while (sen7 == HIGH) {
vol=analogRead(VOL)/6;
delay(10);
analogWrite(F11,vol);
analogWrite(F22,vol);
sen7 = digitalRead(SEN7);
}
analogWrite(F11,0);
analogWrite(F22,0);
digitalWrite(P4,LOW); //P4,5を定位に
delay(8000);
analogWrite(F12,vol);
analogWrite(F22,vol);
sen2 = digitalRead(SEN2);
while (sen2 == HIGH) {
vol=analogRead(VOL)/6;
delay(10);
analogWrite(F12,vol);
analogWrite(F22,vol);
sen2 = digitalRead(SEN2);
}
for(i=255;i>50;i--){ //減速
vol=analogRead(VOL)/6;
delay(500);
analogWrite(F12,vol*i/255);
analogWrite(F22,0);
}
analogWrite(F12,0); //停車
delay(32000);
}