工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino Nanoで8×8 LEDマトリックスをドライバー/ライブラリなしで直接制御

必要な部品と用品

Arduino Nano R3×1
1088AS 共通カソード 8×8 LEDドットマトリックス(赤)×1
スルーホール抵抗 330Ω×1

プロジェクト概要

MAX7219などのドライバーチップやライブラリを一切使わず、Arduino Nanoだけで1088AS共通カソード8×8 LEDマトリックスを制御するチュートリアルです。マルチプレクシング(動的点灯)により全64個のLEDを制御します。第2回ではMAX7219使用版との比較も予定しています。

完全なチュートリアル動画:
Patreon / PayPal

スケッチ(コード)

1. 全64 LEDを順番に点灯テスト

// Mario's Ideas
// 8x8 LEDマトリックスの全64 LEDを1つずつ点灯テスト

// 行ピン定義
#define R1 2  #define R2 3  #define R3 4  #define R4 5
#define R5 6  #define R6 7  #define R7 8  #define R8 9
// 列ピン定義
#define C1 10 #define C2 11 #define C3 12 #define C4 13
#define C5 A0 #define C6 A1 #define C7 A2 #define C8 A3

void setup() {
  pinMode(R1, OUTPUT); pinMode(R2, OUTPUT); pinMode(R3, OUTPUT); pinMode(R4, OUTPUT);
  pinMode(R5, OUTPUT); pinMode(R6, OUTPUT); pinMode(R7, OUTPUT); pinMode(R8, OUTPUT);
  pinMode(C1, OUTPUT); pinMode(C2, OUTPUT); pinMode(C3, OUTPUT); pinMode(C4, OUTPUT);
  pinMode(C5, OUTPUT); pinMode(C6, OUTPUT); pinMode(C7, OUTPUT); pinMode(C8, OUTPUT);

  // 起動時全消灯(共通カソード:行=LOW、列=HIGHで点灯)
  digitalWrite(R1, HIGH); digitalWrite(R2, HIGH); digitalWrite(R3, HIGH); digitalWrite(R4, HIGH);
  digitalWrite(R5, HIGH); digitalWrite(R6, HIGH); digitalWrite(R7, HIGH); digitalWrite(R8, HIGH);
  digitalWrite(C1, LOW); digitalWrite(C2, LOW); digitalWrite(C3, LOW); digitalWrite(C4, LOW);
  digitalWrite(C5, LOW); digitalWrite(C6, LOW); digitalWrite(C7, LOW); digitalWrite(C8, LOW);
}

void SelectRow(int row) {
  digitalWrite(R1, row==1?LOW:HIGH); digitalWrite(R2, row==2?LOW:HIGH);
  digitalWrite(R3, row==3?LOW:HIGH); digitalWrite(R4, row==4?LOW:HIGH);
  digitalWrite(R5, row==5?LOW:HIGH); digitalWrite(R6, row==6?LOW:HIGH);
  digitalWrite(R7, row==7?LOW:HIGH); digitalWrite(R8, row==8?LOW:HIGH);
}

void SelectColumn(int column) {
  digitalWrite(C1, column==1?HIGH:LOW); digitalWrite(C2, column==2?HIGH:LOW);
  digitalWrite(C3, column==3?HIGH:LOW); digitalWrite(C4, column==4?HIGH:LOW);
  digitalWrite(C5, column==5?HIGH:LOW); digitalWrite(C6, column==6?HIGH:LOW);
  digitalWrite(C7, column==7?HIGH:LOW); digitalWrite(C8, column==8?HIGH:LOW);
}

void loop() {
  for (int i=1; i<9; i++) {
    for (int j=1; j<9; j++) {
      SelectRow(i);
      SelectColumn(j);
      delay(100);
    }
  }
}

2. 猫の画像を表示(マルチプレクシング)

// Mario's Ideas
// 8x8 LEDマトリックスに猫画像を表示(マルチプレクシング)

// ピン定義同上
int pause = 300;
int Cat[8][8] = {
  {1,0,0,0,1,0,0,0},
  {1,1,1,1,1,0,0,0},
  {1,0,1,0,1,0,0,0},
  {0,1,1,1,0,0,0,1},
  {0,0,1,0,0,0,0,1},
  {0,1,1,1,1,0,0,1},
  {0,1,1,1,1,1,0,1},
  {1,0,1,1,1,1,1,0}
};

void setup() { /* ピンモード設定・初期化同上 */ }

void SelectRow(int row) { /* 同上 */ }

void Set_LED_in_Active_Row(int column, int state) {
  switch(column) {
    case 1: digitalWrite(C1, state); break;
    case 2: digitalWrite(C2, state); break;
    case 3: digitalWrite(C3, state); break;
    case 4: digitalWrite(C4, state); break;
    case 5: digitalWrite(C5, state); break;
    case 6: digitalWrite(C6, state); break;
    case 7: digitalWrite(C7, state); break;
    case 8: digitalWrite(C8, state); break;
  }
}

void loop() {
  for (int j=0; j<8; j++) {
    SelectRow(j+1);
    for (int i=0; i<8; i++) {
      Set_LED_in_Active_Row(i+1, Cat[j][i]);
    }
    delay(2 + pause);
  }
  if (pause != 0 && pause > 100) pause -= 100;
  else if (pause != 0 && pause <= 100) pause -= 10;
}

3. スクロールテキスト表示(マルチプレクシング)

// Mario's Ideas
// 8x8 LEDマトリックスでスクロールテキスト表示

// ピン定義同上
int position = 0;
// "Marios_ideas" のフォントデータ 8行×54列
int Marios_ideas[8][54] = { /* データ省略:元コード参照 */ };

void setup() { /* ピンモード設定・初期化同上 */ }
void SelectRow(int row) { /* 同上 */ }
void Set_LED_in_Active_Row(int column, int state) { /* 同上 */ }

void loop() {
  for (int x=0; x<5; x++) {
    for (int j=0; j<8; j++) {
      SelectRow(j+1);
      for (int i=0; i<8; i++) {
        int idx = (i + position) - abs((i + position) / 54) * 54;
        Set_LED_in_Active_Row(i+1, Marios_ideas[j][idx]);
      }
      delay(2);
    }
  }
  position++;
}

回路図

Arduino Nanoで8×8 LEDマトリックスをドライバー/ライブラリなしで直接制御

製造プロセス

  1. 発光ダイオード(LED):誕生から100年寿命へ
  2. Arduinoで「棺桶ダンス」メロディーを再現するプロジェクト
  3. Arduino NanoとMAX7219で作る24×16 LEDポングゲーム機
  4. PIRセンサー連動 インタラクティブLEDマトリクスドアディスプレイ - ホリデーグリーティング
  5. 音声反応型 8 LED ライトディスプレイ
  6. スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
  7. ホットグルー棒で作るLEDマトリックスランプ - カラフルなディスプレイを自作
  8. Bolt IoTとArduino UNOでLED輝度をシームレス制御
  9. Arduino Nanoで8×8 LEDマトリックスをドライバー/ライブラリなしで直接制御
  10. Arduino Nanoで作る8×8 LEDマトリックスのフリップクロック - 自作リアルタイムクロック
  11. Maxim MAX25610A/B:自動車・産業照明向けコンパクト、高効率、EMI最適化LEDドライバ