-
-
Save zeffii/9493663 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const BYTESPERPIXEL = 27; | |
const BYTESPERCOLOR = 9; // BYTESPERPIXEL / 3 | |
const SPICLK = 7500; // SPI clock speed in kHz | |
const bits = "\xE0\x70\x38\x1C\x0E\x07\x03\x81\xC0\xE0\x70\x38\x1C\x0E\x07\x03\x81\xF8\xE0\x70\x38\x1C\x0E\x07\x03\xF1\xC0\xE0\x70\x38\x1C\x0E\x07\x03\xF1\xF8\xE0\x70\x38\x1C\x0E\x07\xE3\x81\xC0\xE0\x70\x38\x1C\x0E\x07\xE3\x81\xF8\xE0\x70\x38\x1C\x0E\x07\xE3\xF1\xC0\xE0\x70\x38\x1C\x0E\x07\xE3\xF1\xF8\xE0\x70\x38\x1C\x0F\xC7\x03\x81\xC0\xE0\x70\x38\x1C\x0F\xC7\x03\x81\xF8\xE0\x70\x38\x1C\x0F\xC7\x03\xF1\xC0\xE0\x70\x38\x1C\x0F\xC7\x03\xF1\xF8\xE0\x70\x38\x1C\x0F\xC7\xE3\x81\xC0\xE0\x70\x38\x1C\x0F\xC7\xE3\x81\xF8\xE0\x70\x38\x1C\x0F\xC7\xE3\xF1\xC0\xE0\x70\x38\x1C\x0F\xC7\xE3\xF1\xF8\xE0\x70\x38\x1F\x8E\x07\x03\x81\xC0\xE0\x70\x38\x1F\x8E\x07\x03\x81\xF8\xE0\x70\x38\x1F\x8E\x07\x03\xF1\xC0\xE0\x70\x38\x1F\x8E\x07\x03\xF1\xF8\xE0\x70\x38\x1F\x8E\x07\xE3\x81\xC0\xE0\x70\x38\x1F\x8E\x07\xE3\x81\xF8\xE0\x70\x38\x1F\x8E\x07\xE3\xF1\xC0\xE0\x70\x38\x1F\x8E\x07\xE3\xF1\xF8\xE0\x70\x38\x1F\x8F\xC7\x03\x81\xC0\xE0\x70\x38\x1F\x8F\xC7\x03\x81\xF8\xE0\x70\x38\x1F\x8F\xC7\x03\xF1\xC0\xE0\x70\x38\x1F\x8F\xC7\x03\xF1\xF8\xE0\x70\x38\x1F\x8F\xC7\xE3\x81\xC0\xE0\x70\x38\x1F\x8F\xC7\xE3\x81\xF8\xE0\x70\x38\x1F\x8F\xC7\xE3\xF1\xC0\xE0\x70\x38\x1F\x8F\xC7\xE3\xF1\xF8\xE0\x70\x3F\x1C\x0E\x07\x03\x81\xC0\xE0\x70\x3F\x1C\x0E\x07\x03\x81\xF8\xE0\x70\x3F\x1C\x0E\x07\x03\xF1\xC0\xE0\x70\x3F\x1C\x0E\x07\x03\xF1\xF8\xE0\x70\x3F\x1C\x0E\x07\xE3\x81\xC0\xE0\x70\x3F\x1C\x0E\x07\xE3\x81\xF8\xE0\x70\x3F\x1C\x0E\x07\xE3\xF1\xC0\xE0\x70\x3F\x1C\x0E\x07\xE3\xF1\xF8\xE0\x70\x3F\x1C\x0F\xC7\x03\x81\xC0\xE0\x70\x3F\x1C\x0F\xC7\x03\x81\xF8\xE0\x70\x3F\x1C\x0F\xC7\x03\xF1\xC0\xE0\x70\x3F\x1C\x0F\xC7\x03\xF1\xF8\xE0\x70\x3F\x1C\x0F\xC7\xE3\x81\xC0\xE0\x70\x3F\x1C\x0F\xC7\xE3\x81\xF8\xE0\x70\x3F\x1C\x0F\xC7\xE3\xF1\xC0\xE0\x70\x3F\x1C\x0F\xC7\xE3\xF1\xF8\xE0\x70\x3F\x1F\x8E\x07\x03\x81\xC0\xE0\x70\x3F\x1F\x8E\x07\x03\x81\xF8\xE0\x70\x3F\x1F\x8E\x07\x03\xF1\xC0\xE0\x70\x3F\x1F\x8E\x07\x03\xF1\xF8\xE0\x70\x3F\x1F\x8E\x07\xE3\x81\xC0\xE0\x70\x3F\x1F\x8E\x07\xE3\x81\xF8\xE0\x70\x3F\x1F\x8E\x07\xE3\xF1\xC0\xE0\x70\x3F\x1F\x8E\x07\xE3\xF1\xF8\xE0\x70\x3F\x1F\x8F\xC7\x03\x81\xC0\xE0\x70\x3F\x1F\x8F\xC7\x03\x81\xF8\xE0\x70\x3F\x1F\x8F\xC7\x03\xF1\xC0\xE0\x70\x3F\x1F\x8F\xC7\x03\xF1\xF8\xE0\x70\x3F\x1F\x8F\xC7\xE3\x81\xC0\xE0\x70\x3F\x1F\x8F\xC7\xE3\x81\xF8\xE0\x70\x3F\x1F\x8F\xC7\xE3\xF1\xC0\xE0\x70\x3F\x1F\x8F\xC7\xE3\xF1\xF8\xE0\x7E\x38\x1C\x0E\x07\x03\x81\xC0\xE0\x7E\x38\x1C\x0E\x07\x03\x81\xF8\xE0\x7E\x38\x1C\x0E\x07\x03\xF1\xC0\xE0\x7E\x38\x1C\x0E\x07\x03\xF1\xF8\xE0\x7E\x38\x1C\x0E\x07\xE3\x81\xC0\xE0\x7E\x38\x1C\x0E\x07\xE3\x81\xF8\xE0\x7E\x38\x1C\x0E\x07\xE3\xF1\xC0\xE0\x7E\x38\x1C\x0E\x07\xE3\xF1\xF8\xE0\x7E\x38\x1C\x0F\xC7\x03\x81\xC0\xE0\x7E\x38\x1C\x0F\xC7\x03\x81\xF8\xE0\x7E\x38\x1C\x0F\xC7\x03\xF1\xC0\xE0\x7E\x38\x1C\x0F\xC7\x03\xF1\xF8\xE0\x7E\x38\x1C\x0F\xC7\xE3\x81\xC0\xE0\x7E\x38\x1C\x0F\xC7\xE3\x81\xF8\xE0\x7E\x38\x1C\x0F\xC7\xE3\xF1\xC0\xE0\x7E\x38\x1C\x0F\xC7\xE3\xF1\xF8\xE0\x7E\x38\x1F\x8E\x07\x03\x81\xC0\xE0\x7E\x38\x1F\x8E\x07\x03\x81\xF8\xE0\x7E\x38\x1F\x8E\x07\x03\xF1\xC0\xE0\x7E\x38\x1F\x8E\x07\x03\xF1\xF8\xE0\x7E\x38\x1F\x8E\x07\xE3\x81\xC0\xE0\x7E\x38\x1F\x8E\x07\xE3\x81\xF8\xE0\x7E\x38\x1F\x8E\x07\xE3\xF1\xC0\xE0\x7E\x38\x1F\x8E\x07\xE3\xF1\xF8\xE0\x7E\x38\x1F\x8F\xC7\x03\x81\xC0\xE0\x7E\x38\x1F\x8F\xC7\x03\x81\xF8\xE0\x7E\x38\x1F\x8F\xC7\x03\xF1\xC0\xE0\x7E\x38\x1F\x8F\xC7\x03\xF1\xF8\xE0\x7E\x38\x1F\x8F\xC7\xE3\x81\xC0\xE0\x7E\x38\x1F\x8F\xC7\xE3\x81\xF8\xE0\x7E\x38\x1F\x8F\xC7\xE3\xF1\xC0\xE0\x7E\x38\x1F\x8F\xC7\xE3\xF1\xF8\xE0\x7E\x3F\x1C\x0E\x07\x03\x81\xC0\xE0\x7E\x3F\x1C\x0E\x07\x03\x81\xF8\xE0\x7E\x3F\x1C\x0E\x07\x03\xF1\xC0\xE0\x7E\x3F\x1C\x0E\x07\x03\xF1\xF8\xE0\x7E\x3F\x1C\x0E\x07\xE3\x81\xC0\xE0\x7E\x3F\x1C\x0E\x07\xE3\x81\xF8\xE0\x7E\x3F\x1C\x0E\x07\xE3\xF1\xC0\xE0\x7E\x3F\x1C\x0E\x07\xE3\xF1\xF8\xE0\x7E\x3F\x1C\x0F\xC7\x03\x81\xC0\xE0\x7E\x3F\x1C\x0F\xC7\x03\x81\xF8\xE0\x7E\x3F\x1C\x0F\xC7\x03\xF1\xC0\xE0\x7E\x3F\x1C\x0F\xC7\x03\xF1\xF8\xE0\x7E\x3F\x1C\x0F\xC7\xE3\x81\xC0\xE0\x7E\x3F\x1C\x0F\xC7\xE3\x81\xF8\xE0\x7E\x3F\x1C\x0F\xC7\xE3\xF1\xC0\xE0\x7E\x3F\x1C\x0F\xC7\xE3\xF1\xF8\xE0\x7E\x3F\x1F\x8E\x07\x03\x81\xC0\xE0\x7E\x3F\x1F\x8E\x07\x03\x81\xF8\xE0\x7E\x3F\x1F\x8E\x07\x03\xF1\xC0\xE0\x7E\x3F\x1F\x8E\x07\x03\xF1\xF8\xE0\x7E\x3F\x1F\x8E\x07\xE3\x81\xC0\xE0\x7E\x3F\x1F\x8E\x07\xE3\x81\xF8\xE0\x7E\x3F\x1F\x8E\x07\xE3\xF1\xC0\xE0\x7E\x3F\x1F\x8E\x07\xE3\xF1\xF8\xE0\x7E\x3F\x1F\x8F\xC7\x03\x81\xC0\xE0\x7E\x3F\x1F\x8F\xC7\x03\x81\xF8\xE0\x7E\x3F\x1F\x8F\xC7\x03\xF1\xC0\xE0\x7E\x3F\x1F\x8F\xC7\x03\xF1\xF8\xE0\x7E\x3F\x1F\x8F\xC7\xE3\x81\xC0\xE0\x7E\x3F\x1F\x8F\xC7\xE3\x81\xF8\xE0\x7E\x3F\x1F\x8F\xC7\xE3\xF1\xC0\xE0\x7E\x3F\x1F\x8F\xC7\xE3\xF1\xF8\xFC\x70\x38\x1C\x0E\x07\x03\x81\xC0\xFC\x70\x38\x1C\x0E\x07\x03\x81\xF8\xFC\x70\x38\x1C\x0E\x07\x03\xF1\xC0\xFC\x70\x38\x1C\x0E\x07\x03\xF1\xF8\xFC\x70\x38\x1C\x0E\x07\xE3\x81\xC0\xFC\x70\x38\x1C\x0E\x07\xE3\x81\xF8\xFC\x70\x38\x1C\x0E\x07\xE3\xF1\xC0\xFC\x70\x38\x1C\x0E\x07\xE3\xF1\xF8\xFC\x70\x38\x1C\x0F\xC7\x03\x81\xC0\xFC\x70\x38\x1C\x0F\xC7\x03\x81\xF8\xFC\x70\x38\x1C\x0F\xC7\x03\xF1\xC0\xFC\x70\x38\x1C\x0F\xC7\x03\xF1\xF8\xFC\x70\x38\x1C\x0F\xC7\xE3\x81\xC0\xFC\x70\x38\x1C\x0F\xC7\xE3\x81\xF8\xFC\x70\x38\x1C\x0F\xC7\xE3\xF1\xC0\xFC\x70\x38\x1C\x0F\xC7\xE3\xF1\xF8\xFC\x70\x38\x1F\x8E\x07\x03\x81\xC0\xFC\x70\x38\x1F\x8E\x07\x03\x81\xF8\xFC\x70\x38\x1F\x8E\x07\x03\xF1\xC0\xFC\x70\x38\x1F\x8E\x07\x03\xF1\xF8\xFC\x70\x38\x1F\x8E\x07\xE3\x81\xC0\xFC\x70\x38\x1F\x8E\x07\xE3\x81\xF8\xFC\x70\x38\x1F\x8E\x07\xE3\xF1\xC0\xFC\x70\x38\x1F\x8E\x07\xE3\xF1\xF8\xFC\x70\x38\x1F\x8F\xC7\x03\x81\xC0\xFC\x70\x38\x1F\x8F\xC7\x03\x81\xF8\xFC\x70\x38\x1F\x8F\xC7\x03\xF1\xC0\xFC\x70\x38\x1F\x8F\xC7\x03\xF1\xF8\xFC\x70\x38\x1F\x8F\xC7\xE3\x81\xC0\xFC\x70\x38\x1F\x8F\xC7\xE3\x81\xF8\xFC\x70\x38\x1F\x8F\xC7\xE3\xF1\xC0\xFC\x70\x38\x1F\x8F\xC7\xE3\xF1\xF8\xFC\x70\x3F\x1C\x0E\x07\x03\x81\xC0\xFC\x70\x3F\x1C\x0E\x07\x03\x81\xF8\xFC\x70\x3F\x1C\x0E\x07\x03\xF1\xC0\xFC\x70\x3F\x1C\x0E\x07\x03\xF1\xF8\xFC\x70\x3F\x1C\x0E\x07\xE3\x81\xC0\xFC\x70\x3F\x1C\x0E\x07\xE3\x81\xF8\xFC\x70\x3F\x1C\x0E\x07\xE3\xF1\xC0\xFC\x70\x3F\x1C\x0E\x07\xE3\xF1\xF8\xFC\x70\x3F\x1C\x0F\xC7\x03\x81\xC0\xFC\x70\x3F\x1C\x0F\xC7\x03\x81\xF8\xFC\x70\x3F\x1C\x0F\xC7\x03\xF1\xC0\xFC\x70\x3F\x1C\x0F\xC7\x03\xF1\xF8\xFC\x70\x3F\x1C\x0F\xC7\xE3\x81\xC0\xFC\x70\x3F\x1C\x0F\xC7\xE3\x81\xF8\xFC\x70\x3F\x1C\x0F\xC7\xE3\xF1\xC0\xFC\x70\x3F\x1C\x0F\xC7\xE3\xF1\xF8\xFC\x70\x3F\x1F\x8E\x07\x03\x81\xC0\xFC\x70\x3F\x1F\x8E\x07\x03\x81\xF8\xFC\x70\x3F\x1F\x8E\x07\x03\xF1\xC0\xFC\x70\x3F\x1F\x8E\x07\x03\xF1\xF8\xFC\x70\x3F\x1F\x8E\x07\xE3\x81\xC0\xFC\x70\x3F\x1F\x8E\x07\xE3\x81\xF8\xFC\x70\x3F\x1F\x8E\x07\xE3\xF1\xC0\xFC\x70\x3F\x1F\x8E\x07\xE3\xF1\xF8\xFC\x70\x3F\x1F\x8F\xC7\x03\x81\xC0\xFC\x70\x3F\x1F\x8F\xC7\x03\x81\xF8\xFC\x70\x3F\x1F\x8F\xC7\x03\xF1\xC0\xFC\x70\x3F\x1F\x8F\xC7\x03\xF1\xF8\xFC\x70\x3F\x1F\x8F\xC7\xE3\x81\xC0\xFC\x70\x3F\x1F\x8F\xC7\xE3\x81\xF8\xFC\x70\x3F\x1F\x8F\xC7\xE3\xF1\xC0\xFC\x70\x3F\x1F\x8F\xC7\xE3\xF1\xF8\xFC\x7E\x38\x1C\x0E\x07\x03\x81\xC0\xFC\x7E\x38\x1C\x0E\x07\x03\x81\xF8\xFC\x7E\x38\x1C\x0E\x07\x03\xF1\xC0\xFC\x7E\x38\x1C\x0E\x07\x03\xF1\xF8\xFC\x7E\x38\x1C\x0E\x07\xE3\x81\xC0\xFC\x7E\x38\x1C\x0E\x07\xE3\x81\xF8\xFC\x7E\x38\x1C\x0E\x07\xE3\xF1\xC0\xFC\x7E\x38\x1C\x0E\x07\xE3\xF1\xF8\xFC\x7E\x38\x1C\x0F\xC7\x03\x81\xC0\xFC\x7E\x38\x1C\x0F\xC7\x03\x81\xF8\xFC\x7E\x38\x1C\x0F\xC7\x03\xF1\xC0\xFC\x7E\x38\x1C\x0F\xC7\x03\xF1\xF8\xFC\x7E\x38\x1C\x0F\xC7\xE3\x81\xC0\xFC\x7E\x38\x1C\x0F\xC7\xE3\x81\xF8\xFC\x7E\x38\x1C\x0F\xC7\xE3\xF1\xC0\xFC\x7E\x38\x1C\x0F\xC7\xE3\xF1\xF8\xFC\x7E\x38\x1F\x8E\x07\x03\x81\xC0\xFC\x7E\x38\x1F\x8E\x07\x03\x81\xF8\xFC\x7E\x38\x1F\x8E\x07\x03\xF1\xC0\xFC\x7E\x38\x1F\x8E\x07\x03\xF1\xF8\xFC\x7E\x38\x1F\x8E\x07\xE3\x81\xC0\xFC\x7E\x38\x1F\x8E\x07\xE3\x81\xF8\xFC\x7E\x38\x1F\x8E\x07\xE3\xF1\xC0\xFC\x7E\x38\x1F\x8E\x07\xE3\xF1\xF8\xFC\x7E\x38\x1F\x8F\xC7\x03\x81\xC0\xFC\x7E\x38\x1F\x8F\xC7\x03\x81\xF8\xFC\x7E\x38\x1F\x8F\xC7\x03\xF1\xC0\xFC\x7E\x38\x1F\x8F\xC7\x03\xF1\xF8\xFC\x7E\x38\x1F\x8F\xC7\xE3\x81\xC0\xFC\x7E\x38\x1F\x8F\xC7\xE3\x81\xF8\xFC\x7E\x38\x1F\x8F\xC7\xE3\xF1\xC0\xFC\x7E\x38\x1F\x8F\xC7\xE3\xF1\xF8\xFC\x7E\x3F\x1C\x0E\x07\x03\x81\xC0\xFC\x7E\x3F\x1C\x0E\x07\x03\x81\xF8\xFC\x7E\x3F\x1C\x0E\x07\x03\xF1\xC0\xFC\x7E\x3F\x1C\x0E\x07\x03\xF1\xF8\xFC\x7E\x3F\x1C\x0E\x07\xE3\x81\xC0\xFC\x7E\x3F\x1C\x0E\x07\xE3\x81\xF8\xFC\x7E\x3F\x1C\x0E\x07\xE3\xF1\xC0\xFC\x7E\x3F\x1C\x0E\x07\xE3\xF1\xF8\xFC\x7E\x3F\x1C\x0F\xC7\x03\x81\xC0\xFC\x7E\x3F\x1C\x0F\xC7\x03\x81\xF8\xFC\x7E\x3F\x1C\x0F\xC7\x03\xF1\xC0\xFC\x7E\x3F\x1C\x0F\xC7\x03\xF1\xF8\xFC\x7E\x3F\x1C\x0F\xC7\xE3\x81\xC0\xFC\x7E\x3F\x1C\x0F\xC7\xE3\x81\xF8\xFC\x7E\x3F\x1C\x0F\xC7\xE3\xF1\xC0\xFC\x7E\x3F\x1C\x0F\xC7\xE3\xF1\xF8\xFC\x7E\x3F\x1F\x8E\x07\x03\x81\xC0\xFC\x7E\x3F\x1F\x8E\x07\x03\x81\xF8\xFC\x7E\x3F\x1F\x8E\x07\x03\xF1\xC0\xFC\x7E\x3F\x1F\x8E\x07\x03\xF1\xF8\xFC\x7E\x3F\x1F\x8E\x07\xE3\x81\xC0\xFC\x7E\x3F\x1F\x8E\x07\xE3\x81\xF8\xFC\x7E\x3F\x1F\x8E\x07\xE3\xF1\xC0\xFC\x7E\x3F\x1F\x8E\x07\xE3\xF1\xF8\xFC\x7E\x3F\x1F\x8F\xC7\x03\x81\xC0\xFC\x7E\x3F\x1F\x8F\xC7\x03\x81\xF8\xFC\x7E\x3F\x1F\x8F\xC7\x03\xF1\xC0\xFC\x7E\x3F\x1F\x8F\xC7\x03\xF1\xF8\xFC\x7E\x3F\x1F\x8F\xC7\xE3\x81\xC0\xFC\x7E\x3F\x1F\x8F\xC7\xE3\x81\xF8\xFC\x7E\x3F\x1F\x8F\xC7\xE3\xF1\xC0\xFC\x7E\x3F\x1F\x8F\xC7\xE3\xF1\xF8"; | |
imp.enableblinkup(false); | |
const clearString = "\xE0\x70\x38\x1C\x0E\x07\x03\x81\xC0\xE0\x70\x38\x1C\x0E\x07\x03\x81\xC0\xE0\x70\x38\x1C\x0E\x07\x03\x81\xC0"; | |
class neoPixels | |
{ | |
spi = null; | |
frameSize = null; | |
frame = null; | |
constructor(_spi, _frameSize) | |
{ | |
this.spi = _spi; | |
this.frameSize = _frameSize; | |
this.frame = blob(frameSize*27 + 1); | |
clearFrame(); | |
writeFrame(); | |
} | |
function writePixel(p, color) | |
{ | |
frame.seek(p*BYTESPERPIXEL); | |
local r = color[0] * BYTESPERCOLOR; | |
local g = color[1] * BYTESPERCOLOR; | |
local b = color[2] * BYTESPERCOLOR; | |
frame.writestring(bits.slice(g, g+BYTESPERCOLOR)); | |
frame.writestring(bits.slice(r, r+BYTESPERCOLOR)); | |
frame.writestring(bits.slice(b, b+BYTESPERCOLOR)); | |
} | |
function clearFrame(color = null) | |
{ | |
local colorString = clearString; | |
if (color) | |
{ | |
colorString = blob(BYTESPERPIXEL); | |
local r = color[0] * BYTESPERCOLOR; | |
local g = color[1] * BYTESPERCOLOR; | |
local b = color[2] * BYTESPERCOLOR; | |
colorString.writestring(bits.slice(g, g+BYTESPERCOLOR)); | |
colorString.writestring(bits.slice(r, r+BYTESPERCOLOR)); | |
colorString.writestring(bits.slice(b, b+BYTESPERCOLOR)); | |
} | |
frame.seek(0); | |
for (local p = 0; p < frameSize; p++) { | |
frame.writestring(colorString.tostring()); | |
} | |
frame.writen(0x00,'c'); | |
} | |
function writeFrame() | |
{ | |
spi.write(frame); | |
} | |
} | |
RED <- [255,0,0]; | |
const NUMPIXELS = 60; | |
const DELAY = 0.2; | |
// const DELAY = 1; | |
spi <- hardware.spi257; | |
spi.configure(MSB_FIRST, SPICLK); | |
pixelStrip <- neoPixels(spi, NUMPIXELS); | |
class Mode | |
{ | |
constructor() { } | |
function draw() | |
{ | |
pixelStrip.clearFrame(); | |
update(); | |
pixelStrip.writeFrame(); | |
imp.wakeup(DELAY, setMode); | |
} | |
} | |
class Kitt extends Mode | |
{ | |
length = null; | |
direction = 1; | |
offset = 0; | |
constructor(_length) { this.length = _length; } | |
function update() | |
{ | |
if(offset+length == NUMPIXELS) direction = -1; | |
if(offset == 0) direction = 1; | |
for(local i = offset; i < offset+length; i++) { | |
pixelStrip.writePixel(i, RED); | |
} | |
offset = offset + direction; | |
if(offset == NUMPIXELS) offset = 0; | |
} | |
} | |
function setMode() { kitt.draw(); } | |
kitt <- Kitt(6); | |
setMode(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment