「A」の点灯 – プログラム例1

main.cpp 07-1

#include <Arduino.h> // Arduino.h の読み込み

// ドットマトリクスLEDアノード側ピンの配列
int ledAnodePins[8] = {0, 2, 4, 5, 16, 17, 18, 19};
// ドットマトリクスLEDカソード側ピンの配列
int ledCathodePins[8] = {21, 22, 23, 25, 26, 27, 32, 33};

/*
 * setup 関数
 */
void setup() {
  /* ここにプログラムの最初に1回だけ実行したい処理を上から順に記述していきます */

  // シリアル通信を115200bpsで開始
  Serial.begin(115200);

  Serial.println("初期設定の開始");

  // 各アノード・カソード端子の設定
  for(int i=0; i<8; i++) {

    // 入出力設定
    pinMode(ledAnodePins[i], OUTPUT);
    pinMode(ledCathodePins[i], OUTPUT);

    // 出力レベル設定(全消灯)
    digitalWrite(ledAnodePins[i], LOW);
    digitalWrite(ledCathodePins[i], HIGH);
  }

  Serial.println("初期設定の完了");
}

/*
 * loop 関数
 */
void loop() {
  /* ここにプログラム中で繰り返し実行したい処理を上から順に記述していきます */

  // 1行目の列の点灯設定(○○○○○○○○)
  digitalWrite(ledAnodePins[0], LOW);
  digitalWrite(ledAnodePins[1], LOW);
  digitalWrite(ledAnodePins[2], LOW);
  digitalWrite(ledAnodePins[3], LOW);
  digitalWrite(ledAnodePins[4], LOW);
  digitalWrite(ledAnodePins[5], LOW);
  digitalWrite(ledAnodePins[6], LOW);
  digitalWrite(ledAnodePins[7], LOW);
  // 1行目を点灯(※実際には点灯する列は無い)
  digitalWrite(ledCathodePins[0], LOW);
  // 時間待ち
  delay(1);
  // i行目を消灯
  digitalWrite(ledCathodePins[0], HIGH);

  // 2行目の列の点灯設定(○○○○●○○○)
  digitalWrite(ledAnodePins[0], LOW);
  digitalWrite(ledAnodePins[1], LOW);
  digitalWrite(ledAnodePins[2], LOW);
  digitalWrite(ledAnodePins[3], HIGH);
  digitalWrite(ledAnodePins[4], LOW);
  digitalWrite(ledAnodePins[5], LOW);
  digitalWrite(ledAnodePins[6], LOW);
  digitalWrite(ledAnodePins[7], LOW);
  // 2行目を点灯
  digitalWrite(ledCathodePins[1], LOW);
  // 時間待ち
  delay(1);
  // 2行目を消灯
  digitalWrite(ledCathodePins[1], HIGH);

  // 3行目の列の点灯設定( ○○○●○●○○)
  digitalWrite(ledAnodePins[0], LOW);
  digitalWrite(ledAnodePins[1], LOW);
  digitalWrite(ledAnodePins[2], HIGH);
  digitalWrite(ledAnodePins[3], LOW);
  digitalWrite(ledAnodePins[4], HIGH);
  digitalWrite(ledAnodePins[5], LOW);
  digitalWrite(ledAnodePins[6], LOW);
  digitalWrite(ledAnodePins[7], LOW);
  // 3行目を点灯
  digitalWrite(ledCathodePins[2], LOW);
  // 時間待ち
  delay(1);
  // 3行目を消灯
  digitalWrite(ledCathodePins[2], HIGH);

  // 4行目の列の点灯設定( ○○●○○○●○)
  digitalWrite(ledAnodePins[0], LOW);
  digitalWrite(ledAnodePins[1], HIGH);
  digitalWrite(ledAnodePins[2], LOW);
  digitalWrite(ledAnodePins[3], LOW);
  digitalWrite(ledAnodePins[4], LOW);
  digitalWrite(ledAnodePins[5], HIGH);
  digitalWrite(ledAnodePins[6], LOW);
  digitalWrite(ledAnodePins[7], LOW);
  // 4行目を点灯
  digitalWrite(ledCathodePins[3], LOW);
  // 時間待ち
  delay(1);
  // 4行目を消灯
  digitalWrite(ledCathodePins[3], HIGH);

  // 5行目の列の点灯設定(○○●○○○●○)
  digitalWrite(ledAnodePins[0], LOW);
  digitalWrite(ledAnodePins[1], HIGH);
  digitalWrite(ledAnodePins[2], LOW);
  digitalWrite(ledAnodePins[3], LOW);
  digitalWrite(ledAnodePins[4], LOW);
  digitalWrite(ledAnodePins[5], HIGH);
  digitalWrite(ledAnodePins[6], LOW);
  digitalWrite(ledAnodePins[7], LOW);
  // 5行目を点灯
  digitalWrite(ledCathodePins[4], LOW);
  // 時間待ち
  delay(1);
  // 5行目を消灯
  digitalWrite(ledCathodePins[4], HIGH);

  // 6行目の列の点灯設定(○○●●●●●○)
  digitalWrite(ledAnodePins[0], LOW);
  digitalWrite(ledAnodePins[1], HIGH);
  digitalWrite(ledAnodePins[2], HIGH);
  digitalWrite(ledAnodePins[3], HIGH);
  digitalWrite(ledAnodePins[4], HIGH);
  digitalWrite(ledAnodePins[5], HIGH);
  digitalWrite(ledAnodePins[6], LOW);
  digitalWrite(ledAnodePins[7], LOW);
  // 6行目を点灯
  digitalWrite(ledCathodePins[5], LOW);
  // 時間待ち
  delay(1);
  // 6行目を消灯
  digitalWrite(ledCathodePins[5], HIGH);

  // 7行目の列の点灯設定(○○●○○○●○)
  digitalWrite(ledAnodePins[0], LOW);
  digitalWrite(ledAnodePins[1], HIGH);
  digitalWrite(ledAnodePins[2], LOW);
  digitalWrite(ledAnodePins[3], LOW);
  digitalWrite(ledAnodePins[4], LOW);
  digitalWrite(ledAnodePins[5], HIGH);
  digitalWrite(ledAnodePins[6], LOW);
  digitalWrite(ledAnodePins[7], LOW);
  // 7行目を点灯
  digitalWrite(ledCathodePins[6], LOW);
  // 時間待ち
  delay(1);
  // 7行目を消灯
  digitalWrite(ledCathodePins[6], HIGH);

  // 8行目の列の点灯設定(○○●○○○●○)
  digitalWrite(ledAnodePins[0], LOW);
  digitalWrite(ledAnodePins[1], HIGH);
  digitalWrite(ledAnodePins[2], LOW);
  digitalWrite(ledAnodePins[3], LOW);
  digitalWrite(ledAnodePins[4], LOW);
  digitalWrite(ledAnodePins[5], HIGH);
  digitalWrite(ledAnodePins[6], LOW);
  digitalWrite(ledAnodePins[7], LOW);
  // 8行目を点灯
  digitalWrite(ledCathodePins[7], LOW);
  // 時間待ち
  delay(1);
  // 8行目を消灯
  digitalWrite(ledCathodePins[7], HIGH);
}
Code language: Arduino (arduino)

ドットマトリクスLEDに「A」は表示されましたか?

「A」の点灯

ところで、プログラム例7-1のプログラムはかなり長くなってしまいましたが、点灯パターンも配列にすると、短く整理できそうです。

点灯パターンを配列にして整理したフローチャートを考えてみましょう。フローチャートが描けたら、次のフローチャート例と見比べてみましょう。