Arduinoは取得したデータをシリアルモニタなどで確認することができますが、
その場ですぐ知りたい時に7セグは便利かもしれないですね。
ということで秋月電子で購入しました。
7セグLEDとシリアル通信可能なドライバが付属したキットということではんだ付けが必要です。
初めてのはんだ付け、楽しいけど難しかったです。
はんだミスをしてしまい、動作させると一部光らなかったこともありました。なんとか直りましたが。
回路
説明書はこちら(秋月電子)
説明書ではセグを2つ使っていますが、1つの場合はこんな感じになります。
少しピンがたくさんあって複雑そうですね。 ちなみに5V電源とGNDは繋げなくても光りました。光量はもちろん減りますが。
コード
秋月電子のサンプルコードを参考にしました。
#include<SPI.h> int sck = 13; int latch = 10; int sdi = 11; int d_time = 300; const byte digits[] = { 0b11111100, // 0 0b01100000, // 1 0b11011010, // 2 0b11110010, // 3 0b01100110, // 4 0b10110110, // 5 0b10111110, // 6 0b11100000, // 7 0b11111110, // 8 0b11110110, // 9 }; void setup() { pinMode(latch,INPUT); pinMode(sck, OUTPUT); pinMode(sdi, OUTPUT); //SPI通信の準備 SPI.begin(); //ビットオーダを指定します(LSBFIRST or MSBFIRST) SPI.setBitOrder(LSBFIRST); //データモードの設定 SPI.setDataMode(0); } void loop() { //digits分ループさせます for (int i = 0; i < 10; i ++) { //latchのON OFFで更新します digitalWrite(latch, 0); //引数をSPIで送信します SPI.transfer (digits[i]); digitalWrite(latch, 1); //一定時間待つ = 表示時間 delay(d_time); } }
byte配列はA,B,C,D,E,F,G,DPの順になっています。(例:0b11111100で0に見える)
詳しくはLED部の仕様書に乗ってます。(リンクは赤月電子)
11ピンと13ピンは使用していないのに繋げているように見えますが、Arduino UNOでのSPI通信では
10ピン:SS
11ピン:MOSI(SDI)
12ピン:MISO
13ピンSCK
となっているため必要です。
ビットオーダーの指定
SPI.setBitOrder(LSBFIRST);
LSBFIRSTとMSBFIRSTがあります。
SPIで送信する配列の順番であり、ABCDEの配列があったとき、
LSBFIRSTならABCDE
MSBFIRSTならEDCBA
の順番で処理します。
データモードの指定
SPI.setDataMode(0);
SPIのアイドリング状態と処理タイミングを決めます。
SPI_MODE | アイドリング | 処理タイミング |
---|---|---|
0 | Low | 立ち上がり |
1 | Low | 立ち下がり |
2 | High | 立ち下がり |
3 | High | 立ち上がり |
SPI送受信
SPI.transfer (digits[i]);
1バイトの引数を送信します。
完成
うまくいくと数字が表示されます。
0-9を順番にひたすらループします。
7セグLEDだけだと回路が複雑になりますが、シリアル通信を行うことでシンプルに実装できました。