実現したいこと
ボタンを押したら音が鳴る所謂変身ベルトを作りたい
発生している問題・分からないこと
希望どうりの動作をしているんですが
音が鳴っている間にボタンを連続で押すとボタン押下が検出されなくなってしまい
音が鳴りません、シリアルモニタもとまります。
該当のソースコード
//以下DF共通 #include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" // IO10をRX, IO11をTXとしてアサイン SoftwareSerial mySoftwareSerial(10, 11); DFRobotDFPlayerMini myDFPlayer; void printDetail(uint8_t type, int value); //以上DF共通 #define STATE_A 1//変身前 #define STATE_B 2//変身後 uint8_t state = STATE_A;//変身前で初期化 uint8_t before_state ;//stateの前の状態を格納する void setup() { pinMode(9,INPUT_PULLUP);//変身ボタン pinMode(8,INPUT_PULLUP);//サブボタン //以下DF共通 Serial.begin(9600); mySoftwareSerial.begin(9600); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); // DFPlayerを初期化します。USBピンを使ってなければ、デバイスはSD(TF)カードが選択されます。 if (!myDFPlayer.begin(mySoftwareSerial)) { // 2秒以内に初期化できなかった場合はエラーメッセージを表示 Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while (true) { delay(0); // Code to compatible with ESP8266 watch dog. } //以上DF共通 } } void loop() { //押下時の動作 if(state == STATE_A && digitalRead(9)==LOW) //変身前かつボタンを押下したとき { Serial.println("変身しました"); state= STATE_B;//状態を変身後に移行する before_state = STATE_A; //前状態を格納 myDFPlayer.volume(15); // ボリュームをセット。(ボリュームは0から30の値で指定可能) myDFPlayer.play(2); // 変身音声 delay(500); } if(state == STATE_B && digitalRead(9)==LOW)//変身後かつボタンを押下したとき { Serial.println("変身解除しました"); state=STATE_A; //状態を変身前に移行する before_state = STATE_B;//前状態の格納 myDFPlayer.volume(15); // ボリュームをセット。(ボリュームは0から30の値で指定可能) myDFPlayer.play(1); // 変身解除 delay(500); } if(digitalRead(8)==LOW&&state==STATE_B) { myDFPlayer.volume(15); // ボリュームをセット。(ボリュームは0から30の値で指定可能) myDFPlayer.play(3); // アンデッド封印 delay(500); } //if()の中にswich文 delay(500); }
試したこと・調べたこと
上記の詳細・結果
チャタリングという現象が関係しているのかと思いGoogleで調べましたがよくわからなかったです。
補足
特になし
0 コメント