Skip to content

Instantly share code, notes, and snippets.

@chrvadala
Created January 30, 2017 11:33
Show Gist options
  • Save chrvadala/b79f65e493ba3458836d6c2710db1018 to your computer and use it in GitHub Desktop.
Save chrvadala/b79f65e493ba3458836d6c2710db1018 to your computer and use it in GitHub Desktop.
let gpio = require('rpi-gpio');
let Promise = require('bluebird');
//mock
// gpio = {
// setup: function (pin, direction, cb) {
// console.log('setup', pin, direction);
// cb();
// },
// write: function (channel, value, cb) {
// console.log('write', channel, value);
// cb();
// },
// DIR_OUT: 'out'
// };
Promise.promisifyAll(gpio);
let leds = [3, 5, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 26, 29, 31, 32, 33, 35, 36, 37];
let blueLeds = leds.filter((led, i) => i % 3 === 0);
let greenLeds = leds.filter((led, i) => i % 3 === 1);
let redLeds = leds.filter((led, i) => i % 3 === 2);
let blueLedsRev = blueLeds.slice().reverse();
let greenLedsRev = greenLeds.slice().reverse();
let redLedsRev = redLeds.slice().reverse();
let initAll = () => Promise.map(leds, led => gpio
.setupAsync(led, gpio.DIR_OUT)
.then(() => gpio.writeAsync(led, 0))
);
let turnOnAndOff = led => gpio
.writeAsync(led, 1)
.delay(70)
.then(() => gpio.writeAsync(led, 0));
let supercar = rev => Promise.resolve(rev)
.then(rev => Promise.mapSeries(rev ? blueLeds : blueLedsRev, turnOnAndOff).then(() => Promise.resolve(!rev)))
.then(rev => Promise.mapSeries(rev ? greenLeds : greenLedsRev, turnOnAndOff).then(() => Promise.resolve(!rev)))
.then(rev => Promise.mapSeries(rev ? redLeds : redLedsRev, turnOnAndOff).then(() => Promise.resolve(!rev)))
let loopSupercar = rev => Promise.resolve(rev || false)
.then(rev => supercar(rev).then(() => Promise.resolve(!rev)))
.then(rev => loopSupercar(rev).then(() => Promise.resolve(!rev)));
Promise.resolve()
.then(() => initAll())
.then(() => loopSupercar())
.then(() => console.log('done'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment