johnny-five
Version:
Firmata based Arduino Programming Framework.
154 lines (106 loc) • 2.93 kB
Markdown
# Seven Segment
Run with:
```bash
node eg/seven-segment.js
```
```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("johnny-five"),
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();
});
```
## Breadboard/Illustration
<img src="https://raw.github.com/rwldrn/johnny-five/master/docs/breadboard/seven-segment.png">
[docs/breadboard/seven-segment.fzz](https://github.com/rwldrn/johnny-five/blob/master/docs/breadboard/seven-segment.fzz)
## Devices
## Documentation
_(Nothing yet)_
## Contributing
All contributions must adhere to the [Idiomatic.js Style Guide](https://github.com/rwldrn/idiomatic.js),
by maintaining the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt](https://github.com/cowboy/grunt).
## Release History
_(Nothing yet)_
## License
Copyright (c) 2012 Rick Waldron <waldron.rick@gmail.com>
Licensed under the MIT license.