///PWM周波数設定
void analogWrite3(int op1){
TCCR2A=0b00100011;
TCCR2B=0b00001010;
OCR2A=150;
OCR2B=op1;
}
void analogWrite10(int op2){
TCCR1A=0b00100011;
TCCR1B=0b00011010;
OCR1A=150;
OCR1B=op2;
}
void setup() {
Serial.begin(9600);
pinMode(3,OUTPUT);//PWM1
pinMode(9,OUTPUT);//整流1
pinMode(10,OUTPUT);//PWM2
pinMode(11,OUTPUT);//整流2
pinMode(13,OUTPUT);//非常灯
pinMode(18,INPUT);//操作モード切替
}
int v=0;
int v0=10;
int v1=0;
int v2=0,v3=0;
int fw=0;
int res=0;
int cmd=0,ocmd=0;
int a1=0,a2=0;
int afw[]={201,202,203};
int fw1;
int p1=1,p2=1,pt;
int ct=0;
void loop(){
//非常停止
int ar=analogRead(0);
Serial.println(ar);
if (fw!=0){
if (ar<750 ){
fw=0;
res=1;
v1=0;
digitalWrite(13,HIGH);
}
}
// モード切替
if (digitalRead(18)==HIGH){cmd=1;}
else {cmd=0;}
if (cmd!=ocmd){
ocmd=cmd;
for (int i=v1;i>10;i--){
if (fw==1){
analogWrite3(i);
}
if (fw==-1){
analogWrite10(i);
}
delay(20);
}
res=1;
digitalWrite(13,HIGH);
delay(500);
}
///
///Bluetooth
if (cmd==1){
v=Serial.read();
if (0<v && v<150){
v1=v;
}
}
////本体操作
if (cmd==0){
v=0;
v0=int(analogRead(2)/12);
v2=int(analogRead(1)/10.2);
v3=130-v0;
v1=10+v0+(v3*v2/100);
int a1=(analogRead(3)+256)/512;
if (a1!=a2){
v=afw[a1];
delay(100);
a2=a1;
}
}
////方向転換
if (res==0){
if (v==201){
fw=1;
ct=50;
digitalWrite(11,LOW);
digitalWrite(3,LOW);
delay(10);
}
if (v==203){
fw=-1;
ct=50;
digitalWrite(9,LOW);
digitalWrite(10,LOW);
delay(10);
}
}
else {
fw=0;
v1=0;
digitalWrite(3,LOW);
digitalWrite(10,LOW);
}
if (v==202){
res=0;
fw=0;
digitalWrite(13,LOW);
digitalWrite(3,LOW);
digitalWrite(10,LOW);
}
////出力
if (fw==1){
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(9,HIGH);
analogWrite3(v1);
}
if (fw==-1){
digitalWrite(3,LOW);
digitalWrite(9,LOW);
digitalWrite(11,HIGH);
analogWrite10(v1);
}
delay(5);
}