void setup() {
Serial.begin(9600);
pinMode(5, INPUT);
int first=0,middle,last=0xFF;
check(last);//PWMの電圧を安定させるため空で呼び出す
//バイナリサーチをイメージしてセンサーの最適な値を検出
while(!((last-first)<=1)){
middle=first+(last-first)/2;
if(check(middle)){
Serial.print("on ");
Serial.println(middle,DEC);
last=middle;
}else{
Serial.print("off ");
Serial.println(middle,DEC);
first=middle;
}
}
//OFFの値が2秒ほど安定するまで感度を落とす処理
for(unsigned long t=millis()+2000;t > millis();){
if(!digitalRead(5)){
check(--middle);
Serial.println(middle,DEC);
t=millis()+2000;
}
}
Serial.print("completion ");
Serial.println(middle,DEC);
}
int check(int i){
analogWrite(3,i);
delay(100);
return !digitalRead(5);
}
void loop() {
}