-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathilcd.js
156 lines (129 loc) · 3.97 KB
/
ilcd.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
function iLCD() {
require('coffee-script/register');
var i2c = require('i2c');
var is_rpi_available = true;
var address = 0x27;
// commands
var LCD_CLEARDISPLAY = 0x01;
var LCD_RETURNHOME = 0x02;
var LCD_ENTRYMODESET = 0x04;
var LCD_DISPLAYCONTROL = 0x08;
var LCD_CURSORSHIFT = 0x10;
var LCD_FUNCTIONSET = 0x20;
var LCD_SETCGRAMADDR = 0x40;
var LCD_SETDDRAMADDR = 0x80;
//flags for display entry mode
var LCD_ENTRYRIGHT = 0x00;
var LCD_ENTRYLEFT = 0x02;
var LCD_ENTRYSHIFTINCREMENT = 0x01;
var LCD_ENTRYSHIFTDECREMENT = 0x00;
//flags for display on/off control
var LCD_DISPLAYON = 0x04;
var LCD_DISPLAYOFF = 0x00;
var LCD_CURSORON = 0x02;
var LCD_CURSOROFF = 0x00;
var LCD_BLINKON = 0x01;
var LCD_BLINKOFF = 0x00;
// flags for display/cursor shift
var LCD_DISPLAYMOVE = 0x08;
var LCD_CURSORMOVE = 0x00;
var LCD_MOVERIGHT = 0x04;
var LCD_MOVELEFT = 0x00;
//flags for function set
var LCD_8BITMODE = 0x10;
var LCD_4BITMODE = 0x00;
var LCD_2LINE = 0x08;
var LCD_1LINE = 0x00;
var LCD_5x10DOTS = 0x04;
var LCD_5x8DOTS = 0x00;
// flags for backlight control
var LCD_BACKLIGHT = 0x08;
var LCD_NOBACKLIGHT = 0x00;
var En = 0x4;//0b00000100 // Enable bit
var Rw = 0x2;//0b00000010 // Read/Write bit
var Rs = 0x1;//0b00000001 // Register select bit
var self = this;
this.lcd_device = undefined;
//----------- Constractor------------
self.lcd_device = new i2c(address, {device: '/dev/i2c-1'});
var WritRaw = function (RawData) {
self.lcd_device.write(RawData, function (err) {
});
};
//clocks EN to latch command
function lcdStrobe(data) {
WritRaw([(data | En | LCD_BACKLIGHT)]);
// sleep(.0005)
WritRaw(((data & ~En) | LCD_BACKLIGHT));
// sleep(.0001)
};
function lcdWrite4(data) {
WritRaw(Buffer([(data | LCD_BACKLIGHT)]));
WritRaw(Buffer([(data | LCD_DISPLAYON | LCD_BACKLIGHT)]));
WritRaw(Buffer([((data & ~LCD_DISPLAYON) | LCD_BACKLIGHT)]));
// lcdStrobe(data);
}
function lcdWrite(data, mode) {
lcdWrite4(mode | (data & 0xF0));
lcdWrite4(mode | ((data << 4) & 0xF0));
}
function LCDINIT() {
if (is_rpi_available) {
lcdWrite(0x03, 0);
lcdWrite(0x03, 0);
lcdWrite(0x03, 0);
lcdWrite(0x02, 0);
lcdWrite(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE, 0);
lcdWrite(LCD_DISPLAYCONTROL | LCD_DISPLAYON, 0);
lcdWrite(LCD_CLEARDISPLAY, 0);
lcdWrite(LCD_ENTRYMODESET | LCD_ENTRYLEFT, 0);
}
}
/*
* Write a string to the specified LCD line.
*/
this.lineOut = function (str, addr) {
if (addr == 1)
lcdWrite(0x80, 0);
if (addr == 2)
lcdWrite(0xC0, 0);
if (addr == 3)
lcdWrite(0x94, 0);
if (addr == 4)
lcdWrite(0xD4, 0);
str.split('').forEach(function (c) {
lcdWrite(c.charCodeAt(0), 1);
});
};
this.ClearLine = function (line) {
var str = "";
for (ii = 1; ii <= 16; ii++) {
str += " ";
}
self.lineOut(str, line);
};
this.ClearDisplay = function () {
lcdWrite(LCD_CLEARDISPLAY, 0);
};
this.SetAddress = function (adr) {
address = adr;
};
/** Turn display off */
this.DisplayOff = function () {
WritRaw(LCD_DISPLAYCONTROL | LCD_DISPLAYOFF);
};
/** Turn display on */
this.DisplayOn = function () {
LCDINIT();
lcdWrite(LCD_DISPLAYCONTROL | LCD_DISPLAYON, 0);
};
this.BackLightOn = function () {
lcdWrite(LCD_DISPLAYCONTROL | LCD_DISPLAYON | LCD_BACKLIGHT, 0);
};
this.BackLightOff = function () {
WritRaw(LCD_DISPLAYCONTROL | LCD_NOBACKLIGHT);
};
LCDINIT();
// lcdWrite(LCD_CLEARDISPLAY, 0);
}
module.exports.iLCD = new iLCD();