-
Notifications
You must be signed in to change notification settings - Fork 0
/
LCD1602.js
98 lines (89 loc) Β· 2.16 KB
/
LCD1602.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
+(function (factory) {
if (typeof exports === 'undefined') {
factory(webduino || {});
} else {
module.exports = factory;
}
}(function (scope) {
'use strict';
var self;
var proto;
var sendLength = 50;
var sendArray = [];
var sending = false;
var sendAck = '';
var sendCallback;
var Module = scope.Module;
var _backlight;
function LCD1602(board, sda, scl, addr = 0x27) {
Module.call(this);
this._board = board;
self = this;
self._sda = sda;
self._scl = scl;
self._addr = addr;
board.send([0xF0, 0x04, 0x18, 0x0 /*init*/ , sda, scl, addr, 0xF7]);
board.on(webduino.BoardEvent.SYSEX_MESSAGE,
function (event) {
var m = event.message;
sending = false;
});
startQueue(board);
}
LCD1602.prototype = proto = Object.create(Module.prototype, {
constructor: {
value: LCD1602
},
backlight: {
get: function () {
return _backlight;
},
set: function (val) {
_backlight = val;
}
}
});
proto.print = function (txt) {
var cmd = [0xF0, 0x04, 0x18, 0x02];
cmd = cmd.concat(toASCII(txt));
cmd.push(0xF7);
this._board.send(cmd);
}
proto.cursor = function (col, row) {
this._board.send([0xF0, 0x04, 0x18, 0x01, col, row, 0xF7]);
}
proto.clear = function () {
this._board.send([0xF0, 0x04, 0x18, 0x03, 0xF7]);
}
function toASCII(str) {
var data = [];
for (var i = 0; i < str.length; i++) {
var charCode = str.charCodeAt(i).toString(16);
if (charCode.length == 1) {
charCode = '0' + charCode;
}
var highChar = charCode.charAt(0);
var lowChar = charCode.charAt(1);
data.push(highChar.charCodeAt(0));
data.push(lowChar.charCodeAt(0));
}
return data;
}
function startQueue(board) {
setInterval(function () {
if (sending || sendArray.length == 0) {
return;
}
sending = true;
var sendObj = sendArray.shift();
sendAck = sendObj.ack;
if (sendAck > 0) {
board.send(sendObj.obj);
} else {
sending = false;
sendCallback();
}
}, 0);
}
scope.module.LCD1602 = LCD1602;
}));