New protocol, revert back to Arduino
parent
9a8389abf4
commit
dd9dcbd46e
|
@ -1,39 +1,44 @@
|
||||||
#include <WS2812.h>
|
#include <WS2812.h>
|
||||||
#include <DigiCDC.h>
|
|
||||||
|
|
||||||
#define LEDCount 37
|
#define LEDCount 37
|
||||||
#define outputPin 1
|
#define outputPin 11
|
||||||
WS2812 LED(LEDCount);
|
WS2812 LED(LEDCount);
|
||||||
cRGB value;
|
cRGB value;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
SerialUSB.begin();
|
//Serial.begin(230400);
|
||||||
|
Serial.begin(115200);
|
||||||
LED.setOutput(outputPin);
|
LED.setOutput(outputPin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if (SerialUSB.available() > 0) {
|
if (Serial.available() > 0) {
|
||||||
byte command = SerialUSB.read();
|
byte command = Serial.read();
|
||||||
|
//Serial.write(command);
|
||||||
if (command == 0x11) {
|
if (command == 0x11) {
|
||||||
LED.sync();
|
LED.sync();
|
||||||
|
|
||||||
SerialUSB.write(0x1f);
|
Serial.write(0x1a);
|
||||||
}
|
}
|
||||||
else if (command == 0x12) {
|
else if (command == 0x12) {
|
||||||
while (SerialUSB.available() < 4) {
|
while (Serial.available() < 4) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int pos = SerialUSB.read();
|
int pos = Serial.read();
|
||||||
value.r = SerialUSB.read();
|
value.r = Serial.read();
|
||||||
value.g = SerialUSB.read();
|
value.g = Serial.read();
|
||||||
value.b = SerialUSB.read();
|
value.b = Serial.read();
|
||||||
|
|
||||||
LED.set_crgb_at(pos, value);
|
LED.set_crgb_at(pos, value);
|
||||||
|
|
||||||
SerialUSB.write(0x1f);
|
//Serial.write(pos);
|
||||||
|
//Serial.write(value.r);
|
||||||
|
//Serial.write(value.g);
|
||||||
|
//Serial.write(value.b);
|
||||||
|
Serial.write(0x1b);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
SerialUSB.write(0x1e);
|
Serial.write(0x1e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
301
index.js
301
index.js
|
@ -1,32 +1,154 @@
|
||||||
var express = require("express");
|
var express = require("express");
|
||||||
|
|
||||||
var SerialPort = require("serialport").SerialPort;
|
var SerialPort = require("serialport").SerialPort;
|
||||||
var serialPort = new SerialPort("/dev/ttyACM0", {
|
var serialPort = new SerialPort(process.argv[2], {
|
||||||
baudrate: 9600
|
baudrate: 115200
|
||||||
});
|
|
||||||
serialPort.on("open", function () {
|
|
||||||
/*serialPort.on('data', function(data) {
|
|
||||||
process.stderr.write(data);
|
|
||||||
});*/
|
|
||||||
setTimeout(function () {
|
|
||||||
serialPort.write("2,3\n", function (err, results) {
|
|
||||||
setTimeout(function () {
|
|
||||||
serialPort.write("1,255\n", function (err, results) {
|
|
||||||
});
|
|
||||||
}, 500);
|
|
||||||
});
|
|
||||||
}, 2000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var leds = 37;
|
||||||
|
|
||||||
var toHue = function (s) {
|
var toHue = function (s) {
|
||||||
return Math.floor(s / 64 * 256 % 256);
|
return Math.floor(s / 64 * 256 % 256);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var hslToRgb = function (h, s, l) {
|
||||||
|
var r, g, b;
|
||||||
|
if (s == 0) {
|
||||||
|
r = g = b = l; // achromatic
|
||||||
|
} else {
|
||||||
|
var hue2rgb = function (p, q, t) {
|
||||||
|
if(t < 0) t += 1;
|
||||||
|
if(t > 1) t -= 1;
|
||||||
|
if(t < 1/6) return p + (q - p) * 6 * t;
|
||||||
|
if(t < 1/2) return q;
|
||||||
|
if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
||||||
|
var p = 2 * l - q;
|
||||||
|
r = hue2rgb(p, q, h + 1/3);
|
||||||
|
g = hue2rgb(p, q, h);
|
||||||
|
b = hue2rgb(p, q, h - 1/3);
|
||||||
|
}
|
||||||
|
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
|
||||||
|
};
|
||||||
|
|
||||||
var state = 42;
|
var state = 42;
|
||||||
|
var lightness = 0.5;
|
||||||
var h;
|
var h;
|
||||||
var i = toHue(state);
|
var i = toHue(state);
|
||||||
|
|
||||||
var sp = 1;
|
var sp = 1;
|
||||||
|
|
||||||
|
var writeLED = function (i, r, g, b, cb) {
|
||||||
|
serialPort.write(new Buffer([0x12, i, r, g, b]), function () {
|
||||||
|
//serialPort.drain(function (err) {
|
||||||
|
// cb(err);
|
||||||
|
cb();
|
||||||
|
//});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var update = function (cb) {
|
||||||
|
serialPort.write(new Buffer([0x11]), function () {
|
||||||
|
//serialPort.drain(function (err) {
|
||||||
|
// cb(err);
|
||||||
|
cb();
|
||||||
|
//});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var writeAllLED = function (color, cb) {
|
||||||
|
var buff = [];
|
||||||
|
for (var i = 0; i < leds; i++) {
|
||||||
|
var c = color(i);
|
||||||
|
buff.push(0x12, i, c[0], c[1], c[2]);
|
||||||
|
}
|
||||||
|
var chunksize = 5;
|
||||||
|
var j = 0;
|
||||||
|
var loop = function () {
|
||||||
|
serialPort.write(new Buffer(buff.slice(j, j + chunksize)), function () {
|
||||||
|
//serialPort.drain(function (err) {
|
||||||
|
j += chunksize;
|
||||||
|
if (j < buff.length) {
|
||||||
|
loop();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
//});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
loop();
|
||||||
|
};
|
||||||
|
|
||||||
|
var flash = function (color, cb) {
|
||||||
|
writeAllLED(color, function () {
|
||||||
|
update(cb);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var slide = function (color, cb, time) {
|
||||||
|
var i = -1;
|
||||||
|
var loop = function () {
|
||||||
|
i++;
|
||||||
|
if (i < leds) {
|
||||||
|
var c = color(i);
|
||||||
|
setTimeout(function () {
|
||||||
|
writeLED(i, c[0], c[1], c[2], function () {
|
||||||
|
update(loop);
|
||||||
|
});
|
||||||
|
}, time || 30);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
loop();
|
||||||
|
};
|
||||||
|
|
||||||
|
var fade = function (color, cb) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
serialPort.on("open", function () {
|
||||||
|
serialPort.on("data", function (d) {
|
||||||
|
//console.log(d);
|
||||||
|
});
|
||||||
|
/*
|
||||||
|
setTimeout(function () {
|
||||||
|
var bytes = [];
|
||||||
|
bytes.push();
|
||||||
|
for (var i = 0; i < leds; i++) {
|
||||||
|
bytes.push(0x12, i, 0, 0, 255);
|
||||||
|
}
|
||||||
|
bytes.push(0x11);
|
||||||
|
var data = new Buffer(bytes);
|
||||||
|
console.log(data);
|
||||||
|
serialPort.write(data);
|
||||||
|
serialPort.drain(function (err, results) {
|
||||||
|
console.log("all blue");
|
||||||
|
});
|
||||||
|
}, 5000);
|
||||||
|
*/
|
||||||
|
var a = function () {
|
||||||
|
slide(function (i) {
|
||||||
|
return [0, 0, 255];
|
||||||
|
}, function () {
|
||||||
|
slide(function (i) {
|
||||||
|
return [255, 0, 0];
|
||||||
|
}, function () {
|
||||||
|
slide(function (i) {
|
||||||
|
return [0, 255, 0];
|
||||||
|
}, function () {
|
||||||
|
a();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//a();
|
||||||
|
});
|
||||||
|
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
app.get("/get", function (req, res) {
|
app.get("/get", function (req, res) {
|
||||||
|
@ -35,7 +157,7 @@ app.get("/get", function (req, res) {
|
||||||
|
|
||||||
app.get("/set/:i", function (req, res) {
|
app.get("/set/:i", function (req, res) {
|
||||||
|
|
||||||
state = req.params.i;
|
state = req.params.i * 1;
|
||||||
//console.log("3," + Math.floor(state / 64 * 256 % 256));
|
//console.log("3," + Math.floor(state / 64 * 256 % 256));
|
||||||
res.status(200).end();
|
res.status(200).end();
|
||||||
|
|
||||||
|
@ -66,10 +188,153 @@ app.get("/set/:i", function (req, res) {
|
||||||
console.log(i);
|
console.log(i);
|
||||||
clearInterval(h);
|
clearInterval(h);
|
||||||
}
|
}
|
||||||
serialPort.write("3," + Math.floor(i) + "\n", function (err, results) {
|
flash(function (la) {
|
||||||
|
return hslToRgb(i / 256, 1, lightness);
|
||||||
|
}, function () {
|
||||||
|
|
||||||
});
|
});
|
||||||
}, 50)
|
}, 20);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.get("/lightness/set/:i", function (req, res) {
|
||||||
|
res.status(200).end();
|
||||||
|
|
||||||
|
var from = lightness;
|
||||||
|
var to = req.params.i * 1;
|
||||||
|
|
||||||
|
var a = function () {
|
||||||
|
flash(function (la) {
|
||||||
|
return hslToRgb(toHue(state) / 256, 1, lightness);
|
||||||
|
}, function () {
|
||||||
|
lightness = lightness + (to - from) * 0.02;
|
||||||
|
if ((to - from) < 0 ? lightness > to : lightness < to) {
|
||||||
|
setTimeout(function () {
|
||||||
|
a();
|
||||||
|
}, 16);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lightness = to;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
a();
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/demo1/start", function (req, res) {
|
||||||
|
res.status(200).end();
|
||||||
|
|
||||||
|
var a = function () {
|
||||||
|
slide(function (la) {
|
||||||
|
return hslToRgb(0, 1, 0);
|
||||||
|
}, function () {
|
||||||
|
setTimeout(b, 500);
|
||||||
|
}, Math.floor(1000 / leds));
|
||||||
|
};
|
||||||
|
|
||||||
|
var b = function () {
|
||||||
|
slide(function (la) {
|
||||||
|
return hslToRgb(la / leds, 1, 0.5);
|
||||||
|
}, function () {
|
||||||
|
c(0);
|
||||||
|
}, Math.floor(1000 / leds));
|
||||||
|
};
|
||||||
|
|
||||||
|
var c = function (i) {
|
||||||
|
flash(function (la) {
|
||||||
|
return hslToRgb((la / leds + i / 150) % 1 , 1, 0.5);
|
||||||
|
}, function () {
|
||||||
|
if (i < 400) {
|
||||||
|
setTimeout(function () {
|
||||||
|
c(i + 1);
|
||||||
|
}, 16);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
d(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var d = function () {
|
||||||
|
slide(function (la) {
|
||||||
|
return hslToRgb(0, 1, 0);
|
||||||
|
}, function () {
|
||||||
|
e(0);
|
||||||
|
}, Math.floor(1000 / leds));
|
||||||
|
};
|
||||||
|
|
||||||
|
var e = function (i) {
|
||||||
|
slide(function (la) {
|
||||||
|
return hslToRgb((la / leds / 16 + i / 10) % 1, 1, 0.5);
|
||||||
|
}, function () {
|
||||||
|
if (i < 199) {
|
||||||
|
e(i + 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
f();
|
||||||
|
}
|
||||||
|
}, 50 / (i / 200 * 50));
|
||||||
|
};
|
||||||
|
|
||||||
|
var f = function () {
|
||||||
|
slide(function (la) {
|
||||||
|
return hslToRgb(i / 256, 1, 0.5);
|
||||||
|
}, function () {
|
||||||
|
|
||||||
|
}, Math.floor(1000 / leds));
|
||||||
|
};
|
||||||
|
|
||||||
|
a();
|
||||||
|
});
|
||||||
|
|
||||||
|
var demo2 = false;
|
||||||
|
|
||||||
|
app.get("/demo2/start", function (req, res) {
|
||||||
|
res.status(200).end();
|
||||||
|
|
||||||
|
demo2 = true;
|
||||||
|
|
||||||
|
var a = function () {
|
||||||
|
slide(function (la) {
|
||||||
|
return hslToRgb(la / leds, 1, 0.5);
|
||||||
|
}, function () {
|
||||||
|
b(0);
|
||||||
|
}, Math.floor(1000 / leds));
|
||||||
|
};
|
||||||
|
|
||||||
|
var b = function (i) {
|
||||||
|
flash(function (la) {
|
||||||
|
return hslToRgb((la / leds + i / 150) % 1 , 1, 0.5);
|
||||||
|
}, function () {
|
||||||
|
if (demo2) {
|
||||||
|
setTimeout(function () {
|
||||||
|
b(i + 1);
|
||||||
|
if (i == 30000) {
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
}, 16);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var c = function () {
|
||||||
|
slide(function (la) {
|
||||||
|
return hslToRgb(i / 256, 1, 0.5);
|
||||||
|
}, function () {
|
||||||
|
|
||||||
|
}, Math.floor(1000 / leds));
|
||||||
|
};
|
||||||
|
|
||||||
|
a();
|
||||||
|
});
|
||||||
|
app.get("/demo2/stop", function (req, res) {
|
||||||
|
res.status(200).end();
|
||||||
|
|
||||||
|
demo2 = false;
|
||||||
|
});
|
||||||
|
|
||||||
app.listen(8026);
|
app.listen(8026);
|
||||||
|
|
Loading…
Reference in New Issue