RP2040マイコンを使って、8x8LED ドットマトリックスを制御して楽しもうというコンセプトです。
RTCも簡単につながるので、時間表示なども楽しんで知的好奇心を満たせれば嬉しいです。
作成したデータをスクロールして楽しむプログラムです。
ArduinoIDE バージョン:2.3.2
RTCライブラリ version to 2.1.4
①マイコン:PR2040-ZERO(RaspberryPiPico系)
②I2C接続ピン
SDA:GPIO8(GPIO4)
SDL:GPI09(GPIO5)
③RTC DS1307RTCモジュール
④Lチカ用LED :GPIO10
⑤マトリクスLEDドライバ HT16K33-28Wまたは互換
⑥プッシュスイッチ1:GPI011
プッシュスイッチ2:GPI012
ちょっと無駄が多そうなプログラムなので、もう少しうまく整理して処理すれば
簡素化できると思います。
動き始めたら、そこから改造で効率よくプログラミングを楽しんでください。
動かないと絶望で進まなくなりますものね。
// 8x8 dot matrix board program
// 8x8 dot matrix board program
//########## I2C Serial communication settings ############
#include <Wire.h>
//データ格納ファイル設定
#include "led_data.h"
//########## LED 8x8 Matrix Control IC ############
#define Addrs1 (0x70) //LED制御IC HT16K33 アドレス
#define Addrs2 (0x71) //LED制御IC HT16K33 アドレス
#define Addrs3 (0x73) //LED制御IC HT16K33 アドレス
//########## RTC (Real Time Clock) module ##########
#define MEM (0x50) //EEPROM AT24C02 アドレス データを保管するIC
#define RTC (0x68) //DS3231 アドレス 時間を制御するIC
// ####### 左回りに90°回転したデータを入れる ######
byte led_d1_rotate[8];
byte led_d2_rotate[8];
byte led_d3_rotate[8];
byte led_d4_rotate[8];
byte led_d5_rotate[8];
byte led_d6_rotate[8];
byte led_d7_rotate[8];
byte led_d8_rotate[8];
byte led_d9_rotate[8];
byte led_d0_rotate[8];
byte led_da_rotate[8];
byte led_dq_rotate[8];
// ####### シフトしたデータを合算したデータ ######
byte DA1P[8];
byte DA2P[8];
byte DA3P[8];
byte DA4P[8];
byte DA5P[8];
byte DA6P[8];
byte DA7P[8];
byte DA8P[8];
byte DA9P[8];
byte DA10P[8];
byte DA11P[8];
byte DA12P[8];
// ####### シフトしたデータを合算したデータ ######
byte dat1p[8];
byte dat2p[8];
byte dat3p[8];
byte dat4p[8];
byte dat5p[8];
byte dat6p[8];
byte dat7p[8];
byte dat8p[8];
// ####### シフト合算して回転させたデータ ######
byte DA1SR[8];
byte DA2SR[8];
byte DA3SR[8];
byte DA4SR[8];
byte DA5SR[8];
byte DA6SR[8];
byte DA7SR[8];
byte DA8SR[8];
// ####### シフトして回転したデータ ######
byte dat1pSR[8];
byte dat2pSR[8];
byte dat3pSR[8];
byte dat4pSR[8];
byte dat5pSR[8];
byte dat6pSR[8];
byte dat7pSR[8];
byte dat8pSR[8];
//**********************HT16K33 Initial setting*******************
void LED_Driver_Setup(byte LD_addrs, byte on_off)
{
Wire.beginTransmission(LD_addrs); //
Wire.write(0x20 | on_off); //システムオシレータをONにする
Wire.endTransmission();
}
//**********************LEDドライバ HT16K33 点滅周期設定*******************
void LED_Driver_Blink(byte LD_addrs, byte on_off, byte blink_Hz)
{
//blink_Hz=0 点滅off, 1は2Hz, 2は1Hz, 3は0.5Hz, on_off=0は消灯、1は点灯
Wire.beginTransmission(LD_addrs);
Wire.write(0x80 | (blink_Hz<<1) | on_off);
Wire.endTransmission();
}
//**********************LEDドライバ HT16K33 明るさ設定*********************
void LED_Driver_Brightness(byte LD_addrs, byte brightness)
{
Wire.beginTransmission(LD_addrs);
Wire.write(0xE0 | brightness); // brightness= 0~15
Wire.endTransmission();
}
//********************** HT16K33 画面初期化*********************
void LED_Driver_DisplayInt(byte LD_addrs)
{
Wire.beginTransmission(LD_addrs);
Wire.write(0x00);
for(int i=0;i<8;i++){
Wire.write(0x00); //1つ目の8x8LED初期化
Wire.write(0x00); //2つ目の8x8LED初期化
}
Wire.endTransmission();
}
//**********************Data send*******************
void data_send(byte addrs, byte* led_hi, byte* led_lo)
{
int i;
Wire.beginTransmission(addrs);
Wire.write(0x00); //
for ( i=0; i<8; i++){
Wire.write(led_hi[i]); // 1
Wire.write(led_lo[i]); // 2
}
Wire.endTransmission();
}
//**********************Rotate the Data ******************************
// data_raw は、作成した生のデータを代入する
// data_procは、左回転したデータを格納する
// 例 rotate_cnv(AA, BB) とプログラムを書くと、AAのデータを読み取って、
// 左回転したデータをBBに書き込む処理です。
// ちなみにrawは、英語で「生の」から命名
// procは、processから取った英語で「処理」から命名
void rotate_cnv(byte* data_raw, byte* data_proc)
{
for(byte i=0; i<8; i++){
for(byte j=0; j<8; j++){
bitWrite(data_proc[7-j],i,bitRead(data_raw[i],j));
}
}
}
//**********************Shift Data ******************************
//disp_shift 8x8で分割されている表示データを左にずらして8x8のデータに合算している
//データを合算しているのでplusという意味で末尾にpを命名
void disp_shift(byte* dat1, byte* dat2, byte* dat3, byte* dat4, byte* dat5, byte* dat6, byte* dat7, byte* dat8){
int i,j;
for(byte j=0; j<8; j++){
for(byte i=0; i<8; i++){
dat1p[i] = (dat1[i] >> j) + (dat3[i] << 8-j);
dat2p[i] = (dat2[i] >> j) + (dat4[i] << 8-j);
dat3p[i] = (dat3[i] >> j) + (dat5[i] << 8-j);
dat4p[i] = (dat4[i] >> j) + (dat6[i] << 8-j);
dat5p[i] = (dat5[i] >> j) + (dat7[i] << 8-j);
dat6p[i] = (dat6[i] >> j) + (dat8[i] << 8-j);
}
rotate_cnv(dat1p, dat1pSR); //Shift + Rotate
rotate_cnv(dat2p, dat2pSR); //Shift + Rotate
rotate_cnv(dat3p, dat3pSR); //Shift + Rotate
rotate_cnv(dat4p, dat4pSR); //Shift + Rotate
rotate_cnv(dat5p, dat5pSR); //Shift + Rotate
rotate_cnv(dat6p, dat6pSR); //Shift + Rotate
rotate_cnv(dat7p, dat7pSR); //Shift + Rotate
rotate_cnv(dat8p, dat8pSR); //Shift + Rotate
//########## data send command ##########
//########## chip_addres, ch1 data, ch2 data ##########
data_send(Addrs1, dat1pSR, dat2pSR);
data_send(Addrs2, dat3pSR, dat4pSR);
data_send(Addrs3, dat5pSR, dat6pSR);
delay (90);
}
}
//############### セットアップ ####################
void setup()
{
Wire.begin(); // initialise the connection
Wire.setClock(400000L); //I2Cクロック を400kHzにする
LED_Driver_Setup( Addrs1, 1); //HT16K33システムオシレータ ON
LED_Driver_Blink( Addrs1, 1, 0); //blink_Hz=0 点滅off, 1は2Hz, 2は1Hz, 3は0.5Hz, on_off=0は消灯、1は点灯
LED_Driver_Brightness( Addrs1, 2 ); // brightness= 0~15
LED_Driver_DisplayInt( Addrs1 ); //Display Black OUT
LED_Driver_Setup( Addrs2, 1); //HT16K33システムオシレータ ON
LED_Driver_Blink( Addrs2, 1, 0); //blink_Hz=0 点滅off, 1は2Hz, 2は1Hz, 3は0.5Hz, on_off=0は消灯、1は点灯
LED_Driver_Brightness( Addrs2, 2 ); // brightness= 0~15
LED_Driver_DisplayInt( Addrs2 ); //Display Black OUT
LED_Driver_Setup( Addrs3, 1); //HT16K33システムオシレータ ON
LED_Driver_Blink( Addrs3, 1, 0); //blink_Hz=0 点滅off, 1は2Hz, 2は1Hz, 3は0.5Hz, on_off=0は消灯、1は点灯
LED_Driver_Brightness( Addrs3, 2 ); // brightness= 0~15
LED_Driver_DisplayInt( Addrs3 ); //Display Black OUT
// RP2040-ZERO の動作チェック用LED制御用
pinMode(10, OUTPUT);
digitalWrite(10,HIGH);
delay (200);
}
//######################################################
//#################### メインループ ####################
//######################################################
void loop() {
//---------- 変数の宣言 Intはinteger 整数 ----------
int i,j;
//---------- データを左にシフトして表示させる ----------
//---------- DA0はからデータでスタート時は全消灯から始まる ----------
disp_shift(PAC0, PAC0, PAC0, PAC0, PAC0, PAC0, PAC1, PAC2 );
digitalWrite(16,HIGH);
disp_shift(PAC0, PAC0, PAC0, PAC0, PAC1, PAC2, PAC3, PAC4 );
digitalWrite(16,LOW);
disp_shift(PAC0, PAC0, PAC1, PAC2, PAC3, PAC4, PAC5, PAC6 );
digitalWrite(16,HIGH);
disp_shift(PAC1, PAC2, PAC3, PAC4, PAC5, PAC6, PAC7, PAC8 );
digitalWrite(16,LOW);
disp_shift(PAC3, PAC4, PAC5, PAC6, PAC7, PAC8, PAC9, PAC10 );
digitalWrite(16,HIGH);
disp_shift(PAC5, PAC6, PAC7, PAC8, PAC9, PAC10, PAC11, PAC12 );
digitalWrite(16,LOW);
disp_shift(PAC7, PAC8, PAC9, PAC10, PAC11, PAC12, MON1, MON2 );
digitalWrite(16,HIGH);
disp_shift(PAC9, PAC10, PAC11, PAC12, MON1, MON2, MON3, MON4 );
digitalWrite(16,LOW);
disp_shift(PAC11, PAC12, MON1, MON2, MON3, MON4, MON5, MON6 );
digitalWrite(16,HIGH);
disp_shift(MON1, MON2, MON3, MON4, MON5, MON6, MON7, MON8 );
digitalWrite(16,LOW);
disp_shift(MON3, MON4, MON5, MON6, MON7, MON8, MON1, MON2 );
digitalWrite(16,HIGH);
disp_shift(MON5, MON6, MON7, MON8, MON1, MON2, MON3, MON4 );
digitalWrite(16,LOW);
disp_shift(MON7, MON8, MON1, MON2, MON3, MON4, MON5, MON6 );
digitalWrite(16,HIGH);
delay (100);
}
メインループで「disp_shift」関数を使って8個のデータを処理します。
8個のデータのイメージは下記になります。
赤枠がドットマトリクスの8x8LEDになります。
1ドット左にシフトするので、不足分を7、8から補うようにするため8個のデータを処理させています。
8ドットシフトしたら続きを設定します。
「disp_shift」関数は、作成したデータを
①回転させる(向きを合わせています。)
②8回シフトする
処理をしています。
「rotate_cnv」関数は、データを回転させて向きを調整しています。
void rotate_cnv(byte* data_raw, byte* data_proc)
{
for(byte i=0; i<8; i++){
for(byte j=0; j<8; j++){
bitWrite(data_proc[7-j],i,bitRead(data_raw[i],j));
}
}
}
データシフトは、これで処理しています。
int i,j;
for(byte j=0; j<8; j++){
for(byte i=0; i<8; i++){
dat1p[i] = (dat1[i] >> j) + (dat3[i] << 8-j);
dat2p[i] = (dat2[i] >> j) + (dat4[i] << 8-j);
dat3p[i] = (dat3[i] >> j) + (dat5[i] << 8-j);
dat4p[i] = (dat4[i] >> j) + (dat6[i] << 8-j);
dat5p[i] = (dat5[i] >> j) + (dat7[i] << 8-j);
dat6p[i] = (dat6[i] >> j) + (dat8[i] << 8-j);
}
処理したデータをLEDドライバに送信する関数はこちらです。
データを回転させて、シフトしたデータがdat1pSR、dat2pSRですね。
//########## data send command ##########
//########## chip_addres, ch1 data, ch2 data ##########
data_send(Addrs1, dat1pSR, dat2pSR);
data_send(Addrs2, dat3pSR, dat4pSR);
data_send(Addrs3, dat5pSR, dat6pSR);
データはプログラムから分けています。
データを分けておけば流用も可能ですし、メインプログラムがすっきりすると思うのでお勧めです。
// led_data.h
#ifndef LED_DATA_H
#define LED_DATA_H
// 自作数字のデータ
// 数字1を表すデータ
byte led_d1[8] = { 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 };
// 数字2を表すデータ
byte led_d2[8] = { 0x7E, 0x40, 0x40, 0x7E, 0x02, 0x02, 0x02, 0x7E };
// 数字3を表すデータ
byte led_d3[8] = { 0x7E, 0x40, 0x40, 0x7E, 0x40, 0x40, 0x40, 0x7E };
// 数字4を表すデータ
byte led_d4[8] = { 0x42, 0x42, 0x42, 0x42, 0x7E, 0x40, 0x40, 0x40 };
// 数字5を表すデータ
byte led_d5[8] = { 0x7E, 0x02, 0x02, 0x7E, 0x40, 0x40, 0x40, 0x7E };
// 数字6を表すデータ
byte led_d6[8] = { 0x7E, 0x02, 0x02, 0x7E, 0x42, 0x42, 0x42, 0x7E };
// 数字7を表すデータ
byte led_d7[8] = { 0x7E, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 };
// 数字8を表すデータ
byte led_d8[8] = { 0x7E, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x7E };
// 数字9を表すデータ
byte led_d9[8] = { 0x7E, 0x42, 0x42, 0x7E, 0x40, 0x40, 0x40, 0x7E };
// 数字0を表すデータ
byte led_d0[8] = { 0x7E, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7E };
// 特殊文字Aを表すデータ
byte led_da[8] = { 0x20, 0xF0, 0x27, 0xFD, 0x47, 0xFD, 0x57, 0x60 };
// 特殊文字Qを表すデータ
byte led_dq[8] = { 0x18, 0x24, 0x42, 0xBD, 0x48, 0x48, 0x44, 0x24 };
// ####### 電脳好奇心のデータ ######
byte DA0[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
//電
byte DA1[8] = { 0xFE, 0x80, 0xFE, 0x82, 0xBA, 0x82, 0xBA, 0x00 };
byte DA2[8] = { 0xFC, 0x84, 0xFC, 0x84, 0xFC, 0x80, 0x80, 0x80 };
byte DA3[8] = { 0x3F, 0x00, 0x3F, 0x20, 0x2E, 0x20, 0x2E, 0x00 };
byte DA4[8] = { 0x1F, 0x10, 0x1F, 0x10, 0x1F, 0x00, 0x20, 0x1F };
//脳
byte DA5[8] = { 0x00, 0x9E, 0x92, 0x12, 0x12, 0x1E, 0x52, 0x52 };
byte DA6[8] = { 0x52, 0x5E, 0x52, 0x52, 0x52, 0x51, 0xD1, 0x4D };
byte DA7[8] = { 0x02, 0x44, 0x44, 0x25, 0x21, 0x10, 0x80, 0x91 };
byte DA8[8] = { 0x92, 0x8C, 0x8C, 0x92, 0xA1, 0x80, 0xFF, 0x80 };
//好
byte DA9[8] = { 0x04, 0x04, 0x44, 0xFF, 0x44, 0x44, 0x42, 0xA2 };
byte DA10[8] = { 0x22, 0x14, 0x08, 0x14, 0x22, 0x21, 0x00, 0x00 };
byte DA11[8] = { 0x00, 0x7F, 0x40, 0x20, 0x20, 0x10, 0x10, 0x7F };
byte DA12[8] = { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x12, 0x0C };
//奇
byte DA13[8] = { 0x80, 0x80, 0xFC, 0x40, 0x20, 0x18, 0xFE, 0x00 };
byte DA14[8] = { 0xF8, 0x88, 0x88, 0xF8, 0x08, 0x00, 0x00, 0x00 };
byte DA15[8] = { 0x00, 0x00, 0x3F, 0x01, 0x02, 0x0C, 0x7F, 0x10 };
byte DA16[8] = { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F };
//心
byte DA17[8] = { 0x00, 0x80, 0x00, 0x00, 0x10, 0x10, 0x12, 0x12 };
byte DA18[8] = { 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0xE0 };
byte DA19[8] = { 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00 };
byte DA20[8] = { 0x20, 0x20, 0x40, 0x40, 0x00, 0x10, 0x10, 0x0F };
//電
byte DA21[8] = { 0xFE, 0x80, 0xFE, 0x82, 0xBA, 0x82, 0xBA, 0x00 };
byte DA22[8] = { 0xFC, 0x84, 0xFC, 0x84, 0xFC, 0x80, 0x80, 0x80 };
byte DA23[8] = { 0x3F, 0x00, 0x3F, 0x20, 0x2E, 0x20, 0x2E, 0x00 };
byte DA24[8] = { 0x1F, 0x10, 0x1F, 0x10, 0x1F, 0x00, 0x20, 0x1F };
//子
byte DA25[8] = { 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte DA26[8] = { 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80 };
byte DA27[8] = { 0x00, 0x00, 0x1F, 0x08, 0x04, 0x03, 0x01, 0x01 };
byte DA28[8] = { 0x7F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
//工
byte DA29[8] = { 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00 };
byte DA30[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE };
byte DA31[8] = { 0x00, 0x00, 0x00, 0x3F, 0x01, 0x01, 0x01, 0x01 };
byte DA32[8] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF };
//作
byte DA33[8] = { 0x10, 0x90, 0x48, 0xE4, 0x2C, 0x2A, 0x1A, 0x09 };
byte DA34[8] = { 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 };
byte DA35[8] = { 0x01, 0x00, 0x00, 0x7F, 0x02, 0x02, 0x02, 0x3E };
byte DA36[8] = { 0x02, 0x02, 0x02, 0x3E, 0x02, 0x02, 0x02, 0x02 };
//工
byte DA37[8] = { 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00 };
byte DA38[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE };
byte DA39[8] = { 0x00, 0x00, 0x00, 0x3F, 0x01, 0x01, 0x01, 0x01 };
byte DA40[8] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF };
//房
byte DA41[8] = { 0xF8, 0x00, 0xF8, 0x08, 0xF8, 0x28, 0x48, 0xF8 };
byte DA42[8] = { 0x04, 0x84, 0x84, 0x42, 0x42, 0x22, 0x32, 0x00 };
byte DA43[8] = { 0x3F, 0x00, 0x3F, 0x20, 0x3F, 0x00, 0x00, 0x7F };
byte DA44[8] = { 0x01, 0x1E, 0x20, 0x20, 0x20, 0x20, 0x28, 0x10 };
//インベーダー1
byte DA45[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte DA46[8] = { 0x10, 0x24, 0xF4, 0xDC, 0xFC, 0xF8, 0x10, 0x08 };
byte DA47[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte DA48[8] = { 0x08, 0x24, 0x2F, 0x3B, 0x3F, 0x0F, 0x08, 0x10 };
//インベーダー2
byte DA49[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte DA50[8] = { 0xC0, 0xF8, 0xFC, 0x9C, 0xFC, 0x60, 0xB0, 0x0C };
byte DA51[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte DA52[8] = { 0x03, 0x1F, 0x3F, 0x39, 0x3F, 0x06, 0x0D, 0x30 };
// ####### PACMAN character data ######
byte PAC1[8] = { 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFC };
byte PAC2[8] = { 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xC0, 0x00 };
byte PAC3[8] = { 0x00, 0x00, 0x03, 0x0F, 0x1F, 0x1F, 0x3F, 0x3F };
byte PAC4[8] = { 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, 0x0F, 0x03, 0x00 };
byte PAC5[8] = { 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xF8, 0xE0, 0x00 };
byte PAC6[8] = { 0x00, 0x00, 0xE0, 0xF8, 0xF8, 0xF0, 0xC0, 0x00 };
byte PAC7[8] = { 0x00, 0x00, 0x03, 0x0F, 0x1F, 0x1F, 0x3F, 0x3F };
byte PAC8[8] = { 0x3C, 0x3F, 0x3F, 0x1F, 0x1F, 0x0F, 0x03, 0x00 };
byte PAC9[8] = { 0x00, 0x00, 0xC0, 0xE0, 0xC0, 0x80, 0x00, 0x00 };
byte PAC10[8] = { 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xC0, 0x00 };
byte PAC11[8] = { 0x00, 0x00, 0x03, 0x0F, 0x1F, 0x1F, 0x3F, 0x3E };
byte PAC12[8] = { 0x3C, 0x3E, 0x3F, 0x1F, 0x1F, 0x0F, 0x03, 0x00 };
//##### Monster character data #####
byte MON1[8] = { 0x00, 0xC0, 0xF0, 0xF8, 0xE4, 0xC0, 0xCC, 0xCE };
byte MON2[8] = { 0xE6, 0xFE, 0xFE, 0xFE, 0xFE, 0x76, 0x62, 0x00 };
byte MON3[8] = { 0x00, 0x03, 0x0F, 0x1F, 0x39, 0x30, 0x33, 0x73 };
byte MON4[8] = { 0x79, 0x7F, 0x7F, 0x7F, 0x7F, 0x6E, 0x46, 0x00 };
byte MON5[8] = { 0x00, 0xC0, 0xF0, 0xF8, 0xE4, 0xC0, 0xCC, 0xCE };
byte MON6[8] = { 0xE6, 0xFE, 0xFE, 0xFE, 0xFE, 0xDE, 0x8C, 0x00 };
byte MON7[8] = { 0x00, 0x03, 0x0F, 0x1F, 0x39, 0x30, 0x33, 0x73 };
byte MON8[8] = { 0x79, 0x7F, 0x7F, 0x7F, 0x7F, 0x7B, 0x31, 0x00 };
#endif // LED_DATA_H
ヘッダファイルは、スケッチと同じ個所に置くと読み込んでくれます。