R3.9.8 マトリックスLEDモジュールを使う
M5Stackで動かそうと思っていたけれど、うまくいかなかったのでマイクロビットでやってみた。拡張機能で「max7219」で検索したら出てきたことがきっかけ。ブロックを見たり説明を読めば大体のことは分かると思います。あとでやったM5Stackと比べるとかなり簡単にできました。
ここでアルファベットのスクロールを見ることができます。
漢字もそれなりに表示できます。
漢字とスクロールに関しては、M5Stackのページで説明します。
R1.8.2 続々々:3連7セグメントLEDを使う
注文したエッジコネクタが届いたので作業開始。
最初にエッジコネクタの細工。マイクロビットの5つの大きな穴のうち使用するP0(固定用)・P2(心拍センサー用)・3V・GNDに固定用ボルトを通すので削る。そこには、ピンが入っているのでこれらを抜き取る。抑えの蓋が勝手に外れて作業しやすくなったが、元に戻すときにはなかなかはまらずイライラした(^^;)
加工したエッジコネクタを2つ用意する。一つには7セグの基板を差し込み、もう一つにはマイクロビット本体を差し込む。裏と表。
これらを合体する。心拍センサー&電源基盤とマイクロビット本体は以前からついている10mmのスペーサーで間を保つ。マイクロビットと7セグ基板はエッジコネクタ―におさまっているので、7セグ基板側から3mmの12mm皿ネジで固定する。この時、上側が斜めに狭まってきたので長さ6mmの樹脂スペーサーを入れた。今のところ挟んでいるだけでネジ止めはしていない。
前からと後ろから見た図。なかなかコンパクトになった。
上から見た図と下から見た図。この下から見たときの図で、7セグ基板の入ったエッジコネクタ―とマイクロビットが入ったエッジコネクタ―の同じピン同士を半田付けして完成となる。単純なピンは同じもの同士でいいが、SPIやI2Cはどう接続するかはきちんと確認してからにしたい。
取り敢えず同じピン同士半田付けた。今回必要なのは、中央右寄りの4セットのピン。P14のMISOは必要ないけれど、必要になる場合もあるかもしれないので半田付けた。右端のI2C端子も半田付け必要かもしれない。活用範囲が広がる!、だろう? でも、40年以上やっているのに半田付け技術は上手にはなっていません(^^;)
スイッチオン! ありゃ?? 動いた。ボタン電池1個で動いています。大丈夫なんだろうか? マイクロビット本体に支障はないのかな? あっても構いません。動いてくれさえすれば.....
そうそう、これで終わりではないのでした。裏に背負っている心拍センサーが光っているけど、カウンタープログラムには不参加なのです。7セグと心拍センサーを連動させなくては。これは後日。
R1.8.1 続々:3連7セグメントLEDを使う
7セグメントを3つ並べてマイクロビット風基板に固定した。表から見たときと裏から半田付けするときに、当然のこと反転してしまうので、どこがどの端子になるかが判断が怪しくなる。きちんと裏表の回路図を製図すればいいのだが、面倒だし老化防止の為に頭で判断して作業する。
うまくいけばいいのだが、配線ミスをすると動作しないし、折角の7セグをダメにしてしまうかもしれない。
今回は、うまく動作しないので落ち込んだ。遅まきながら裏表の回路図を作図し、ショートしていないかも虫眼鏡で確認した。
どこも悪くない。結局、この基盤とマイクロビットを結ぶ際に使ったコネクターの付いたジャンパーワイヤーが不安定だったようだ。下図のようにそっけないジャンパーワイヤーに変更してみると問題なく動作した。めでたしめでたし。
5本の配線で動作するのだから便利なことこの上ない。ただマイクロビットのSPI端子がもう少し使いやすい大きさで配盤されていればいいのだが。I2C端子も。
R1.7.30 続:3連7セグメントLEDを使う
7セグメントLEDは8つのLEDが一つのセットになっている。当然のことに、それぞれがきちんと指定されているし、10進だと下のようにA〜GとDPが区別されるようになっており、一つの7セグメントLEDでいろいろな数字や記号を表示できる。
とりあえず、0〜9までを10進で表示するには、下のような数字をSPIに書きだしてやればいい。(ということが後で分かった)
というのも、後で掲示する画像のプログラムで、「SPI書き出す」に1から順に数字を書きだしてやったら、7セグのLEDがあちこち点灯したからだ。「1」を書きだしたら一番上の横のセグメントが点灯したし、「2」を書きだしたら右上のセグメントが点灯。「3」を書きだしたら上と右上のセグメントという具合。「なあ〜んだ」ということで得心したのだった。
ところで、プログラムの方はどうだったかというと、SPIに関わるブロックを取りだして、「最初だけ」で(初期設定ですね)必要なことを設定してやる。端子は回路の通り。ビット数やモード、周波数はデフォルト。
ArduinoIDEのプログラムを見乍ら、latchにつないでいるP16端子に0と1を出力する間に、SPI書き出しをすることが重要だなと考えてやってみると、なんと思い通りの数字が左に流れていったのでした。
それなら、3連の繰り返し文でくくってやればArduinoIDEと同様のことができると見込んでやってみると、確かにカウントアップしていったのです。
ありゃ、ブロックでもできるんだ。久しぶりに感動しました。
でも、数字が止まらない! これからまた、ネットで解決策を見つけなければ。
と思いながら、何気に気が付いた。Aボタンを押したときにカウントアップ表示をさせてみよう、と。数値をSPIに書き出すと、それが次々と左にシフトしていくのではなかったかな? と。(違うかな?)だから、P16に0を出力してから、100桁→10桁→1桁と順番に、しかも一気に書き出してからP16に1を出力すると、次にSPI書き出しするまで、数値の表示は保持されるのだ。
実際にうまくいったので、あとは心拍計と連動するようにブロックを組んでやればいい。
組み立てについては、ブレッドボード2枚になっているが、今日micro:bitエッジコネクタを4個注文した。マイクロビットと7セグ3連を載せたマイクロビットと同等のボードを差して組み合わせると、SPI端子を結合できるだろうという目論見だ。一回り大きくはなるが良しとしようか。
R1.7.29 3連7セグメントLEDを使う
心泊センサーがうまく動いたので、7セグメントLEDで表示したいなと思っている。探してみると、秋月電子通商さんで「赤色7セグメントLEDシリアルドライバモジュール 完成品」というものを発見した。以前から知ってはいたが、SPI接続で、3本の信号線で表示できるし、いくつでも並べられるということを改めて知り、購入した。キットでも良かったが、面倒なので完成品を購入(^^;)
商品ページにあったArduinoスケッチを使った。まずは1個の場合をやってみて、あれこれネットで探りながら取り組んでみると、それなりにうまくいった。そこで、3連にしてみた。0から3けた999までカウントアップするというプログラム。
3連の7セグLEDとマイクロビットとの接続は下図のようにした。
プログラムはArduinoIDEを使う。商品ページにあったスケッチではうまく動かなかったので、次のようにした。
#include
int sck = 13;
int latch = 16;
int sdi = 14;
int scroll_speed = 100;
const byte digits[] = {
0x7e,
0x30,
0x6d,
0x79,
0x33,
0x5b,
0x5f,
0x70,
0x7f,
0x7b,
};
void setup() {
pinMode(latch, OUTPUT);
pinMode(sck, OUTPUT);
pinMode(sdi, OUTPUT);
SPI.begin();
SPI.setBitOrder(LSBFIRST);
SPI.setDataMode(0);
}
void loop() {
for (int k = 0; k < 10; k ++) {//100の桁
for (int j = 0; j < 10; j ++) {//10の桁
for (int i = 0; i < 10; i ++) {//1の桁
//SPI
digitalWrite(latch, 0);
SPI.transfer (digits[k]);//100の桁
SPI.transfer (digits[j]);//10の桁
SPI.transfer (digits[i]);//1の桁
digitalWrite(latch, 1);
//
delay(scroll_speed);
}
}
}
}
自分としてはSPIをよく知らないでやっているので、どれをどうつないでいいか試行錯誤でした(^^;) 今になって、MOSIがMasterOutSlaveInであることを知りました。
次に、LEDは光るけれどメチャクチャな表示になってしまうことにメゲる。で、ネットサーフィンして上記のconst byte digitsに辿り着く。ようやく3桁でカウントアップすることができました。
実際に動いた時の実態配線が下の画像。
さて、問題点は以下の通り。
H30.9.12 7セグメントLEDを使う
本体の5×5LEDで数値は表示できるので意味はないのだけれど、練習でやってみた。アノードコモンの7セグを使っている。
7セグメントLEDは8つのLEDの集合体で、上部に5本、下部に5本の端子が出ている。上下の中央はそれぞれがVccになっているので、残りの8本がどの位置のLEDなのかをはっきりさせないといけない。そして、数字を構成するときには、どのLEDを点灯させるか、マイクロビットのプログラムでは、P0からP22のどれにつなげるかもはっきりさせないといけない。きちんと、図にしておけば間違いがないのだが、エィ! とやってしまって妙な表示になる。
それでも、あれこれやって表示できた。本体の数字と同じにしたが、乱数で出したりABボタンと連携したりして何かに使えるか?
本体のLEDによる数字は見にくいので、実用的かも。もちろん、4桁になれば使えますね。