« @nifty ココログでアップロードしたソースリストを綺麗に見せる方法 | Main | NodeMCU1.0 or ESP32 Dev Module を使って 8x8 dotmatrix LEDでデジタル時計をつくる »

05/06/2020

14segment LED を使ってみる

Img_20200506_092159 Img_20200506_092219 Img_20200506_092251
0.54インチスクリーン、14セグメントの4桁LEDディスプレイをArduino NANO制御ロボットの表示用に購入した。
4桁LED は、I2Cコントロール仕様で、6個セットで1832円(Amazonで購入)。1個約300円。

電源を入れて気づいたのは、左2桁が赤で右2桁がオレンジの表示! 寸法、14segmentとI2Cインターフェイスを使用と書いてあったので、それ以上深く考えずに購入。他の項目には注意が及んでいなかった。

4桁LEDディスプレイのドライバ用のピンは5本ある。普通4本でしょ・・・とよく見ると、ピンの配列は次のようになっている。
SCL、SDA、GND、VCC、Vi2C。 Vi2C って何だ! 電源用らしい。

ここに来てから、14segmentディスプレイの使用方法に関する情報を調べたが・・・ほとんど見つからない。「HT16K33」をキーワードにネット上を探し回って、購入したものと同じLEDディスプレイの写真を表示しているブログを発見し、参考にさせて戴いた。
https://draeger-it.blog/arduino-lektion-108-14-segmentanzeige/?cn-reloaded=1&cn-reloaded=1
「7セグLED表示 その8 4文字-HT16K33② (https://www.denshi.club/cookbook/output/led/7seg/7led54-ht16k33.html)」


このLED購入の目的は、arduino NANOを使った超音波センサー付きロボットの状態を表示するため。これまでは、7セグメントのものを使って表示していたが、7セグメントでは文字表示が分かり難い。もう少し分かり易い表示にしたいので、これを買ってみた。

arduino NANOのピン配列で、SCLとSDAのピンを調べてみる。
https://i.pinimg.com/originals/c2/c2/e6/c2c2e68f8dab93647c3a39b04d61fda5.jpg

これを見ると、SCLは A5ピン。 SDAは A4ピンに接続すればいい。

購入した14segmentのLEDにピンを半田付けして、
そして、ブレッドボードに、Arduino NANO とジャンパーピンを接続して・・・ 

このようにジャンパーピンを配置してみた。

さて、sketch であるが・・・
4桁のLEDは、次にように目的別に表示するようにしたい。
左から、
1桁目:超音波センサの向いている方向(L=左方向、F=前方、R=右方向)
2~4桁:超音波センサーで検出した空間距離をcm値で表示
     例えば、 50 ならば、50cmという具合に・・・
     1mを越える場合もあるので、3桁分を用意した。
数値が1桁ならば、数値は右に詰めて表示し、左側の桁部分には、ゼロを表示する。
数値のゼロを置いて表示させたが、見栄えが良くないので、小文字の「o(オー)」を表示する事にした。

数値の文字長さを調べて、「case文」を使い、桁数に合わせ表示を切り替えるようにした。
数値が1桁なら、LEDの右端(4桁目)に数値を表示し、2桁目と3桁目には「o」を入れて表示する。
数値が2桁なら、LEDの3桁目と4桁目を使って数値を表示し、左から2桁目には「o」を入れて表示する。
数値が3桁なら、LEDの2桁目から4桁目を使って数値を表示する。
もしそれ以外の数値が入力されたら、defaultで、2桁目から4桁目には「*」を表示させる。

Sketch は、表示テスト用として使ったものなので、少し長めのdelay(3000)を入れて確認を容易にした。

Sketch の後半部分は、robot の判断内容を表示するもので、「Back(後退)」「Stop(停止)」「FWD(前進)」という内容を表示させようとした。

《Sketch》

#include <Wire.h>
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
int jgo;
Adafruit_AlphaNum4 alpha4 = Adafruit_AlphaNum4();
void setup() {
alpha4.begin(0x70); // pass in the address
alpha4.setBrightness(1);
// -------------------------------------------------------------
alpha4.clear();
alpha4.writeDisplay();
int inum = 2;
jgo=String(inum).length();
switch(jgo)
{ case 1:
alpha4.writeDigitAscii(1, 'o');
alpha4.writeDigitAscii(2, 'o');
alpha4.writeDigitAscii(3, String(inum).charAt(0) );
break;
case 2:
alpha4.writeDigitAscii(1, 'o');
alpha4.writeDigitAscii(2, String(inum).charAt(0) );
alpha4.writeDigitAscii(3, String(inum).charAt(1) );
break;
case 3:
alpha4.writeDigitAscii(1, String(inum).charAt(0) );
alpha4.writeDigitAscii(2, String(inum).charAt(1) );
alpha4.writeDigitAscii(3, String(inum).charAt(2) );
break;
default:
alpha4.writeDigitAscii(1, '*' );
alpha4.writeDigitAscii(2, '*' );
alpha4.writeDigitAscii(3, '*' );
}
alpha4.writeDisplay();
delay(3000);
// -------------------------------------------------------------
alpha4.clear();
alpha4.writeDisplay();
inum = 15;
jgo=String(inum).length();
switch(jgo)
{ case 1:
alpha4.writeDigitAscii(1, 'o');
alpha4.writeDigitAscii(2, 'o');
alpha4.writeDigitAscii(3, String(inum).charAt(0) );
break;
case 2:
alpha4.writeDigitAscii(1, 'o');
alpha4.writeDigitAscii(2, String(inum).charAt(0) );
alpha4.writeDigitAscii(3, String(inum).charAt(1) );
break;
case 3:
alpha4.writeDigitAscii(1, String(inum).charAt(0) );
alpha4.writeDigitAscii(2, String(inum).charAt(1) );
alpha4.writeDigitAscii(3, String(inum).charAt(2) );
break;
default:
alpha4.writeDigitAscii(1, '*' );
alpha4.writeDigitAscii(2, '*' );
alpha4.writeDigitAscii(3, '*' );
}
alpha4.writeDisplay();
delay(3000);
// -------------------------------------------------------------
alpha4.clear();
alpha4.writeDisplay();
inum = 123;
jgo=String(inum).length();
switch(jgo)
{ case 1:
alpha4.writeDigitAscii(1, 'o');
alpha4.writeDigitAscii(2, 'o');
alpha4.writeDigitAscii(3, String(inum).charAt(0) );
break;
case 2:
alpha4.writeDigitAscii(1, 'o');
alpha4.writeDigitAscii(2, String(inum).charAt(0) );
alpha4.writeDigitAscii(3, String(inum).charAt(1) );
break;
case 3:
alpha4.writeDigitAscii(1, String(inum).charAt(0) );
alpha4.writeDigitAscii(2, String(inum).charAt(1) );
alpha4.writeDigitAscii(3, String(inum).charAt(2) );
break;
default:
alpha4.writeDigitAscii(1, '*' );
alpha4.writeDigitAscii(2, '*' );
alpha4.writeDigitAscii(3, '*' );
}
alpha4.writeDisplay();
delay(3000);
// -------------------------------------------------------------
// display text Back
alpha4.writeDigitAscii(0, 'B');
alpha4.writeDigitAscii(1, 'a');
alpha4.writeDigitAscii(2, 'c');
alpha4.writeDigitAscii(3, 'k');
alpha4.writeDisplay();
delay(3000);
// -------------------------------------------------------------
// display text Stop
alpha4.writeDigitAscii(0, 'S');
alpha4.writeDigitAscii(1, 't');
alpha4.writeDigitAscii(2, 'o');
alpha4.writeDigitAscii(3, 'p');
alpha4.writeDisplay();
delay(3000);
// -------------------------------------------------------------
// display text Stop
alpha4.writeDigitAscii(0, 'F');
alpha4.writeDigitAscii(1, 'W');
alpha4.writeDigitAscii(2, 'D');
alpha4.writeDigitAscii(3, '*');
alpha4.writeDisplay();
delay(3000);
// -------------------------------------------------------------
// display text May
alpha4.writeDigitAscii(0, '*');
alpha4.writeDigitAscii(1, 'M');
alpha4.writeDigitAscii(2, 'A');
alpha4.writeDigitAscii(3, 'Y');
alpha4.writeDisplay();
delay(3000);
}
void loop() {
}

« @nifty ココログでアップロードしたソースリストを綺麗に見せる方法 | Main | NodeMCU1.0 or ESP32 Dev Module を使って 8x8 dotmatrix LEDでデジタル時計をつくる »

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.)

« @nifty ココログでアップロードしたソースリストを綺麗に見せる方法 | Main | NodeMCU1.0 or ESP32 Dev Module を使って 8x8 dotmatrix LEDでデジタル時計をつくる »

July 2020
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

無料ブログはココログ