I/O CAPEでのLCD接続は失敗したが、ブレッドボード上では正常に動作した。

何度も使ってきたLCDだが、初期化処理をネットに載っているままに使ったため、display offと設定しているのに気付かず、まともに表示できるまで、やたら時間がかかってしまった。
最初はcloud9環境でやっていたが、各ピンには正常に出力が出るものの動かなかった。
しかたないので、HD44780用の公開されているCのプログラムを試したが、ビルドはエラーなく通るものの、実行時にエラーが発生して動かない。
再度cloud9にもどったが、プログラミングの作法も良く分からないし、デバッグのやり方もわからない。
ここのコードを参考にして、キャラクタLCDのコードを書いた。
これからアナログ入力値をLCDに表示させる予定だが、その前にアナログ入力するためにcloud9のupdateが必要だ。やり方が今いちわかんねぇ。
以下、blinkled.js(名前を変えるにはプロジェクトを変更しないとダメなのかな)
var bb = require('./bonescript');
var lcd = require('./HD44780.js');
PIN_LED = exports.PIN_LED = bone.USR3;
//PIN_DIR = exports.PIN_DIR = bone.P8_41;
PIN_RS = exports.PIN_RS = bone.P8_42;
//PIN_RW = exports.PIN_RW = bone.P8_39;
PIN_E = exports.PIN_E = bone.P8_40;
PIN_DB4 = exports.PIN_DB4 = bone.P8_45;
PIN_DB5 = exports.PIN_DB5 = bone.P8_46;
PIN_DB6 = exports.PIN_DB6 = bone.P8_43;
PIN_DB7 = exports.PIN_DB7 = bone.P8_44;
setup = function()
{
lcdSetup();
lcdInit();
};
loop = function()
{
digitalWrite(PIN_LED, HIGH);
lcdClear();
delay(1000);
digitalWrite(PIN_LED, LOW);
delay(1);
lcdStrWrite("Hello World!!", 0);
lcdStrWrite("mediware", 1);
delay(1000);
};
bb.run();
以下、HD44780.js
var bb = require('./bonescript');
lcdSetup = exports.lcdSetup = function()
{
// pinMode(PIN_DIR, OUTPUT);
pinMode(PIN_RS, OUTPUT);
// pinMode(PIN_RW, OUTPUT);
pinMode(PIN_E, OUTPUT);
pinMode(PIN_DB4, OUTPUT);
pinMode(PIN_DB5, OUTPUT);
pinMode(PIN_DB6, OUTPUT);
pinMode(PIN_DB7, OUTPUT);
pinMode(PIN_LED, OUTPUT);
// digitalWrite(PIN_DIR, HIGH);
// digitalWrite(PIN_RW, LOW);
digitalWrite(PIN_E, LOW);
};
lcdNibbleWrite= exports.lcdNibbleWrite = function(val)
{
var i;
var bit;
for (i = 0; i < 4; i++)
{
bit = val & (1 << i);
switch (i)
{
case 0:
digitalWrite(PIN_DB4, bit);
break;
case 1:
digitalWrite(PIN_DB5, bit);
break;
case 2:
digitalWrite(PIN_DB6, bit);
break;
case 3:
digitalWrite(PIN_DB7, bit);
pin_eStrobe();
break;
}
}
};
lcdByteWrite = exports.lcdByteWrite = function(val)
{
lcdNibbleWrite((val >> 4) & 0x0f);
lcdNibbleWrite(val & 0x0f);
};
cmdNibbleWrite = exports.cmdNibbleWrite = function(val)
{
digitalWrite(PIN_RS, LOW);
lcdNibbleWrite(val);
};
cmdByteWrite = exports.cmdByteWrite = function(val)
{
digitalWrite(PIN_RS, LOW);
lcdByteWrite(val);
};
dataByteWrite = exports.dataByteWrite = function(val)
{
digitalWrite(PIN_RS, HIGH);
lcdByteWrite(val);
};
lcdStrWrite = exports.lcdStrWrite = function(string, row)
{
var i;
if (row === 0)
cmdByteWrite(0x80);
else
cmdByteWrite(0xc0);
for (i = 0; i < string.length; i++)
dataByteWrite(string.charCodeAt(i));
};
lcdInit = exports.lcdInit = function()
{
cmdNibbleWrite(0x3);
delay(5);
cmdNibbleWrite(0x3);
delay(1);
cmdNibbleWrite(0x3);
delay(1);
cmdNibbleWrite(0x2);
delay(1);
cmdByteWrite(0x28);
delay(1);
cmdByteWrite(0x0f);
delay(1);
cmdByteWrite(0x01);
delay(2);
cmdByteWrite(0x06);
delay(1);
};
pin_eStrobe = exports.pin_eStrobe = function()
{
// delay(1);
digitalWrite(PIN_E, HIGH);
// delay(1);
digitalWrite(PIN_E, LOW);
// delay(1);
};
lcdClear = exports.lcdClear = function()
{
digitalWrite(PIN_RS, LOW);
// delay(1);
cmdByteWrite(0x01);
};
【追記】プログラムをpreタグとcodeタグで囲んで置くも、まともに表示できなかった。
ということで、上記プログラムをコピペしても動きません。