2012/01/21
NOKIA 3300 LCD Arduino (1-2)
1月14日の nokia 3300 LCD 動作テストの備忘録です。LCD初期化や文字図形出力には PETERさんの nokia 6100 LCD 用ライブラリを加工して使いました。
PETERさんの SparkFun Color LCD Shield library の紹介ページ
http://peterdavenport.posterous.com/pages/prodjects
上記にリンクもありますが、Arduino Color LCD Shield Library
http://sourceforge.net/projects/arduinocolorlcd/files/
解凍後、Main Library filesフォルダを Arduino IDE(0018~0023) の libraries フォルダへ(適当にリネーム nokia_3300)。
※LCD_driver.c を Nokia 3300 LCD 用に加工
・LCDInit→DATCTL のパラメーター 2箇所

・とりあえず上記の変更で色はOK,座標原点は向かって右下。
一文字出力(LCDPutChar)は使用可能なれど座標が異なるので文字列出力(LCDPutStr)の順番が逆。
・LCDPutStr→LCDPutChar を使用した文字列出力なのでその順番を変更(やや強引?)
座標初期値の修正やY<0での終了を入れるべき?など、まだ要修正ですね。
・(悪戯で一文字出力後、ディレイを入れました。YouTubeアップの動画撮影時は300)。常用するなら引数をもう一つ増やした方が現実的でしょう。

以下スケッチ。0018~0023で検証済です。
//*****************************************************************
// Nokia3300 LCD test
//*****************************************************************
//
#include "LCD_driver.h"
//Modify, LDC_driver.h (Written by Mr.Peter Davenport)
//
//*****************************************************************
//
void setup()
{
ioinit(); //Initialize I/O
LCDInit(); //Initialize the LCD
LCDContrast(25); // Sets LCD contrast
LCDClear(WHITE); // Clear LCD to solid white
//
// *************display_1st_message
//
LCDPutStr("Nokia 3300 LCD", 85,113, BLACK, WHITE);
LCDPutStr("with", 65,73, BLACK, WHITE);
LCDPutStr("Arduino", 45,85, BLACK, WHITE);
delay(2000);
//
LCDClear(BLACK);
delay(2000);
//
// *************display_circle
//
LCDDrawCircle (16, 15, 50, WHITE, 1);
LCDDrawCircle (22, 21, 44, WHITE, 1);
LCDSetRect(63, 0, 65, 128, 1, GREEN);
LCDSetRect(0, 64, 128, 65, 1, GREEN);
LCDPutStr(" TEST ", 57,83, BLACK, WHITE);
//
LCDDrawCircle (16, 15, 50, BLACK, 1);
LCDDrawCircle (22, 21, 44, BLACK, 1);
//
for (int hoge=50; hoge >= 5; hoge = hoge-3){
LCDDrawCircle (66-hoge, 65-hoge, hoge, RED, 1);
delay(500);
}
//
delay(1000);
//
// *************display_color_bar
//
LCDSetRect(0, 0, 128, 16, 1, BLUE); //ループを使わずダラダラ書きました。
LCDSetRect(0, 17, 128, 32, 1, RED);
LCDSetRect(0, 33, 128, 48, 1, MAGENTA);
LCDSetRect(0, 49, 128, 64, 1, GREEN);
LCDSetRect(0, 65, 128, 80, 1, CYAN);
LCDSetRect(0, 81, 128, 96, 1, YELLOW);
LCDSetRect(0, 97, 128, 112, 1, WHITE);
LCDSetRect(0, 113, 128, 128, 1, BLACK);
//
delay(5000);
LCDClear(WHITE);
}
//
//*****************************************************************
//
void loop()
{
LCDPutStr("CQ CQ CQ", 110,95, BLACK, WHITE); //Y座標に偶数を使うと文字が崩れる
LCDPutStr("DE CT5002", 93, 85, BLUE, WHITE);
LCDPutStr("CQ CQ CQ", 70, 95, ORANGE, WHITE);
LCDPutStr("DE CT5002", 53, 85, RED, WHITE);
//
LCDPutStr("Tokyo Japan", 34, 101, BLACK, WHITE);
//
LCDPutStr("I'm calling CQ,", 8, 117, BLUE, WHITE);
//
delay(1000);
LCDClear(WHITE);
}