ローテーター制御用のメインサーバーでの基準方位設定のSWによる切り替えはうまく北基準、南基準の両方ともうまく動作していますがクライアント側のリモコン設定した送出UDP用のTFT液晶表示は北方向を0°(360°)とする表示のままであったため、今回サーバー側のESP32DEVKITCの基準方位設定SWを切り替える時に、クライアント側のESP32DEVKITCに於いても、同様に入力ポートを1つ利用して基準方位設定を行えるようにスケッチを検討追加してみました。
クライアント側のESP32DEVKITC での空きポートは結構ありますが、当初空いているというだけで入力ポートの0を選びSW取り付け設定していましたが、ポートがHIGH状態(SW-OFFでプルアップのHIGH)が通常の基準方位0°(360°)ではスケッチのコンパイル、そして書き込みでの問題は特にありませんでしたが、ところがポートがLOW(SW-ONでGND)状態でスケッチのコンパイルは問題なしそのあとの、書き込みで、動作しない状態(TFT液晶がホワイト状態)になってしまいました。ESP32DEVKITC のポートの情報を見直してみたところこの0ポートはBOOTとあり、書き込み時に使用される為、書き込みができないエラーとなっている様です。0ポートはTouch01、ADC11、そしてBOOTと3機能の兼用ポートです。という事で、入力ポートを別のポートへ変更することにしました。選んだのはGPIOだけとして使用できる入力ポート16としました。このポートはHIGH、LOWどちらでも問題なくスケッチコンパイル、書き込み問題ありません。ポート選定はポート16決定です。この入力として使う16ポートは内部プルアップ設定が可能なので大変回路が簡単になります。単純にSW-ON時GNDで方位が南に切り替わります。SW-OFF時(OPEN)は内部プルアップのHIGHで方位北設定に切り替わります。
下記はポートスケッチの書き換えた設定部です。

//#define DIR_STD 0 //Direction Standard SW (SOUTH:0,NORTH:1)
// when DIR_STD(port 0) is LOW when Write Board Error 
#define DIR_STD 16  //Direction Standard SW (SOUTH:0,NORTH:1)

下記は追加した16ポートの設定部です。
pinMode(DIR_STD,INPUT_PULLUP); //change 0 to 16  (SOUTH:LOW,NORTH:HIGH)

下記はTFT液晶表示用に用意した設定角度と読み取り角度の配列の設定と、単にSWのポート16の状態を確認するだけで追加したスケッチです。

          char ce[5];
          char cc[6];

          //Port0の状態確認の為だけで使用 start*************************
          int pinState = digitalRead(0);
          switch (pinState)
          {
              case LOW:
                       Serial.println("Port0はLOWです");
                       break;
              case HIGH:
                       Serial.println("Port0はHIGHです");
                       break;
              default:
                       break;
          }
          //Port0の状態確認の為だけで使用 end *************************
これがあるだけでシリアルモニターにリアルタイムで16ポートの状態が表示される為、動作確認時に入れました。配列設定以外は、あとから削除しても問題ないスケッチ部です。

上記でポート16の状態がキチンと動作していることを確認した上で、さっそく追加したSWの状態に合わせて方位切り替えスケッチをコーディングです。切り替えの為の角度に対しての方位切り替え時の計算式は全く同じサーバーで使用したサブルーチンをそのまま使えます。ポート16のHIGH、LOW切り替え時のスケッチです。

          if(digitalRead(DIR_STD) == LOW)
          {                                 //DIRECTION SOUTH STANDARD
              Serial.println("入力がLOWです");
              // 180 South standard **************
              result = 0;
              kaku =0;
              kaku = rv_data2;// Readkakudo
              calculateKakudo();
              //delay(100); 
              //   Serial.print("result is = ");
              //   Serial.println(result);                                                  
              sprintf(ce,"%3d",result);//new try
              //**********************************
              result = 0;
              kaku =0;
              kaku = rv_data1;//SET kakudo
              calculateKakudo();
              //delay(100);
              result1 = result; 
                           
              //   Serial.print("result1 is = ");
              //   Serial.println(result1);                            
              sprintf(cc,"%3d",result1);//new try
              // 180 South standard **************                   
           }
           else
           if(digitalRead(DIR_STD)== HIGH)
           {                               //DIRECTION NORTH STANDARD
              // 0 North standard --------
              sprintf(ce,"%3d",rv_data2);
              // 0 North standard --------                        
              sprintf(cc,"%3d",rv_data1);
           }

TFT液晶への表示は0°~360°では1桁、2桁、3桁の桁処理があるためスケッチが長いので省略しています。単純に表示前に角度の数値の桁に合わせてスペースを入れるだけのルーチンなので簡単です。
サブルーチンの calculateKakudo(); は先のMODEL 1200FXローテーターその31に記載したものと同じスケッチですのでここでは省略します。

以上でクライアント側のESP32DEVKITCのポート16をHIGH、またはLOWにすることで方位の切り替えができるようになりました。もちろんサーバー側で設定した切り替えはモードは合わせる必要があります。ここでは切り替えSWだけでの方位切り替えだけのように思われますが、実際のローテーターで北を0°とするその時は指針は北に合わせます。SWはOFF時です。
南を0°とするその時は指針は南に合わせます。SWはON時です。
上記設定においては角度は目盛り角度設定どおりに動作します。 

一通り、クライアント側で表示方位SWのモードをサーバーと合わす事で問題ない角度表示にできるようになりました。

デバッグは継続します。

つづく?