I2C接続LCDモジュールをarduinoに接続してnode.jsで制御できるか
http://akizukidenshi.com/catalog/g/gM-09109/
秋月電子I2C接続小型LCDモジュールを使い
johnny-fiveのコンポーネントを使ってもうまく動作しなかった。
幸い、johnny-fiveではI2C通信を直接制御できるようなのでコンポーネントがなくても
なんとか対応できそうなので実装してみた。
参考したのがC言語のソースでそのままでとってもきれいなソースコードとは言えないが多少でも参考になれば幸いです。
また、johnny-fiveのソースコードを熟知してないので間違った使い方をしているかもしれない。
lcd.js
var LCD_ADR = 0x3e ; //lcd address
var CONTRAST= 0x26 ; // コントラスト
//
var five = require("johnny-five");
var board = new five.Board();
//Main
board.on("ready", function() {
// LCD表示処理
//
/* LCD 初期化 */
var lcd_init = function(){
board.io.i2cConfig();
lcd_cmd(0x38); // 8bit 2line Normal mode
lcd_cmd(0x39); // 8bit 2line Extend mode
lcd_cmd(0x14); // OSC 183Hz BIAS 1/5
/* コントラスト設定 */
lcd_cmd((0x70 + (CONTRAST & 0x0F)));//下位4bit
lcd_cmd((0x5C + (CONTRAST >> 4)));//上位2bit
lcd_cmd(0x6b); // Follwer for 3.3V
lcd_cmd(0x38); // Set Normal mode
lcd_cmd(0x0C); // Display On
lcd_cmd(0x01); // Clear Display
}
/* LCD コマンド */
var lcd_cmd = function(cmd){
board.io.i2cWrite(LCD_ADR,0x00,cmd);
}
/* SEND DATA */
var lcd_data = function(lcd_data){
board.io.i2cWrite(LCD_ADR,0x40,lcd_data);
}
/* Set Cursor */
var lcd_setCursor = function( row,clm){
//row=0 or 1
if(row==0) lcd_cmd(0x80+clm);
if(row==1) lcd_cmd(0xc0+clm);
}
/* All Clear */
var lcd_clear = function(){
lcd_cmd(0x01); //初期化コマンド出力
}
/* LCD print */
var lcd_print = function(ptr){
var msg = ptr +"";
for(var i=0; i<msg.length ; i++)
{
lcd_data(msg.charCodeAt(i) ); //文字表示
}
}
// テスト表示
lcd_init(); //LCD初期化
lcd_clear(); // LCDクリア
lcd_setCursor(0,0); //カーソル位置
lcd_print("hello"); // 表示文字列
lcd_setCursor(1,3);
lcd_print("world");1
});