ほっぴーです。今回は、Arduino UNO R4 Wifiに最初から基板上に搭載されているマトリックスLEDたちを光らせる方法についてご紹介します。
マトリックスLEDってなに?という方向けに最初にご紹介しておきます。このようなLEDの塊です。
縦に4本くらいLEDが点灯しているのが見えると思います。Arduino UNO R4 Wifiには、このように縦8個、横12個のLEDが並んでいます。行列のように並んでいることから、マトリックスLEDと呼ばれます。
このマトリックスLEDは、好きなようにどこを点灯させるかプログラミングすることが可能です。文字を書くのもよし。絵をかくのも良し。8×12のドットで表現できるので想像力が膨らみますね!
マトリックスLEDというと、どこのLEDを点灯させるのかの指定が難しいor面倒と思いがちですが、実は直感的に指定できる方法があるんです。さすがArduino。今回はそんな方法もご紹介しつつお好きな表示ができるようになる方法を解説します。
※注意※今回のお話はArduino UNO R4 Wifiの基板上のマトリックスLEDを光らせる話なので、互換機を含めて他のArduinoシリーズでは実現できません。ご了承ください。
Arduino UNO R4 Wifi内蔵のマトリックスLEDを自由自在に操る方法がわかる
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
本ブログはアフィリエイトを用いた広告を掲載しています。
必要なものはArduino UNO R4 Wifiとケーブル、PCだけ
今回必要になるのは、Arduino UNO R4 Wifiとそれをつなげるケーブル、PCこの3点だけです。ほかに必要になるものは無いので、手軽に試してみることができます。
どこを光らせるかテストしてみる方法
方法は大きく分けて3つ紹介します。コードを一切書かずに試す方法から、LEDの番地を指定する方法まで紹介します。
とりあえず直感的に光らせてみる方法
まずは直感的に光らせてみましょう。直感的にどこを光らせるか決めたほうが楽しいですよね!?というわけで次のような手順で直感的に光らせることができます。
コードをコピペして下準備をする
まずはこちらのコードをコピペしてArduino UNO R4 Wifiに書き込んでください。
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
void setup() {
Serial.begin(115200);
matrix.begin();
}
uint32_t frame[] = {
0, 0, 0, 0xFFFF
};
void loop() {
if(Serial.available() >= 12){
frame[0] = Serial.read() | Serial.read() << 8 | Serial.read() << 16 | Serial.read() << 24;
frame[1] = Serial.read() | Serial.read() << 8 | Serial.read() << 16 | Serial.read() << 24;
frame[2] = Serial.read() | Serial.read() << 8 | Serial.read() << 16 | Serial.read() << 24;
matrix.loadFrame(frame);
}
}
こちらのコードは、以下のようにArduino IDEのスケッチ例にも収録されています。
このコードを書く理由ですが、次の手順のArduino LED MATRIX EDITORでリアルタイムにマトリックスLEDを光らせるための準備のためです。コードの中身は、シリアル通信してPCとやり取りをするものです。深く考える必要はとりあえずないです。まずはコピペしてArduino UNO R4 Wifiに書き込んでください。
Arduino LED MATRIX EDITORを使って光らせる
先ほどのコードを書き込めたら、次はArduino LED MATRIX EDITORにアクセスしましょう。アクセス先はこちらです。
こちらに飛ぶと、このような画面になります。
やることはこのArduinoっぽいアイコンを押すことです。
すると、こんな感じでライブビュー用のスケッチ書いた?と聞かれるのでアップロードしたよ。とボタンを押して、
次に出てくるウィンドウでTRYをクリックしましょう。
すると、このようにブラウザからArduinoにアクセスして良いか聞かれますので、選択して接続を押しましょう。
するとなんと…もう自由にArduino UNO R4 Wifiとこの画面がリンクします。なので例えばこのように線を引くと…
このようにArduino UNO R4 Wifi側でも同じようにリアルタイムでLEDが光ります。
エディタ上でリアルタイムで直感的に光らせることができるのは結構面白いです!ぜひ遊んでみてください。
直感的に作り込んでそのあと光らせる方法
さて、直感的に絵をかいてこれを通常のArduinoのスケッチの中で使いたいな…と思った場合、一工夫が必要になります。3ステップで解説します。
好きな絵を完成させる
お好きなように心ゆくまで作り込んでください。アイコンについては恐らく説明はいらないでしょうが、一番上のモードで線を書いて、その下が消しゴム。残りはundoや全消しなどです。
絵の情報をコードとしてダウンロードする
さて、作り込んだ絵をArduinoに表示させるためには、今書いた絵のデータが必要になります。具体的にはLEDがどこが光ってどこが光らないかの情報ですね。
この情報をダウンロードするには、こちらをクリックします。
すると、ヘッダーファイルがダウンロードされますので、お好きなエディタで開いてみてください。メモ帳でも開くはずです。メモ帳で開いたのがこちらです。
大事なのは、0x~~~で書かれた4行です。この4行が、LEDのどこが光ってどこが光らないかの指定している内容です。つまりこの4行があなたが書いた絵の情報だと思ってください。
ダウンロードしたデータをスケッチに入れ込む
最後に、ダウンロードした4行のデータをどうやってご自分のコードに入れ込むかの解説です。
まず、簡単なのはこちらのコードをコピペしてください。
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
void setup() {
Serial.begin(115200);
matrix.begin();
}
const uint32_t happy[] = {
0x19819,
0x80000001,
0x81f8000
};
const uint32_t heart[] = {
0x3184a444,
0x44042081,
0x100a0040
};
void loop(){
matrix.loadFrame(happy);
delay(500);
matrix.loadFrame(heart);
delay(500);
}
こちらは、笑顔の絵と、ハートの絵を500cSecで切り替えるコードです。何か見覚えがある箇所はありませんか?
そうです。0x~~~のところですね。先ほどダウンロードした絵の情報をこちらの0x~~~に入れ替えてあげればいいんです。
例えば、heart[]の{}の中にある0x~~~を先ほどダウンロードした0x~~~に入れ替えて、Arduinoに書き込みしてあげれば、笑顔の絵と、あなたが作った絵が500mSec毎に切り替わります。もうここまでくれば何となくアレンジできそうですよね??
※ただし、Arduino MATRIX EDITORを開いたままだと、Arduinoの制御がブラウザに取られていますので書き込みできません。スケッチを書き込むときはArduino LED MATRIX EDITORは閉じましょう。
補足:番地指定の方法
さて、ここまでは何も考えずにできる話でしたが、0x~~~ってなんなのよ?という話も必要かと思いましたので少し補足します。
まず、前提として、縦8マス、横12マスのLEDが付いていますから、指定する方法としては、一個ずつ指定するのが真っ先に思いつくかと思います。イメージとしてはこんな配列を指定してあげる方法です。
byte frame[8][12] = {
{ 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
ただこれだと面倒ですよね…0と1をどんだけ書かないといけないんだと…
なのでそこを解決するために先ほどの0x~~~が登場します。先ほどの0,1で表示させる方法は、2bit表記でしたが、32bit表記にすることでこれを解決しています。
8×12マスなので情報としては96個の番地で0or1を指定するわけですが、32bitで指定することで、96/32=3で、3行で表記することが可能になる。という流れです。
つまり、1個目の番地から、32個目の番地までを1つの区切りとして0x~~~と指定して、33個目から64個目までをまた0x~~~と指定して…ということです。
ですから、先ほどの0,1でずらっと並べた配列と、0x~~~の3行は変換して同じ値を表示していると思ってください。
今回のまとめ
今回はArduino UNO R4 Wifiに最初から搭載されているマトリックスLEDを点灯させる方法について解説しました。
仕組みさえわかってしまえばそこまで難しくないですよね?ポイントは光らせる番地の指定方法です。まずはArduino LED MATRIX EDITORで絵を作って、その番地をダウンロードして、ご自身の使いたいように入れ込む。
これだけマスターしてしまえばとりえず表示・点滅・切り替えはできます。スクロールしたり、アニメーションにしたりする方法は後ほどまたご紹介しますのでお楽しみに!
コメント