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