ワット自動化ソース

```ruby:qiita.rb
#include <SwitchControlLibrary.h>
int MAXMONTH = 11; //月最大値(1月から11回更新で12月となるため)
int MAXDAY = 27;   //日最大値(1日から27回更新で28日となるため)
// ※このプログラムでは、ひと月を27日とみなす(ひと月の最短日数が28日のため)
int month = MAXMONTH; // 月
int day = MAXDAY;     // 日

// 初期処理　マイコン接続後1番に動きます
void setup(){
  // LRボタン押下でコントローラーとして認識させる　←初期処理単体だとなぜかうまくいかない
  SwitchControlLibrary().PressButtonL();
  delay(500);
  SwitchControlLibrary().PressButtonR();
  delay(500);
  SwitchControlLibrary().ReleaseButtonL();
  delay(500);
  SwitchControlLibrary().ReleaseButtonR();
  delay(500);
}

// 繰り返し処理　マイコンの接続をやめるまで{}内を繰り返します
void loop() {
  // LRボタン押下でコントローラーとして認識させる　←ここ単体でもなぜかうまくいかない
  SwitchControlLibrary().PressButtonL();
  delay(50);
  SwitchControlLibrary().PressButtonR();
  delay(50);
  SwitchControlLibrary().ReleaseButtonL();
  delay(50);
  SwitchControlLibrary().ReleaseButtonR();
  delay(50);
  // 開始 みんなで挑戦の直前から。
  ButtonA();
  delay(3000);
  // 募集開始
  ButtonHome();
  delay(1000);
  MoveHatDown();
  delay(100);
  MoveHatRight();
  delay(100);
  MoveHatRight();
  delay(100);
  MoveHatRight();
  delay(100);
  MoveHatRight();
  delay(100);
  ButtonA();
  delay(1500);
  // 設定画面
  SwitchControlLibrary().MoveHat(4); // down
  delay(2000);
  SwitchControlLibrary().MoveHat(8); // center
  delay(50);
  MoveHatRight();
  delay(50);
  MoveHatDown();
  delay(50);
  MoveHatDown();
  delay(50);
  MoveHatDown();
  delay(50);
  MoveHatDown();
  delay(50);
  ButtonA();
  delay(500);
  // 時間設定
  MoveHatDown();
  delay(50);
  MoveHatDown();
  delay(50);
  ButtonA();
  delay(500);
  // 時間の変更
  
  // 年の処理 日を27回変更し、月を11回変更していたら
  if (month == 0 & day == 0) {
    MoveHatUp(); // 年を変更
    delay(200);
    MoveHatRight();  // 月の項目へ移動
    delay(50);
    MoveHatUp();     // 月を変更
    delay(200);
    month = MAXMONTH;// 月をリセット
    MoveHatRight();  // 日の項目へ移動
    delay(50);
    DayReset();      // 日をリセット
    delay(200);
  }else{  
    // 月の処理 日を27回変更したいたら
    if (day == 0) {
      MoveHatRight();  // 月の項目へ移動
      delay(50);
      MoveHatUp();     // 月を変更
      delay(200);
      MoveHatRight();  // 日の項目へ移動
      delay(50);
      DayReset();      // 日をリセット
      delay(200);
      --month;     // 月をカウントダウン
    }else{      
      // 日の処理 日を27回変更していないなら
      MoveHatRight(); // 月の項目へ移動
      delay(50);
      MoveHatRight(); // 日の項目へ移動
      delay(50);
      MoveHatUp(); // 日を変更
      delay(200);
      --day;       // 日をカウントダウン
    }
  }  
  ButtonA();
  delay(50);
  ButtonA();
  delay(50);
  ButtonA();
  delay(50);
  ButtonA();
  delay(100);

  ButtonHome();
  delay(1000);
  ButtonA();
  delay(1000);
  MoveHatDown(); // やめる
  delay(500);
  ButtonA();     // はい
  delay(2000);
  ButtonA();
  delay(4000);
  ButtonA();
  delay(2000);
  ButtonA();
  delay(1000);
  ButtonA();
  delay(1000);
}

//Aボタンを押下して離すまで
void ButtonA(){
  SwitchControlLibrary().PressButtonA();
  delay(50);
  SwitchControlLibrary().ReleaseButtonA();
}

//ホームボタンを押下して離すまで
void ButtonHome(){
  SwitchControlLibrary().PressButtonHome();
  delay(50);
  SwitchControlLibrary().ReleaseButtonHome();
}

//下を入力して離すまで
void MoveHatDown(){
  SwitchControlLibrary().MoveHat(4); // down
  delay(50);
  SwitchControlLibrary().MoveHat(8); // center
}

//右を入力して離すまで
void MoveHatRight(){
  SwitchControlLibrary().MoveHat(2); // right
  delay(50);
  SwitchControlLibrary().MoveHat(8); // center
}

//上を入力して離すまで
void MoveHatUp(){
  SwitchControlLibrary().MoveHat(0); // up
  delay(50);
  SwitchControlLibrary().MoveHat(8); // center
}

//日をリセット
void DayReset(){
  for (day ; day < MAXDAY ; day++){
    MoveHatDown();
    delay(50);
  }
}
```