Q&A
前提
2台のESP32間をBluetooth通信を使って、スイッチをクリックするたびに異なる信号を送受信したいと考えています。下記のプログラムをそれぞれのESPに実装したところ、スイッチを何回押しても1番目の分岐に入ってしまい、他の分岐に入りません。間違いがあればアドバイスいただけますとありがたいです。よろしくお願いします。
マスタ側:ディスプレイを接続
スレーブ側:スイッチを2個接続
該当のソースコード(マスタ側)
C
1while (1) { // 2 if (SerialBT.available()) { 3 char a = SerialBT.read(); 4 if (a == '1') { 5 //ディスプレイ表示("1表示") 6 } 7 if (a == '2') { 8 //ディスプレイ表示("2表示") 9 } 10 if (a == '3') { 11 //ディスプレイ表示("3表示") 12 } 13 if (a == '4') { 14 //ディスプレイ表示("4表示") 15 SerialBT.write('z'); 16 goto loopout; 17 } 18 } 19 } 20loopout:;
該当のソースコード(スレーブ側)
C
1if (digitalRead(39) == HIGH) { // 2 SerialBT.write('w'); //マスタ側で受信確認済 3 delay(20); 4 Serial.println("w_recieved"); 5 6 while (1) {// 7 if (SerialBT.available()) { 8 Serial.println(SerialBT.available()); 9 x = SerialBT.read(); 10 11 if (x == 'x') { 12 Serial.println("x_recieved"); //シリアル表示確認済 13 while (1) { 14 uint8_t zenkai, konkai, zenkai_, konkai_; 15 konkai = digitalRead(39); 16 konkai_ = digitalRead(36); 17 if ( zenkai == 0 && konkai == 1 ) { 18 gmty++; //初期値は0 19 if (gmty = 1) { //スイッチ(39)の押し回数1回目 20 SerialBT.write('1'); // 21 delay(100); 22 Serial.println("gmty1"); 23 } 24 else if (gmty == 2) { //スイッチ(39)の押し回数2回目 25 SerialBT.write('2'); 26 delay(100); 27 Serial.println("gmty2"); 28 } 29 else if (gmty == 3) { //スイッチ(39)の押し回数3回目 30 SerialBT.write('3'); // 31 delay(100); 32 Serial.println("gmty3"); 33 } 34 if (gmty > 3) { 35 gmty = 0; 36 } 37 38 } 39 zenkai = konkai; 40 if ( zenkai_ == 0 && konkai_ == 1 ) { 41 SerialBT.write('4); //スイッチ(36)の押し回数1回目 42 delay(100); 43 Serial.println("gmty4"); 44 goto loopout; 45 } 46 } 47 } 48 } 49 } 50loopout:;
現状の問題点
上記プログラムを動かしたところ、スレーブ側のESP32のシリアルモニタにはスイッチ(39)を押すたびに"gmty1"が表示される。マスタ側のディスプレイにはスレーブ側の状態を反映して常に"1表示"が表示される。
なお、下記のESP単体で動かしたときのプログラムでは、スイッチを押すたびに異なる分岐に入り、シリアルモニタに"1,2,3..."と順番に表示されることを確認しています。
ESP単体で動かしたときのプログラム(動作確認済)
C
1int gmty = 0; 2void loop() { 3 4 // 前回と今回のスイッチ状態を記録する変数 5 uint8_t zenkai, konkai; 6 7 // 今回のスイッチ状態を調べて、変数「konkai」に代入する 8 konkai = digitalRead(39); 9 10 if( zenkai == 0 && konkai == 1 ) { 11 if (gmty == 1){ //スイッチ(39)の押し回数1回目 12 Serial.println("1"); 13 delay(300); 14 } 15 else if (gmty == 2){ //スイッチ(39)の押し回数2回目 16 Serial.println("2"); 17 delay(300); 18 } 19 else if (gmty == 3){ //スイッチ(39)の押し回数3回目 20 Serial.println("3"); 21 delay(300); 22 } 23 if (gmty > 3){ 24 gmty = 0; 25 } 26gmty++; 27 } 28 29 // 今回のスイッチ状態を、次回用に前回のスイッチ状態に保存しておく 30 zenkai = konkai; 31}
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/01/05 13:38