Skip to content

Programming Basic

Software design

必要に応じて(頭の中を整理する、誰かに伝える..etc.)ソフトウェアの設計書を書きましょう

  • フローチャートで処理の構造や流れを整理しましょう(特に細かい条件分岐と処理の流れなどで頭の中で整理が難しい場合)。
  • UML diagramはオブジェクト志向のソフトウェアモデリングをサポート。ステートマシン図(状態遷移図)など使えるかも。

For better coding

とりあえずArduino言語を想定。

  • 変数や関数の名前はわかりやすく。例えば変数名について、valpin ではなく、 buttonState or switchPinと記述した方がわかりやすい
  • インデントで整理し、コードを見やすくしましょう
    1
    2
    3
    4
    5
    6
    void setup(){
    int i=0;
    for (i<5){
    i=i+1;
    }
    }
    
    よりも↓がわかりやすい
    1
    2
    3
    4
    5
    6
    void setup(){
        int i=0;
        for (i<5){
            i=i+1;
        }
    }
    
  • 処理の塊は、関数として切り出す
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    // function initialBlink
    void initialBlink(){
      // turn LED on:
      digitalWrite(ledPin1, HIGH);
      digitalWrite(ledPin2, HIGH);
      delay(500);
      digitalWrite(ledPin1, LOW);
      digitalWrite(ledPin2, HIGH);
    }
    
    void setup(){
      pinMode(ledPin1, OUTPUT);
      pinMode(ledPin2, OUTPUT);
      initialBlink();
    }
    
  • 変数のスコープ(global: プログラム全体で参照可能/local: 同じ関数からのみ参照可能)を意識して記述する。グローバルで使用する定数を定義する場合は、constを使う(#define も使えるが、constの方が変数のスコープのルールに従うので間違いが起こりにくい)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const int ledPin = 1;
    void setup(){
      pinMode(ledPin, OUTPUT);
    }
    void loop(){
      digitalWrite(ledPin, HIGH);
      delay(1000);
      digitalWrite(ledPin, LOW);
    }
    
  • シリアルモニタを使って簡単デバッグ

    1
    2
    3
    4
    5
    6
    7
    8
    void loop() {
      sw = digitalRead(PA4);
      Serial.println("sw: ");
      Serial.println(sw);
      if (sw < 1 ){
        digitalWrite(PA7, HIGH);
      }
    }
    

  • その他、Arduinoのデバッグ方法 - Ref.Qiita ArduinoデバッグTips


Rererence


Last update: March 19, 2021