質問: ### 前提・実現したいこと while ループ内でスイッチ(val_Read_SW_1)をLOWにしても ループを抜け出せないです。 (if でスイッチ(val_Read_SW_1)の判定を行ったときは上手くいきます。) while ループ内でスイッチを変更しても、変更が反映されないのでしょうか? スイッチがLOWの時にwhile ループを抜け出せるようしたいです。 ### 発生している問題・エラーメッセージ ``` while ループ内でスイッチ(val_Read_SW_1)をLOWにしても ループを抜け出せないです。 ``` ### 該当のソースコード ``` void loop() { val_SS1=digitalRead(SS1); val_SS2=digitalRead(SS2); val_SS3=digitalRead(SS3); val_SS4=digitalRead(SS4); val_Read_SW_1=digitalRead(Read_SW_1); while(val_Read_SW_1==HIGH) { myServo.writeMicroseconds(1435); lcd.clear(); lcd.setCursor(0,0); lcd.print("Now servo is on."); delay(100); } myServo.writeMicroseconds(1424); lcd.clear(); lcd.setCursor(0,0); lcd.print("Now servo is off"); delay(100); } ``` ### 試したこと 1while 内でスイッチ(val_Read_SW_1)の状態を表示する。 while(val_Read_SW_1==HIGH) { myServo.writeMicroseconds(1435); lcd.clear(); lcd.setCursor(0,0); lcd.print("Now servo is on."); delay(100); lcd.clear(); lcd.setCursor(0,0); lcd.print(val_Read_SW_1); delay(1000); } 【結果】 スイッチをLOWに切り替えてもHIGHのままになる。 2if else ifに変更 void loop() { val_SS1=digitalRead(SS1); val_SS2=digitalRead(SS2); val_SS3=digitalRead(SS3); val_SS4=digitalRead(SS4); val_Read_SW_1=digitalRead(Read_SW_1); if(val_Read_SW_1==HIGH){ myServo.writeMicroseconds(1435); lcd.clear(); lcd.setCursor(0,0); lcd.print("Now servo is on."); delay(100); }else if (val_Read_SW_1==LOW){ myServo.writeMicroseconds(1424); lcd.clear(); lcd.setCursor(0,0); lcd.print("Now servo is off"); delay(100); } } 問題なく判定できました。 ### 補足情報(言語/FW/ツール等のバージョンなど) Arduino、C++
回答: ``` val_Read_SW_1=digitalRead(Read_SW_1); /* ここで一度スイッチ状態を読んだはいいが */ while(val_Read_SW_1==HIGH) { /* loop内で読み直していないので 未来永劫その値は変化しない */ } ```