johnny-five
Version:
The JavaScript Arduino Programming Framework.
107 lines (85 loc) • 2.04 kB
JavaScript
/**
* This example uses a single seven-segment display (common anode) and a
* 74HC595 shift register. See docs/breadboard/seven-segment.png for wiring.
*/
var five = require("../lib/johnny-five.js"),
board;
board = new five.Board();
board.on("ready", function() {
var isCommonAnode, digits, segments, sr, led, i;
/*
This assumes the segments are as follows:
A
---
F | | B
--- <---- G
E | | C
---
D o DP
*/
isCommonAnode = true;
digits = [];
// .GFEDCBA
digits[0] = parseInt("00111111", 2); // 0
digits[1] = parseInt("00000110", 2); // 1
digits[2] = parseInt("01011011", 2); // 2
digits[3] = parseInt("01001111", 2); // 3
digits[4] = parseInt("01100110", 2); // 4
digits[5] = parseInt("01101101", 2); // 5
digits[6] = parseInt("01111101", 2); // 6
digits[7] = parseInt("00000111", 2); // 7
digits[8] = parseInt("01111111", 2); // 8
digits[9] = parseInt("01101111", 2); // 9
segments = {
// .GFEDCBA
a: parseInt("00000001", 2),
b: parseInt("00000010", 2),
c: parseInt("00000100", 2),
d: parseInt("00001000", 2),
e: parseInt("00010000", 2),
f: parseInt("00100000", 2),
g: parseInt("01000000", 2),
dp: parseInt("10000000", 2)
};
sr = new five.ShiftRegister({
pins: {
data: 2,
clock: 3,
latch: 4
}
});
led = new five.Led(5);
function invert(num) {
return ((~num << 24) >> 24) & 255;
}
sr.digit = function(num) {
sr.clear();
sr.send(
isCommonAnode ? invert(digits[num]) : digits[num]
);
};
sr.segment = function(s) {
sr.clear();
sr.send(
isCommonAnode ? invert(segments[s]) : segments[s]
);
};
sr.clear = function() {
sr.send(
isCommonAnode ? 255 : 0
);
};
i = 9;
function next() {
led.stop();
sr.digit(i--);
if (i < 0) {
i = 9;
led.strobe(50);
setTimeout(next, 2000);
} else {
setTimeout(next, 1000);
}
}
next();
});