GR-CITRUSでAdafruit 8x8 matrix LEDを使う


少し前にAQM0802を使えるようになったので、勢いにのって他のI2C部品を使えるようにしてみようとおもった。
見た目で派手だし、手持ちでいくつかあるのでAdafruitのHT16K33をつかった8x8 LED Matrixをターゲットにしてみた。
最初はfirmwareにAdafruit LEDBackpackのC++のソースを移植して組み込んでみたんだけど、面倒だし使わないときでもfirmwareデカくなっちゃうという問題になるし、無駄に領域圧迫してもな...とおもってArduinoでライブラリを経由せず扱っているのを参考に、Pure Rubyで書いてみた。

前提

使用ハード

Adafruit 1.2' 8x8 LED Matrix
https://www.switch-science.com/catalog/1502/

接続

GR-CITRUS pin0,1でI2C Wire1を使うことにした。(WA-MIKANの上にのっかっているとpin7,8のWire3は使えないらしい)

プログラムの作成

Rubyらしくクラスとして定義されてるのでインスタンスを作成して、ヒョヒョイっと動かせます。

sample.rb
m = Matrix_8x8.new( {:port=>3, :addr=0x70} )
m.set_blink_rate(0)
m.set_brightness(15)

m.buffer = [
  '11111111',
  '10000001',
  '10000001',
  '10000001',
  '10000001',
  '10000001',
  '10000001',
  '11111111'
]
m.write_display

ライブラリ後半あたりがサンプルコードになってます。

デモ

https://www.instagram.com/p/BNjj-FHhPFH/
https://www.instagram.com/p/BNjoI1gB40U/

雑記

朝から昼過ぎまでC++のソースをせこせこ移植してて全然動かないところ、ふとBreakout基板をみたらLED部分が逆に刺さってた orz
Rubyで書き始めて順調だとおもったけど、shift部分書こうとしたらArray#flattenが無くて泣く;_;)

firmwareにrequire,Time,Arrayあたりは組み込んでほしいナリ...