Programming Basic¶
Software design¶
必要に応じて(頭の中を整理する、誰かに伝える..etc.)ソフトウェアの設計書を書きましょう
- フローチャートで処理の構造や流れを整理しましょう(特に細かい条件分岐と処理の流れなどで頭の中で整理が難しい場合)。
- UML diagramはオブジェクト志向のソフトウェアモデリングをサポート。ステートマシン図(状態遷移図)など使えるかも。
For better coding¶
とりあえずArduino言語を想定。
- 変数や関数の名前はわかりやすく。例えば変数名について、
val
やpin
ではなく、buttonState
orswitchPin
と記述した方がわかりやすい - インデントで整理し、コードを見やすくしましょう
よりも↓がわかりやすい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¶
- Jkoba.net Arduino Tutorial
- 分かりやすい日本語解説。PWMの説明など。
- ドットインストール Arduino入門
- 2分x10回程度の動画でArduinoのセットアップ、回路作成、コーディングなどについて紹介しています
- 新人技術者のためのロジカル・シンキング入門
- 大規模組み込みシステム開発向けですが、組み込みシステム開発をどのようにうまく進められるか、設計/開発/テスト、ハードウェアなど様々な観点で解説しています
- Arduino Style Guide
- あまり細かくは規定されていません。
Last update: March 19, 2021