aitendo I2CマトリックスキットをArduino動かしてみました
aitendo のI2Cマトリックスキット(8x8) [K-8X8I2C1388]をArduinoで動かしてみました。
このキットはLEDのドライブにHT16K33-24Wを使っています。I2Cバス接続なので
少ない配線で8x8ドットのLEDを制御できます。
パーツ的にはこんな感じ
なぜかドットが四角くないですが良しとします。
組み立てですが、困ったことに基板上の4ヶ所の穴(基板左下の4つ並ぶ穴)がちゃんと空いて無くて
端子が差し込めませんでした。ピンセットでぐりぐりと拡張して広げました。
それ以外は問題なく組み立て完了。
やはり、キットを使った組み立ては自作よりも楽ちんです。
部品が少し余りましたが、これはいつものaitendoクオリティーなので問題なし。
基板の左上のピンでI2Cのアドレスの設定が出来るようです。
なのでこのキットを複数使えばドットマトリックスを増やせそうです。
Arduinoに繋げて動かしてみます。
ライブラリやサンプルソースの入手はaitendoの商品ページに情報の掲載がありますが、
以前作成したソースを流用して簡単な動作確認を行いました。
実際の動作の様子(デモはいつもの ”さいたま” です)
プログラムソース
#include <Wire.h> // アドレス #define HT_I2C_ADDRESS 0x70 // コマンド #define HT_CMS_DATA 0x00 #define HT_CMD_SYSSET 0x20 #define HT_CMD_BLINK 0x80 #define HT_CMD_BRIGHTNESS 0xE0 // System Setup レジスタ設定値 #define HT_SYSSET_OSC_ON 1 // Display setup 設定値 #define HT_BLINK_DISPLAY_ON B00000001 #define HT_BLINK_OFF B00000000 #define HT_BLINK_2HZ B00000010 #define HT_BLINK_1HZ B00000100 #define HT_BLINK_05HZ B00000110 // 表示パターン用バッファ(R16xC8) uint8_t buf[8]; // テスト用パターン('さ','い','た','ま') uint8_t msg_saitama[4][8] = { {0x08,0x08,0x7E,0x04,0x24,0x40,0x3C,0x00}, // さ {0x00,0x88,0x84,0x82,0x82,0x50,0x20,0x00}, // い {0x20,0xF0,0x2E,0x40,0x48,0x50,0x8E,0x00}, // た {0x08,0x7E,0x08,0x7E,0x08,0x7C,0x7A,0x00} // ま }; // HT16K33の初期化 void ht_init() { Wire.begin(); ht_system_Seup(HT_I2C_ADDRESS, HT_SYSSET_OSC_ON); // システムオシレータをONにする ht_display_setup(HT_I2C_ADDRESS,HT_BLINK_OFF) ; // 点滅表示周期の設定 ht_setBrightness(HT_I2C_ADDRESS,1); // 明るさの設定 } // SystemSetup Registerの設定 // (システムオシレータのモード設定) void ht_system_Seup(uint8_t addr, uint8_t p) { Wire.beginTransmission(addr); Wire.write(HT_CMD_SYSSET | p); Wire.endTransmission(); } // 明るさの設定 void ht_setBrightness(uint8_t addr, uint8_t p) { if (p > 15) p = 15; Wire.beginTransmission(addr); Wire.write(HT_CMD_BRIGHTNESS | p); Wire.endTransmission(); } // Display setup(点滅周期の設定) void ht_display_setup(uint8_t addr, uint8_t p) { if (p > 3) p = 0; Wire.beginTransmission(addr); Wire.write(HT_CMD_BLINK | HT_BLINK_DISPLAY_ON | p); Wire.endTransmission(); } // 表示パターンの送信 void ht_update(void) { // HT16K33 にデータ転送 Wire.beginTransmission(HT_I2C_ADDRESS); Wire.write(HT_CMS_DATA); for (uint8_t i = 0; i<8; i++) { Wire.write(buf[i]); Wire.write(0); } Wire.endTransmission(); } // バッファのクリア void ht_clear_buffer() { for (uint8_t i = 0; i <8; i++) buf[i] = 0; } // 表示のクリア void ht_clear() { ht_clear_buffer(); ht_update(); } // バッファの指定座標のON/OFF void ht_set_dot(int8_t x, int8_t y, uint8_t d) { if ( (x > 7) || (y > 7) || (x < 0) || (y < 0) ) return; if (d) buf[y] |= 0x80 >> x; else buf[y] &= ~(0x80 >>x); } // バッファ上の指定座標に8x8パターンをセット(負座標指定可能) void ht_write_at(uint8_t* p, int8_t x, int8_t y) { int8_t i; if ((x > 7) || (y > 7) || (x < -7) || (y < -7) ) return; for (i = 0; i <8; i++) { if ((i+y >= 0) && (i+y < 8) ) { if (x >= 0) buf[i+y] |= p[i]>>x; else buf[i+y] |= p[i]<<(-x); } } } // バッファ左スクロール void scroll() { for (uint8_t i = 0; i < 8; i++) { buf[i]<<=1; // 各行を左にシフトする } } // 1文字左スクロール挿入 void ht_scrollIn(uint8_t* p, int wt) { int8_t i,j; for (j = 0; j < 8; j++) { for (i = 0; i < 8; i++) { buf[i]<<=1; } ht_write_at(p, 7-j, 0); ht_update(); delay(wt); } } void setup() { ht_init(); ht_clear(); } // デモ1 ドット表示チェック void demo1() { ht_clear(); for (int8_t d = 1; d >= 1; d--) { for (int8_t y = 0; y <8; y++) { for (int8_t x = 0; x <8; x++) { ht_set_dot(x, y, d); ht_update(); delay(75); } } delay(500); } for (int8_t i = 0; i <8; i++) { scroll(); ht_update(); delay(100); } } // デモ2 パターンを指定座標の表示 void demo2() { ht_clear(); for (uint8_t i = 0; i <4; i++) { ht_clear_buffer(); ht_write_at(msg_saitama[i], 0, 0); ht_update(); delay(1000); } } // デモ3 パターンをスクロールイン表示 void demo3() { ht_clear(); for (uint8_t i = 0; i <4; i++) { ht_scrollIn(msg_saitama[i], 150); } } void loop() { demo1(); delay(1000); demo2(); delay(1000); demo3(); delay(1000); }
次に美咲フォントを利用してちょっとした日本語表示をやってみます。
aitendo I2CマトリックスキットをArduino動かしてみました (2) に続きます。
« ATtiny13Aの省電力化を試みる | トップページ | IchigoJamでaitendoのI2Cマトリックスキットを動かしてみました »
「arduino」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
「表示器制御関連」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用 美咲フォントライブラリを更新しました(2024.03.21)
- Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる(2024.03.14)
- Raspberry Pi Pico MicroPython用のマルチフォントライブラリ(2023.02.09)
- MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示(2023.02.08)
« ATtiny13Aの省電力化を試みる | トップページ | IchigoJamでaitendoのI2Cマトリックスキットを動かしてみました »
コメント