質問: ``` #include const int THERMISTOR=0; //温度センサが接続されているピン const int SERVO=9; //サーボモータが接続されているピン const int SWITCH=2; //タクトスイッチが接続されているピン int s; //タクトスイッチの入力値 int old_s; //1時刻前の入力値 int state=0; //現在の状態 Servo servo; //サーボモータ void setup() { pinMode(SWITCH,INPUT); //ピンを入力に設定 pinMode(THERMISTOR,OUTPUT); servo.attach(SERVO); //サーボモータをピンに接続 pinMode(SERVO,OUTPUT); Serial.begin(9600); } void loop(){ s=digitalRead(SWITCH); //入力を読み取る if((s==HIGH) && (old_s==LOW)){ // state=1-state; //状態を変更(0なら1,1なら0へ変更) delay(30); } old_s=s; //1時刻前の入力として保存 if(state==1){ //状態が1のとき digitalWrite(THERMISTOR,HIGH); digitalWrite(SERVO,HIGH); motor_action(); //関数呼び出し }else{ //状態が0のとき digitalWrite(THERMISTOR,LOW); digitalWrite(SERVO,LOW); } } void motor_action() { int v; float temp; v=analogRead(THERMISTOR); temp=(v*5000.0/1024-500.0)/10.0; //温度に変換 if(18.0<=temp && temp<=30.0){ //気温が18°C以上30°C以下の場合 Serial.println(temp); delay(0); servo.write(0); delay(3000); servo.write(90); delay(3000); }else if(10.0
回答: 時間待ちをすべてdelayで行ってますが、これではまずいです。 delayで時間待ちをしてる間は、全く処理は行いません。 スイッチの入力も行われない、ということになります。 つまりは、motor_actionを実行中の6秒間は、スイッチをどうしようと無視される、ということとなります コードの各所に、動作状態を示すメッセージを出すようにして、コードがどういう動作をしているのか確認できるようにしておけばどうでしょう。