Aruduino & Color LCD [Aruduino]
前のブログ記事にお世話になっているKさんから提供していただいたN6QW PETEさんが開発したカラーLCD-VFOに魅せれてしまった。お世話になっているJH8SSTさんからもLCD等を提供していただいた。そうなるとこれを使いこなしたいという欲望がわきあがってくる。
普段BASCOM-AVRを使っているのでなんとかこれで制御できないかとNETで調べてみたが、該当のLCDの使用例は見つからなかった。そこで Aruduinoで調べてみたところ非常に多くの使用例や豊富なライブラリーがあることが分かった。
これはいよいよAruduinoを使ってみるしかないということになった。もともとBASICスパゲッティープログラムでやっていたので、Cライクなプログラムはなじみがない。しかし覚えるしかないようだ。Aruduinoの世界ではプログラムと言わずスケッチということが分かった。
最初にプログラム(以下スケッチ)をコンパイルして機械語にするソフトが必要である。これは無償でダウンロードできる。
Aruduino-IDEと言われるソフトである。インストール方法等はNETに沢山あるのでそちらを参照されたい。ただバージョンは色々あり、最新版がいいとは思うが不具合を起こす場合もあるようだ。私はKさんのアドバイスにより1.6.5バージョンをインストールすることにした。
当然Aruduinoに書き込む必要があるわけであるが、USBケーブルを使ってPCとAruduinoを接続すれば書き込める。
これはAruduinoの中にブートローダーというPCと接続して書き込むためソフトがインストールされているためである。このことは、BASCOM-AVR等書込器が必要なものに比べてきわめて簡単でハードルが低い。
また特に凄いのは、非常に多くの製作例、ライブラリー、スケッチの公開シェアがされていることである。今回のような携帯電話に使われていたLCD等の多くもライブラリーが発表されている。無線関連でもSi5351PLLやDDSのAD9850などのライブラリーもある。実に豊富な情報がUPされている。特に海外の情報は凄いものがある。日本でも製作例はあるもののスケッチの公開等は少ない。 どんどんシェアしてより良いものを作っていければと思うのだが。
さて、今回使用しているLCDはノキア携帯用のものらしいが、よく判らない。中華では数百円で入手できる。Aruduinoとの接続はSPI(Serial Peripheral Interface)通信で行っている。SPI通信はIDEの標準ライブラリーに用意されている。
LCD自体の表示関連制御にはILI9163CというドライバーICが使われておりこのライブラリーは公表されている。フォント等にはAdafruit_GFX.hというライブラリー(定番らしい)が公開されている。
いよいよプログラミングである。ここで少し困ったことがあった。スケッチに書く命令語(コマンド)が分からない。リストなどないのかと探してみたが見つからなかった。そこで既に発表されている他のスケッチ等を見て調べることとした。
当面必要なコマンドはどうにか分かったので備忘録も兼ねてここにUPしていくこととした。
スケッチ例(1)
文字表示の例。
----------------------------------------------------------------------
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>
// Color definitions 色の設定
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFF
/* 以下コメント SPI通信の接続ピン等MEMO
Teensy3.x and Arduino's
You are using 4 wire SPI here, so:
MOSI: 11//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
MISO: 12//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
SCK: 13//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
the rest of pin below:
*/
#define __CS 10 //LCDとの接続ポート指定
#define __DC 9 // 〃
#define __RST 8 // 〃
TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC, __RST); //ライブラリにーLCD制御ポートを送る
void setup() {
tft.begin(); //LCDとの通信開始
}
void loop() {
testText(); //サブルーチン(関数)にジャンプしコマンドを実行し戻る
}
//以下サブルーチン
unsigned long testText() {
tft.setCursor(0, 0); //書き始める位置をX,Yで指定
tft.setTextColor(WHITE); //文字色指定
tft.setTextSize(1); //文字サイズを指定
tft.println("Hello World!"); //文字を書く 以下同様
tft.setCursor(0,20);
tft.setTextColor(YELLOW);
tft.setTextSize(2);
tft.println("JA2NKD");
tft.setCursor(0,50);
tft.setTextColor(RED);
tft.setTextSize(3);
tft.println("JH8SST");
tft.setCursor(0,90);
tft.setTextColor(GREEN);
tft.setTextSize(4);
tft.println("Hello");
}
スケッチ例(2)
図形表示
前半は上記スケッチと同じなので、サブルーチン以下のみを示す。
----------------------------------------------------------------------- --
unsigned long testText() {
tft.setRotation(1); //画面全体を回転(1-3)90度毎時計方向
tft.drawLine(0,0,128,128,WHITE); //ライン X1,Y1からX2,Y2
tft.drawRect(50,10,30,30,RED); //四角形ライン X,Yから横縦の長さを指定
tft.fillRect(90,10,30,30, BLUE); //四角形塗りつぶし
tft.drawTriangle(30,50,10,70,50,70, YELLOW); //三角形ライン 3頂点座標
tft.fillTriangle(30,80,10,100,50,100,CYAN); //三角形塗潰し
tft.drawCircle(80,105,15,MAGENTA); //円ライン 中心座標と半径
tft.fillCircle(90,60,15,GREEN); //円塗潰し
}
大阪の小畠(JR3BGT)と申します。
OMのスケッチをコピペさせてもらい、error: stray'\' in program にあわてつつ(Hi)
なんとかコンパイルまでたどり着き、わがコールサインを表示させて喜んでいます。
N6QWさんのDDSを製作すべく、スケッチをダウンロードしコンパイルを試みていますが、error のてんこもりで悪戦苦闘中です。
OMのDDSがどんな風に進むのか楽しみにしています。
なかなか、プログラムの開発経過をこんな形で紹介していただけませんので!
by JR3BGT (2016-07-07 15:04)
JR3BGT 小畠OM 始めまして。コメント有難うございます。
今までBASCOM-AVRでBASICライクでやっていましたので、Arduinoは、初心者です。多分最初は皆さん苦労しているのではないかと思い、UPしました。結構はまってしまうところがあるようで、身近に教えてくれる人がいないと苦労しますね。
一応VFOとして使えるものが出来上がりましたので続編をUPする予定です。少しずつなかも出来てきて情報交換しながら試行錯誤しています。
何かあれば、メール(muutan2011あっとまーく.gmail.com)でもコメントでもかまいません。情報交換していきましょう。カラーLCDは綺麗でいいですよ。
by JA2NKD (2016-07-07 19:38)