第5回電動チャージアックス製作記-制御プログラム開発-

電動チャージアックス作ってみた
www.youtube.com
ニコニコ→ http://nico.ms/sm32440094
製作レポート→ https://goo.gl/HUuvYN
今回は電子工作を飛ばして先にプログラムです。
動画で言うと「ぱぱぱっとやって終わりっ!」のところ。
ちなみに一番時間をかけたのはAAです。

//
//     _________   _________
//     \     _|_\_/_|_     /                                
//      |   |   ___   |   |                               
//      |   |  |   |  |   |
//      |    \  \_/  /    |                      ■■        ■■■    ■■■ 
//       \    |\___/|    /                        ■       ■■ ■■  ■■ ■■
//        \___|_| |_|___/    ■   ■  ■■■  ■ ■      ■       ■   ■  ■   ■
//             |_| L|         ■  ■ ■  ■  ■■       ■       ■   ■  ■   ■
//             |_| 「|         ■ ■  ■■■■■ ■        ■       ■   ■  ■   ■
//              _| L           ■■  ■     ■        ■       ■■ ■■  ■■ ■■
//              L___|          ■    ■■■  ■   ■    ■    ■   ■■■    ■■■ 
//
//
//ピン定義-------------------------------------------------------------------------
//駆動系
int slider_up = 12, slider_down = 11;
int rotor_ccw = 4, rotor_cw = 5;
int shield_open = 6, shield_close = 7;

//入力系
int transform_button = 14;
int re_transform_button = 15;
int high_output_button = 16;
int super_high_output_button = 17;


//セットアップ---------------------------------------------------------------------
void setup() {
  //スライダー
  pinMode(slider_up, OUTPUT);
  pinMode(slider_down, OUTPUT);

  //ローター
  pinMode(rotor_ccw, OUTPUT);
  pinMode(rotor_cw, OUTPUT);

  //展開機構
  pinMode(shield_open, OUTPUT);
  pinMode(shield_close, OUTPUT);

  //ボタン
  pinMode(transform_button, INPUT);
  pinMode(re_transform_button, INPUT);
  pinMode(high_output_button, INPUT);
  pinMode(super_high_output_button, INPUT);
}


//各アクション定義----------------------------------------------------------------

//合体変形
void transform () {
  //シールド展開
  digitalWrite(shield_open, HIGH);
  delay(300);
  digitalWrite(shield_open, LOW);
  //左回転しつつスライド
  //回転
  digitalWrite(rotor_ccw, HIGH);
  delay(1500);
  digitalWrite(rotor_ccw, LOW);
  //スライド
  digitalWrite(slider_down, HIGH);
  delay(1500);
  digitalWrite(slider_down, LOW);
}

//分離変形
void re_transform () {
  //右回転しつつスライド
  //回転
  digitalWrite(rotor_cw, HIGH);
  delay(1500);
  digitalWrite(rotor_cw, LOW);
  //スライド
  digitalWrite(slider_up, HIGH);
  delay(1500);
  digitalWrite(slider_up, LOW);
  //シールド格納
  digitalWrite(shield_close, HIGH);
  delay(300);
  digitalWrite(shield_close, LOW);
}

//高出力属性解放
void high_output () {
  //右回転しつつスライド
  //回転
  digitalWrite(rotor_cw, HIGH);
  delay(1500);
  digitalWrite(rotor_cw, LOW);
  //スライド
  digitalWrite(slider_up, HIGH);
  delay(1500);
  digitalWrite(slider_up, LOW);
  //シールド格納
  digitalWrite(shield_close, HIGH);
  delay(300);
  digitalWrite(shield_close, LOW);
  //シールド展開
  digitalWrite(shield_open, HIGH);
  delay(300);
  digitalWrite(shield_open, LOW);
  //左回転しつつスライド
  //回転
  digitalWrite(rotor_ccw, HIGH);
  delay(1500);
  digitalWrite(rotor_ccw, LOW);
  //スライド
  digitalWrite(slider_down, HIGH);
  delay(1500);
  digitalWrite(slider_down, LOW);

  //ここで叩きつけ完了
  delay(1000);

  //右回転しつつスライド
  //回転
  digitalWrite(rotor_cw, HIGH);
  delay(1500);
  digitalWrite(rotor_cw, LOW);
  //スライド
  digitalWrite(slider_up, LOW);
  digitalWrite(slider_up, HIGH);
  delay(1500);
  digitalWrite(slider_up, LOW);
  //シールド格納
  digitalWrite(shield_close, HIGH);
  delay(300);
  digitalWrite(shield_close, LOW);
}

//超高出力属性解放
void super_high_output () {
  //右回転しつつスライド
  //回転
  digitalWrite(rotor_cw, HIGH);
  delay(1500);
  digitalWrite(rotor_cw, LOW);
  //スライド
  digitalWrite(slider_up, HIGH);
  delay(1500);
  digitalWrite(slider_up, LOW);
  //シールド格納
  digitalWrite(shield_close, HIGH);
  delay(300);
  digitalWrite(shield_close, LOW);
  //シールド展開
  digitalWrite(shield_open, HIGH);
  delay(300);
  digitalWrite(shield_open, LOW);

  //左「「「「全」」」」回転しつつスライド
  //回転
  digitalWrite(rotor_ccw, HIGH);
  delay(3000);
  digitalWrite(rotor_ccw, LOW);
  //スライド
  digitalWrite(slider_down, HIGH);
  delay(1500);
  digitalWrite(slider_down, LOW);

  //ここで叩きつけ完了
  delay(1000);

  //右回転しつつスライド
  //回転
  digitalWrite(rotor_cw, HIGH);
  delay(1500);
  digitalWrite(rotor_cw, LOW);
  //スライド
  digitalWrite(slider_up, HIGH);
  delay(1500);
  digitalWrite(slider_up, LOW);
  //シールド格納
  digitalWrite(shield_close, HIGH);
  delay(300);
  digitalWrite(shield_close, LOW);
}


//プログラム本体------------------------------------------------------------------
void loop() {
  //合体変形
  if (digitalRead(transform_button) == HIGH) transform ();

  //分離変形
  else if (digitalRead(re_transform_button) == HIGH) re_transform ();

  //高出力属性解放
  else if (digitalRead(high_output_button) == HIGH) high_output ();

  //超高出力属性解放
  else if (digitalRead(super_high_output_button) == HIGH) super_high_output ();

}

ちなみに超高出力属性解放の英名はultra burstだそうです。直訳してた自分が恥ずかしい。
次回は電子工作です。