Skip to content

Instantly share code, notes, and snippets.

@dsample
Created February 21, 2014 00:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dsample/9126456 to your computer and use it in GitHub Desktop.
Save dsample/9126456 to your computer and use it in GitHub Desktop.
A set of patterns for the Espruino to use a WS2811 RGB LED strips which change with the press of the on-board button. Defaulted to connect to pin B15 and 50 LEDs
/*var sensor = require("HC-SR04").connect(C6,C7,function(dist) {
console.log(dist+" cm away");
});
setInterval(function() {
sensor.trigger(); // send pulse
}, 500);
*/
SPI2.setup({baud:3200000, mosi:B15});
var rgb = new Uint8Array(50*3);
var pos=0;
function lightsOff() {
clearInterval(cycle);
pos++;
for (var i=0;i<rgb.length;i+=3) {
rgb[i ] = 0;
rgb[i+1] = 0;
rgb[i+2] = 0;
}
SPI2.send4bit(rgb, 0b0001, 0b0011);
}
var patterns = [];
//patterns.push(lightsOff);
patterns.push(function() {
// Fading white lights
pos++;
for (var i=0;i<rgb.length;i+=3) {
var col = (Math.sin(i+pos*0.2)+1) * 127;
rgb[i ] = col;
rgb[i+1] = col;
rgb[i+2] = col;
}
});
patterns.push(function() {
// Low red light
pos++;
for (var i=0;i<rgb.length;i+=3) {
var col = 10;
rgb[i ] = col;
rgb[i+1] = 0;
rgb[i+2] = 0;
}
});
patterns.push(function() {
// Medium red light
pos++;
for (var i=0;i<rgb.length;i+=3) {
var col = 50;
rgb[i ] = col;
rgb[i+1] = 0;
rgb[i+2] = 0;
}
});
patterns.push(function() {
// Medium red light 2
pos++;
for (var i=0;i<rgb.length;i+=3) {
var col = 100;
rgb[i ] = col;
rgb[i+1] = 0;
rgb[i+2] = 0;
}
});
patterns.push(function() {
// Full red light
pos++;
for (var i=0;i<rgb.length;i+=3) {
var col = 255;
rgb[i ] = col;
rgb[i+1] = 0;
rgb[i+2] = 0;
}
});
patterns.push(function() {
// Low green light
pos++;
for (var i=0;i<rgb.length;i+=3) {
var col = 50;
rgb[i ] = 0;
rgb[i+1] = col;
rgb[i+2] = 0;
}
});
patterns.push(function() {
// Low blue light
pos++;
for (var i=0;i<rgb.length;i+=3) {
var col = 50;
rgb[i ] = 0;
rgb[i+1] = 0;
rgb[i+2] = col;
}
});
patterns.push(function() {
// Fading colours
pos++;
for (var i=0;i<rgb.length;i+=3) {
rgb[i ] = (1 + Math.sin((i+pos)*0.1324)) * 127;
rgb[i+1] = (1 + Math.sin((i+pos)*0.1654)) * 127;
rgb[i+2] = (1 + Math.sin((i+pos)*0.1)) * 127;
}
});
patterns.push(function() {
// Random blue lights
for (var i=0;i<rgb.length;i+=3) {
rgb[i ] = 0;
rgb[i+1] = 0;
rgb[i+2] = Math.random()*255;
}
});
var getPattern = patterns[0];
function doLights() {
getPattern();
SPI2.send4bit(rgb, 0b0001, 0b0011);
}
var patternNumber = 0;
function changePattern() {
patternNumber = (patternNumber+1) % patterns.length;
getPattern = patterns[patternNumber];
}
setWatch(changePattern, BTN, { repeat: true, edge:'falling' });
cycle = setInterval(doLights,50);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment