« ナレーション入りの音楽からナレーションを抜き出す | Main | 玄関先にある郵便受けが開いた回数を表示する »

07/07/2019

Tact buttonを押した回数をLED Matrix display 8×8 dots (MAX7219) に表示する

Tact-sw-counter-with-8x8-dot-matrix-dispImg_20190707_125127Img_20190707_132210 タクトボタンを押した回数を、LED Matrix display 8×8 dots に表示させたいと思い作ってみた。
表示器は、8×8 dotsが1つなので、数値は「9」迄しか表示できない。ただし、表示させてみたところ、DOSのマニュアルにあるコードページ437 が使われているので、タクトスイッチを47クリックしてようやく「0」になる。それでカウンターに初期値「48(=0)」を入れ、タクトスイッチが押される毎に、コードを進めて、カウント文字を表示することにした。
int icount = 48;
となっているのは、このためであり、Matrix display に「0」と表示させるための小技である。
従って、タクトボタンを押す回数が進めば、表示は数字ではなく、コード表にある文字に変わってゆく。
いまのところ、これを使う表示では、数値が2桁になることは無いだろうと思っているが、カウント数が増えれば、表示方法も考える必要がある。

部品は下記のとおり。
① LED Matrix display 8×8 dots ・・・ amazon で 購入 @257
② Arduino NANO ・・・ amazon で 購入
③ tact button
④ 単線cable

1)LED Matrix display 8×8 dots は、私がブレッドボードに取り付けたい方向にピン差し込み部分が無いので、
ピンの曲がりをラジオペンチで直して、半田ごてを使ってピンの半田を溶かしながら、素早くスライドさせて、ブレッドボードに差し込めるようにした。
ブレッドボード上の配線は、ブレッドボードに這わせるように引いたので、線の繋がりが見えにくいかもしれない。

Matrix display の各端子とArduinoのピンとの接続は下記のように行った。

Matrix Display    Arduino NANO
VCC ・・・・・・・・・ 5V
GND ・・・・・・・・・ GND
DIN ・・・・・・・・・ D11
CS  ・・・・・・・・・ D10
CLK ・・・・・・・・・ D13

Tact Switch
左下pin ・・・・・・・ D7
左上pin ・・・・・・・ GND

2)タクトボタンを押すと、チャタリングが入ってしまい、数値が順に表示されなくなるので、
 gazettelabo「●arduino(アルディーノ) 押しボタンスイッチ」を参考にさせて戴き、チャタリング対策を行った。

3) 表示をリセットするには、Arduino NANO の中央部にある「RESET」を押せば、再起動して、表示もゼロからカウントするので、それで良しとした。

その他、ディスプレイ表示では、データが文字(character)でないとダメなので、カウントしている数値(numeric)を文字に変換する方法で手間取った。ようやく文字に変えたつもりが、表示された文字は、ASCIIのIBMコードになっている! それで、数値を示すコードに変更するために、カウント値に 48を加える必要があった。


《sketch》


// http://euc.jp/i18n/charcode.ja.html for character code
// http://gazettelabo.seesaa.net/article/447403643.html
// Reset should be push on reset button on Arduino NANO
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
const int numberOfHorizontalDisplays = 1;
const int numberOfVerticalDisplays = 1;
const int pinCS = 10; // Cs - SS (Pin 10)
// Din - Mosi (Pin 11)
// Clk - Sck (Pin 13)
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
const int wait = 50;
const int count = 7;
int icount = 48;
char c;

void setup() {
matrix.setIntensity( 1 ) ; // Adjust the brightness between 0 and 15
matrix.setPosition( 0, 3, 0) ;
matrix.setRotation( 0, 3) ; // rotation position
Serial.begin(9600);
pinMode(count, INPUT_PULLUP);
matrix.fillScreen(LOW);
c = char(icount);
matrix.drawChar( 2, 1, c, HIGH, LOW, 1);
matrix.write();
}

void loop() {
if ( digitalRead ( count ) == 1)
icount = icount + 1 ;
while ( digitalRead ( count ) == 1) {
delay (wait);
}
c = char(icount);
Serial.print("icount ");
Serial.print(icount);
Serial.print(" = ");
Serial.println(c);

matrix.drawChar( 2, 1, c, HIGH, LOW, 1);
matrix.write(); // Send bitmap to display
delay(wait);
}



« ナレーション入りの音楽からナレーションを抜き出す | Main | 玄関先にある郵便受けが開いた回数を表示する »

Arduino」カテゴリの記事

Comments

Post a comment

Comments are moderated, and will not appear on this weblog until the author has approved them.

(Not displayed with comment.)

« ナレーション入りの音楽からナレーションを抜き出す | Main | 玄関先にある郵便受けが開いた回数を表示する »

October 2019
Sun Mon Tue Wed Thu Fri Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Recent Trackbacks

無料ブログはココログ