
GU-7000シリーズ(CMOSシリアルI/F対応モジュール)に表示させる
GU-7000シリーズ(CMOSシリアルI/F対応モジュール)に表示させる
今回はSWITCH SCIENCE社製バニラシールドと呼ばれるArduino専用の両面スルーホールのユニバーサル基板を使用しました。 こちらにVFDモジュールとスイッチ、ピンヘッダを取り付け、Arduinoへ繋ぐコネクタ部へ配線するだけです。 詳細は下記接続図をご覧ください。
Arduinoのウェブサイトから統合開発環境をダウンロードして、ソフトウェアを作成します。 今回作成したのは"Hello world 蛍光表示管"と表示しその後押したボタンの色を表示するものです。 使用した蛍光表示管はモジュールと言われる内部にコントローラを持っているもので、 更にFROM内に漢字フォントを持っているため、コマンドだけで日本語や中国語、韓国語まで表示できます。 もちろん英語や各種欧州フォントも搭載しており、グラフィックタイプなので画像表示もできます。 詳細は下記スケッチをご覧ください。
使用部品
- 蛍光表示管モジュール
GU140X32F-7903
CMOSシリアル接続ができ、漢字フォントを搭載したグラフィック表示器。 - Arduino本体
Arduino Uno R3
Arduino本体で、もっとも販売数が多いそうです。 - バニラシールド
SSCI-Vanilla-Shield-Black
Arduino本体と同じサイズのユニバーサル基板。試作・開発に最適です。 この記事で使用しているArduino本体もこちらで販売しています。 - その他
赤・青タクトスイッチ、ピンヘッダ・ソケット、半田・配線材料 等
適切なものをご用意ください。
回路図

日本語が文字化けするときに(Unicode<>Shift-JIS変換ツール)
PCの多くはUnicodeで動作していますが、VFDモジュールのフォントテーブルはShift-JISになっています。 文字コードが違うため、PCからモジュールに文字を書き込むと、文字化けすることがあります。
そこで、クリップボードにコピーされているUnicodeのテキストを、Shift-JISの16進数列表記に変換するツールを用意しました。 ダウンロードしてご活用ください。 ツールのダウンロードはこちら
また、Arduino上でShift-JISに変換するサンプルスケッチもございます。 スケッチのダウンロードはこちら
「スケッチ」とは、本開発環境でのプログラムを指します。下記はCMOSシリアルでVFDモジュールを表示させるためのサンプルスケッチです。 スケッチのダウンロードはこちら
/*
** VFDシールド プログラム
**
** ノリタケ伊勢電子製 GU-7903シリーズを同期式シリアル接続で
** つないでみました。
**
** GU-7903モジュールのジャンパー設定(J2ショート)が必要です。
**
*/
// ピン配置
int vfd_reset = 8; // VFDコネクタ 6番ピン
int vfd_si = 9; // VFDコネクタ 2番ピン
int vfd_sbusy = 10; // VFDコネクタ 4番ピン
int vfd_clk = 11; // VFDコネクタ 5番ピン
int sw_blue = 12; // 青ボタン
int sw_red = 13; // 赤ボタン
// 作成した関数のプロトタイプ
void vfd_print(unsigned char message[],int L);
void vfd_put(unsigned char unebyte);
void vfd_kanjiOn();
void vfd_crlf();
void vfd_setCursor(int X, int Y);
// the setup routine runs once when you press reset:
// リセット後に1回だけ実行されるプログラム
void setup() {
// initialize the digital pins
pinMode(vfd_reset, OUTPUT);
pinMode(vfd_clk, OUTPUT);
pinMode(vfd_si, OUTPUT);
pinMode(vfd_sbusy, INPUT);
pinMode(sw_blue, INPUT_PULLUP);
pinMode(sw_red, INPUT_PULLUP);
digitalWrite(vfd_reset, LOW);
delay(1);
digitalWrite(vfd_reset, HIGH);
unsigned char message[12] = "Hello World";
vfd_print(message, sizeof(message)-1);
vfd_crlf(); //改行
vfd_crlf(); //改行
vfd_kanjiOn();
unsigned char kanji_code[ 10 ] =
{ /*** 蛍 光 表 示 管 S-JIS code *****/
0x8c, 0x75, 0x8c, 0xf5, 0x95, 0x5c, 0x8e, 0xa6, 0x8a, 0xc7, };
vfd_print(kanji_code, 10);
}
// the loop routine runs over and over again forever:
// 繰り返し実行されるプログラム
void loop() {
if(digitalRead(sw_red) == LOW) //赤ボタン
{ vfd_setCursor(100,1); // カーソル移動
vfd_put(0x90); // ”赤”
vfd_put(0xd4);
}
if(digitalRead(sw_blue) == LOW) //青ボタン
{ vfd_setCursor(100,1); // カーソル移動
vfd_put(0x90); // ”青”
vfd_put(0xc2);
}
}
void vfd_print(unsigned char message[], int L)
{
int i;
for(i=0; i<L; i++)
{
vfd_put(message[i]);
}
}
void vfd_put(unsigned char onebyte)
{
while( digitalRead(vfd_sbusy) == HIGH){}
shiftOut(vfd_si, vfd_clk, LSBFIRST, onebyte);
}
void vfd_crlf()
{
shiftOut(vfd_si, vfd_clk, LSBFIRST, 0x0d);
shiftOut(vfd_si, vfd_clk, LSBFIRST, 0x0a);
}
void vfd_kanjiOn()
{
unsigned char data[15];
data[0]=0x1f;
data[1]=0x28;
data[2]=0x67;
data[3]=0x01;
data[4]=0x02;
data[5]=0x1f;
data[6]=0x28;
data[7]=0x67;
data[8]=0x02;
data[9]=0x01;
data[10]=0x1f;
data[11]=0x28;
data[12]=0x67;
data[13]=0x0f;
data[14]=0x00;
vfd_print(data,15);
}
void vfd_setCursor(int X, int Y)
{
unsigned char data[6];
data[0] = 0x1f;
data[1] = 0x24;
data[2] = X % 256;
data[3] = X / 256;
data[4] = Y % 256;
data[5] = Y / 256;
vfd_print(data,6);
}