sonyhome / fab_led Goto Github PK
View Code? Open in Web Editor NEWFast Arduino Bitbang LED library supports programmable LEDs (WS2812B, APA102...), color palettes for Arduino AVR
License: GNU General Public License v2.0
Fast Arduino Bitbang LED library supports programmable LEDs (WS2812B, APA102...), color palettes for Arduino AVR
License: GNU General Public License v2.0
It would be nice for some very easy example Scripts . That are easy to understand
For Example a single APA106 with some fixed colors
Blue, Red, Green, White, some Fading and Blinking.
Another Example the same for manyPort
Would be very usefull for all who dont use strips and want to use APA106 LED only for Status Lamp and saving some Digital Ports (one old RGB LED need 3) with the APA106 only one.
Thank you and Best Regards
I can confirm the library works on an Adafruit Trinket (attiny85-based, https://www.adafruit.com/product/1501) running at 8Mhz. So far I've only tried driving a single ws2812/sk6812 LED (https://www.adafruit.com/product/1938).
Currently Teensy 3.2 board looks like not supported. I've tried to compile the library with PlatformIO (platform = teensy, framework = arduino, board = teensy31) with these errors in result:
lib/FAB_LED/src/FAB_LED.h:684:1: error: prototype for 'void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::debug()' does not match any in class 'avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>'
avrBitbangLedStrip<FAB_TVAR>::debug(void)
^
lib/FAB_LED/src/FAB_LED.h:406:21: error: candidate is: template<short int high1, short int low1, short int high0, short int low0, long unsigned int minMsRefresh, avrLedStripPort dataPortId, unsigned char dataPortPin, avrLedStripPort clockPortId, unsigned char clockPortPin, pixelFormat colors, ledProtocol protocol> template<void (* printChar)(const char*), void (* printInt)(uint32_t)> static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::debug()
static inline void debug(void);
^
Is there any plan to add support for Teensy 3.2? Or do you have any ideas to quick-fix these errors (sorry, I'm not familiar with low-level programming so much)?
Hello.
I modified your example a bit.
Here it is.
To be honest, I'm mostly lost so far.
My setup is following: 12x WS2812b + 30x SK6812 in series.
Modified test do following:
All 12pixels of WS2812b light up by RED color, together with first 12pixels of SK6812 which lights WHITE and little, little bit of BLUE.
Wait one sec, Clean.
May be that after some good sleep I will understand more, but so far I'm stacked with NUMPIXELS.
Basically, both kind of strips have to be identical length, otherwise I'm not able to control them.
What I miss is simple declaration like this:
"light up pixel no.10, type WS2812b, color RGB 255,0,0"
"light up pixel no.12, type SK6812, color RGBW 0,0,10,255"
I didn't study your library much. All my current project used Adafruit library so far, so please apologize my silly questions.
B.R. Lukas
I tried to compile and upload the raw24Bit example but it just threw errors at me.
Here are the error messages:
In file included from test.ino:1:0: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:348:2: error: #error "Unsupported Architecture" #error "Unsupported Architecture" ^ In file included from test.ino:1:0: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:69:23: error: static data member ‘<anonymous struct>::type’ in unnamed class [-fpermissive] static const uint8_t type = PT_RGB; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:68:16: note: unnamed class defined here typedef struct { ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:77:23: error: static data member ‘<anonymous struct>::type’ in unnamed class [-fpermissive] static const uint8_t type = PT_GRB; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:76:16: note: unnamed class defined here typedef struct { ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:84:23: error: static data member ‘<anonymous struct>::type’ in unnamed class [-fpermissive] static const uint8_t type = PT_BGR; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:83:16: note: unnamed class defined here typedef struct { ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:92:23: error: static data member ‘<anonymous struct>::type’ in unnamed class [-fpermissive] static const uint8_t type = PT_RGB | PT_XXXW; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:91:16: note: unnamed class defined here typedef struct { ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:101:23: error: static data member ‘<anonymous struct>::type’ in unnamed class [-fpermissive] static const uint8_t type = PT_GRB | PT_XXXW; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:100:16: note: unnamed class defined here typedef struct { ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:110:23: error: static data member ‘<anonymous struct>::type’ in unnamed class [-fpermissive] static const uint8_t type = PT_BGR | PT_BXXX; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:109:16: note: unnamed class defined here typedef struct { ^ In file included from test.ino:1:0: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In constructor ‘avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::avrBitbangLedStrip()’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:654:41: error: there are no arguments to ‘SET_DDR_HIGH’ that depend on a template parameter, so a declaration of ‘SET_DDR_HIGH’ must be available [-fpermissive] SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:654:41: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated) /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:655:42: error: there are no arguments to ‘SET_DDR_HIGH’ that depend on a template parameter, so a declaration of ‘SET_DDR_HIGH’ must be available [-fpermissive] SET_DDR_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:656:41: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:657:42: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:660:28: error: there are no arguments to ‘FAB_DDR’ that depend on a template parameter, so a declaration of ‘FAB_DDR’ must be available [-fpermissive] FAB_DDR(dataPortId, 0xFF); // all pins out ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:661:29: error: there are no arguments to ‘FAB_PORT’ that depend on a template parameter, so a declaration of ‘FAB_PORT’ must be available [-fpermissive] FAB_PORT(dataPortId, 0x00); // all pins low ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:665:40: error: there are no arguments to ‘SET_DDR_HIGH’ that depend on a template parameter, so a declaration of ‘SET_DDR_HIGH’ must be available [-fpermissive] SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:666:42: error: there are no arguments to ‘SET_DDR_HIGH’ that depend on a template parameter, so a declaration of ‘SET_DDR_HIGH’ must be available [-fpermissive] SET_DDR_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:672:40: error: there are no arguments to ‘SET_DDR_HIGH’ that depend on a template parameter, so a declaration of ‘SET_DDR_HIGH’ must be available [-fpermissive] SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:673:40: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::spiSoftwareSendFrame(uint16_t, bool)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:830:40: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:832:39: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:836:41: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:837:42: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] SET_PORT_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::spiSoftwareSendBytes(uint16_t, const uint8_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:856:42: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:858:42: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:860:41: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:862:43: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] SET_PORT_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::twoPortSoftwareSendBytes(uint16_t, const uint8_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:901:58: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] if (isbitDhigh) SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:902:60: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] if (isbitChigh) SET_PORT_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:905:43: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:906:27: error: ‘sbiCycles’ was not declared in this scope DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:906:36: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:907:42: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:910:45: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] SET_PORT_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:911:27: error: ‘sbiCycles’ was not declared in this scope DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:911:36: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:912:44: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:914:28: error: ‘sbiCycles’ was not declared in this scope DELAY_CYCLES(high1 - 2*sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:914:37: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(high1 - 2*sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:915:41: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:916:43: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:917:27: error: ‘cbiCycles’ was not declared in this scope DELAY_CYCLES(low1 - 2*cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:917:36: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(low1 - 2*cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::eightPortSoftwareSendBytes(uint16_t, const uint8_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1120:31: error: there are no arguments to ‘FAB_PORT’ that depend on a template parameter, so a declaration of ‘FAB_PORT’ must be available [-fpermissive] FAB_PORT(dataPortId, onMask); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1121:25: error: ‘sbiCycles’ was not declared in this scope DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1121:34: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1123:32: error: there are no arguments to ‘FAB_PORT’ that depend on a template parameter, so a declaration of ‘FAB_PORT’ must be available [-fpermissive] FAB_PORT(dataPortId, bitmask); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1124:43: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES( high1 - high0 + sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1126:29: error: there are no arguments to ‘FAB_PORT’ that depend on a template parameter, so a declaration of ‘FAB_PORT’ must be available [-fpermissive] FAB_PORT(dataPortId, 0x00); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1128:24: error: ‘cbiCycles’ was not declared in this scope DELAY_CYCLES(low0 - cbiCycles - 20); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1128:38: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(low0 - cbiCycles - 20); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::onePortSoftwareSendBytes(uint16_t, const uint8_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1148:42: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1150:26: error: ‘sbiCycles’ was not declared in this scope DELAY_CYCLES(high1 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1150:35: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(high1 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1152:41: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1154:25: error: ‘cbiCycles’ was not declared in this scope DELAY_CYCLES(low1 - cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1154:34: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(low1 - cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1159:42: error: there are no arguments to ‘SET_PORT_HIGH’ that depend on a template parameter, so a declaration of ‘SET_PORT_HIGH’ must be available [-fpermissive] SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1161:26: error: ‘sbiCycles’ was not declared in this scope DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1161:35: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1163:41: error: there are no arguments to ‘SET_PORT_LOW’ that depend on a template parameter, so a declaration of ‘SET_PORT_LOW’ must be available [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1165:25: error: ‘cbiCycles’ was not declared in this scope DELAY_CYCLES(low0 - cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1165:34: error: there are no arguments to ‘DELAY_CYCLES’ that depend on a template parameter, so a declaration of ‘DELAY_CYCLES’ must be available [-fpermissive] DELAY_CYCLES(low0 - cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::clear(uint16_t)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1183:4: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1187:3: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::grey(uint16_t, uint8_t)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1197:2: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1201:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint8_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1211:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1213:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const rgbw*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1219:4: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; \ ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1262:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_4B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1279:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_4B’ SEND_REMAPPED_PIXELS_4B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1259:3: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1262:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_4B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1279:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_4B’ SEND_REMAPPED_PIXELS_4B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const grbw*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1219:4: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; \ ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1262:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_4B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1295:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_4B’ SEND_REMAPPED_PIXELS_4B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1259:3: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1262:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_4B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1295:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_4B’ SEND_REMAPPED_PIXELS_4B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const hbgr*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1219:4: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; \ ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1262:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_4B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1311:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_4B’ SEND_REMAPPED_PIXELS_4B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1259:3: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1262:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_4B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1311:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_4B’ SEND_REMAPPED_PIXELS_4B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const rgb*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1219:4: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; \ ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1263:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_3B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, ) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1327:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_3B’ SEND_REMAPPED_PIXELS_3B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1259:3: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1263:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_3B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, ) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1327:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_3B’ SEND_REMAPPED_PIXELS_3B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const grb*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1219:4: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; \ ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1263:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_3B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, ) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1340:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_3B’ SEND_REMAPPED_PIXELS_3B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1259:3: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1263:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_3B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, ) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1340:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_3B’ SEND_REMAPPED_PIXELS_3B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const bgr*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1219:4: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; \ ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1263:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_3B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, ) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1353:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_3B’ SEND_REMAPPED_PIXELS_3B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1259:3: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1263:51: note: in expansion of macro ‘SEND_REMAPPED_PIXELS’ #define SEND_REMAPPED_PIXELS_3B(numPixels, array) SEND_REMAPPED_PIXELS(numPixels, array, ) ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1353:3: note: in expansion of macro ‘SEND_REMAPPED_PIXELS_3B’ SEND_REMAPPED_PIXELS_3B(numPixels, array); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint32_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1364:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1378:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint8_t*, const uint8_t*, const uint8_t*, const uint8_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1406:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1431:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint8_t*, const uint8_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1456:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1476:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint8_t*, const T*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1500:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1520:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixelsRemap(uint16_t, const uint16_t*, const pixelType*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1534:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1539:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixelsRemap(uint16_t, const uint16_t*, const uint8_t*, const pixelType*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1559:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1569:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixelsRemap(uint8_t, const uint8_t*, const uint8_t*, const pixelType*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1589:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1599:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In static member function ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(int, uint16_t*)’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1618:3: error: ‘DISABLE_INTERRUPTS’ was not declared in this scope DISABLE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1629:2: error: ‘RESTORE_INTERRUPTS’ was not declared in this scope RESTORE_INTERRUPTS; ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In instantiation of ‘avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::avrBitbangLedStrip() [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u]’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1668:51: required from ‘ws2812b<dataPortId, dataPortBit>::ws2812b() [with avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortBit = 13u]’ test.ino:3:15: required from here /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:654:41: error: ‘SET_DDR_HIGH’ was not declared in this scope SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:655:42: error: ‘SET_DDR_HIGH’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] SET_DDR_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:654:41: note: ‘SET_DDR_HIGH’ declared here, later in the translation unit SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:656:41: error: ‘SET_PORT_LOW’ was not declared in this scope SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:657:42: error: ‘SET_PORT_LOW’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:656:41: note: ‘SET_PORT_LOW’ declared here, later in the translation unit SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:660:28: error: ‘FAB_DDR’ was not declared in this scope FAB_DDR(dataPortId, 0xFF); // all pins out ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:661:29: error: ‘FAB_PORT’ was not declared in this scope FAB_PORT(dataPortId, 0x00); // all pins low ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:665:40: error: ‘SET_DDR_HIGH’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:654:41: note: ‘SET_DDR_HIGH’ declared here, later in the translation unit SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:666:42: error: ‘SET_DDR_HIGH’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] SET_DDR_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:654:41: note: ‘SET_DDR_HIGH’ declared here, later in the translation unit SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:672:40: error: ‘SET_DDR_HIGH’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:654:41: note: ‘SET_DDR_HIGH’ declared here, later in the translation unit SET_DDR_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:673:40: error: ‘SET_PORT_LOW’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:656:41: note: ‘SET_PORT_LOW’ declared here, later in the translation unit SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In instantiation of ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::onePortSoftwareSendBytes(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:809:41: required from ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendBytes(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1212:44: required from ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’ test.ino:21:39: required from here /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1148:42: error: ‘SET_PORT_HIGH’ was not declared in this scope SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1150:35: error: ‘DELAY_CYCLES’ was not declared in this scope DELAY_CYCLES(high1 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1152:41: error: ‘SET_PORT_LOW’ was not declared in this scope SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1154:34: error: ‘DELAY_CYCLES’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] DELAY_CYCLES(low1 - cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1150:35: note: ‘DELAY_CYCLES’ declared here, later in the translation unit DELAY_CYCLES(high1 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1159:42: error: ‘SET_PORT_HIGH’ was not declared in this scope SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1161:35: error: ‘DELAY_CYCLES’ was not declared in this scope DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1163:41: error: ‘SET_PORT_LOW’ was not declared in this scope SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1165:34: error: ‘DELAY_CYCLES’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] DELAY_CYCLES(low0 - cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1161:35: note: ‘DELAY_CYCLES’ declared here, later in the translation unit DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In instantiation of ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::twoPortSoftwareSendBytes(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:814:41: required from ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendBytes(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1212:44: required from ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’ test.ino:21:39: required from here /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:901:58: error: ‘SET_PORT_HIGH’ was not declared in this scope if (isbitDhigh) SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:902:60: error: ‘SET_PORT_HIGH’ was not declared in this scope if (isbitChigh) SET_PORT_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:905:43: error: ‘SET_PORT_HIGH’ was not declared in this scope SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:906:36: error: ‘DELAY_CYCLES’ was not declared in this scope DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:907:42: error: ‘SET_PORT_LOW’ was not declared in this scope SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:910:45: error: ‘SET_PORT_HIGH’ was not declared in this scope SET_PORT_HIGH(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:911:36: error: ‘DELAY_CYCLES’ was not declared in this scope DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:912:44: error: ‘SET_PORT_LOW’ was not declared in this scope SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:914:37: error: ‘DELAY_CYCLES’ was not declared in this scope DELAY_CYCLES(high1 - 2*sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:915:41: error: ‘SET_PORT_LOW’ was not declared in this scope SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:916:43: error: ‘SET_PORT_LOW’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:915:41: note: ‘SET_PORT_LOW’ declared here, later in the translation unit SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:917:36: error: ‘DELAY_CYCLES’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] DELAY_CYCLES(low1 - 2*cbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:914:37: note: ‘DELAY_CYCLES’ declared here, later in the translation unit DELAY_CYCLES(high1 - 2*sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In instantiation of ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::eightPortSoftwareSendBytes(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:817:43: required from ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendBytes(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1212:44: required from ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’ test.ino:21:39: required from here /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1120:31: error: ‘FAB_PORT’ was not declared in this scope FAB_PORT(dataPortId, onMask); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1121:34: error: ‘DELAY_CYCLES’ was not declared in this scope DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1123:32: error: ‘FAB_PORT’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] FAB_PORT(dataPortId, bitmask); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1120:31: note: ‘FAB_PORT’ declared here, later in the translation unit FAB_PORT(dataPortId, onMask); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1124:43: error: ‘DELAY_CYCLES’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] DELAY_CYCLES( high1 - high0 + sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1121:34: note: ‘DELAY_CYCLES’ declared here, later in the translation unit DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1126:29: error: ‘FAB_PORT’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] FAB_PORT(dataPortId, 0x00); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1120:31: note: ‘FAB_PORT’ declared here, later in the translation unit FAB_PORT(dataPortId, onMask); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1128:38: error: ‘DELAY_CYCLES’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] DELAY_CYCLES(low0 - cbiCycles - 20); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1121:34: note: ‘DELAY_CYCLES’ declared here, later in the translation unit DELAY_CYCLES(high0 - sbiCycles); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h: In instantiation of ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::spiSoftwareSendBytes(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’: /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:820:37: required from ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendBytes(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:1212:44: required from ‘static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const uint8_t*) [with int high1 = 8; int low1 = 2; int high0 = 2; int low0 = 4; long unsigned int minMsRefresh = 20ul; avrLedStripPort dataPortId = (avrLedStripPort)4u; unsigned char dataPortPin = 13u; avrLedStripPort clockPortId = (avrLedStripPort)1u; unsigned char clockPortPin = 0u; pixelFormat colors = (pixelFormat)2u; ledProtocol protocol = (ledProtocol)1u; uint16_t = unsigned int; uint8_t = unsigned char]’ test.ino:21:39: required from here /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:856:42: error: ‘SET_PORT_LOW’ was not declared in this scope SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:858:42: error: ‘SET_PORT_HIGH’ was not declared in this scope SET_PORT_HIGH(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:860:41: error: ‘SET_PORT_LOW’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] SET_PORT_LOW(dataPortId, dataPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:856:42: note: ‘SET_PORT_LOW’ declared here, later in the translation unit SET_PORT_LOW(clockPortId, clockPortPin); ^ /home/erik/sketchbook/libraries/FAB_LED/FAB_LED.h:862:43: error: ‘SET_PORT_HIGH’ was not declared in this scope SET_PORT_HIGH(clockPortId, clockPortPin); ^
Please, make library more comfortable: write functions, like in NeoPixel library: they are simple to use.
Like: strip.clear(), strip.fill(255,255,255), strip.show(), strip.setPixelColor(pixel, 255,255,255)
Could you please help me get the APA102 option working? I use the "apa102.ino" example sketch with an Uno. I attach one APA102 LED to pin 6 and 5 per the sketch notes:
apa102<D,6,D,5> strip;
and use pins D6 DATA, D5 CLK.
The sketch does not run correctly, I just get a constant on green color. I tried modifying the sketch with serial print commands to debug, and found the loop is running correctly, and tried using different pins. I also increased the delay to 1 second and I get the same problem.
If I upload the Adafruit Dotstar library example sketch, the AF sketch runs perfectly, with the exact same hardware setup, and it runs on any pins.
In a nutshell:
I have a 16x16 WS2812b LEDs array I want to control with an ATtiny84.
I only display monochromatic images which can be of 3 different colors with the same brightness (red, green and white). That is, a only red image, a only white image or an only green image. (On OTHER libraries I'm running out of memory (SRAM/DRAM?), I can only control up to 112 LEDs.)
If I understood the docs correctly, I only need a 2-bit per pixel pallete (as this gives me 4 colors). That's (256 LEDs) x (2-bits/LEDs) = 512 bits = 64 bytes. Is this logic correct?
I dont fully follow the logic behind G_testPalette.ino
, it's a bit elaborated for me to be an example IMHO. Would someone help me out a bit on this task? I dont need the full working code, just a hint on how to define the LEDs.
Thank you in advance!
-A
There's a bug with the 3 byte pixels, likely missing pushing a blank w pixel.
I just would like to say thank you for your wonderful library.
It works like a charm, it is small and effective, easy-to-use.
Great work.
Péter
If anyone with good C/C++ experience wants to help maintain and improve this library it would be great to have more hands on deck.
Main goal:
Extended goals:
I'm using a bare ATmega328 board with the internal oscillator fuse set running at 8mhz. The FAB_LED library doesn't work. I've tried 3 other libraries all coded using assembly (light_ws2812, Adafruit_NeoPixel, FastLED) and all work properly on the same chip with the same settings. I've compiled in both Arduino and in GNU-AVR. It seems the code generation isn't correct. A pity, I really enjoy using this on the ATtiny85 and it works great at 16mhz.
Probably the documentation needs to be updated.
I need example for using two PIR motion sesors and WS2812B led (600 pixels in total). I tried Adafruit library and I was unable to go beyond 548 leds using Arduino Uno. One member in Arduino forum mentioned about this library but I cannot find sufficient example for my setup to work.
I'm working on a project using the sk6812 where I can't use the entire FAB_LED library.
I trying to use part of code , specifically sendByte().
For some reason, the LEDs flash, but this is not interference, because when I use the FAB_LED library, they work as they should
Does anyone know what the difference might be between using a function from a library and using a function directly?
Mi code (the definitions are directly from the FAB_LED library) :
#define sbiCycles 2
#define NS_PER_SEC 1000000000ULL
#define CYCLES_PER_SEC ((uint64_t) (F_CPU))
#define CYCLES(time_ns) (((CYCLES_PER_SEC * (time_ns)) + NS_PER_SEC - 1ULL) / NS_PER_SEC)
#define SK6812_1H_CY CYCLES(1210) // 500ns 1210ns-1510ns _----------__
#define SK6812_1L_CY CYCLES(200) // 125ns 200ns-500ns . . .
#define SK6812_0H_CY CYCLES(200) // 125ns 200ns-500ns _-----_______
#define SK6812_0L_CY CYCLES(1210) // 500ns 1210ns-1510ns . . .
#define SK6812_MS_REFRESH 84 // 84,000ns Minimum wait time to reset LED strip
#define SK6812_NS_RF 833333 // Max refresh rate for all pixels to light up 2msec (LED PWM is 500Hz)
void sendByte(uint8_t val){
for(int8_t b=7; b>=0; b--) {
const bool bit = (val>>b) & 0x1;
if (bit) { // Send a ONE
// HIGH with ASM sbi (2 words, 2 cycles)
PORTB |= (1 << STRIP_PIN); // STRIP_PINgoes high
// Wait exact number of cycles specified
__builtin_avr_delay_cycles(SK6812_1H_CY - sbiCycles);
// LOW with ASM cbi (2 words, 2 cycles)
PORTB &= ~(1 << STRIP_PIN); // STRIP_PINgoes low
// Wait exact number of cycles specified
__builtin_avr_delay_cycles(SK6812_1L_CY - sbiCycles );
} else { // Send a ZERO
// HIGH with ASM sbi (2 words, 2 cycles)
PORTB |= (1 << STRIP_PIN); // STRIP_PIN goes high
// Wait exact number of cycles specified
__builtin_avr_delay_cycles(SK6812_0H_CY - sbiCycles);
// LOW with ASM cbi (2 words, 2 cycles)
PORTB &= ~(1 << STRIP_PIN); // STRIP_PINgoes low
// Wait exact number of cycles specified
__builtin_avr_delay_cycles(SK6812_0L_CY - sbiCycles);
}
}
}
void sendLed(uint8_t r,uint8_t g,uint8_t b,uint8_t w){ //BRGW
sendByte(b);
sendByte(r);
sendByte(g);
sendByte(w);
}
void endTransmition(){ // automatic ended after 80µs
PORTB &= ~(1 << STRIP_PIN); // PD0 goes low
// Wait exact number of cycles specified
__builtin_avr_delay_cycles(CYCLES(833333)); //80µs
}
void fillAllLes(uint8_t r,uint8_t g,uint8_t b,uint8_t w){
for(int i = 0; i < LED_COUNT; i++ ){
sendLed(r,g,b,w);
}
endTransmition();
}
Library Code :
avrBitbangLedStrip<FAB_TVAR>::onePortSoftwareSendBytes(const uint16_t count, const uint8_t * array)
{
for(uint16_t c=0; c < count; c++) {
const uint8_t val = array[c];
for(int8_t b=7; b>=0; b--) {
const bool bit = (val>>b) & 0x1;
if (bit) {
// Send a ONE
// HIGH with ASM sbi (2 words, 2 cycles)
SET_PORT_HIGH(dataPortId, dataPortPin);
// Wait exact number of cycles specified
DELAY_CYCLES(high1 - sbiCycles);
// LOW with ASM cbi (2 words, 2 cycles)
SET_PORT_LOW(dataPortId, dataPortPin);
// Wait exact number of cycles specified
DELAY_CYCLES(low1 - cbiCycles);
} else {
// Send a ZERO
// HIGH with ASM sbi (2 words, 2 cycles)
SET_PORT_HIGH(dataPortId, dataPortPin);
// Wait exact number of cycles specified
DELAY_CYCLES(high0 - sbiCycles);
// LOW with ASM cbi (2 words, 2 cycles)
SET_PORT_LOW(dataPortId, dataPortPin);
// Wait exact number of cycles specified
DELAY_CYCLES(low0 - cbiCycles);
}
}
}
}
Thanks for the reply.
Tested:
Attiny84 with 16mhz crystal: Works as expected.
Attiny84 without crystal @ 8mhz: All LEDS bright white no matter what.
Attiny84 without crystal @ 1mhz: All LEDS bright white no matter what.
Any thoughts on on whether FAB_LED could be made to work on an ESP8266? Particularly looking at the NODEMCU devkits, which expose most of the pins. The Adafruit library is supposed to work (per http://www.instructables.com/id/ESP8266-controlling-Neopixel-LEDs-using-Arduino-ID/ ).
Installing the FAB_LED library and compiling the example AA_SimpleDemo against the NODEMCU device results in a slew of compile errors, most seeming to relate to digitalWriteFast.
Unfortunately I'm not familiar with this level of programming, so I can't investigate more deeply at the moment. Having a lighter-weight library on the versatile but resource-limited ESP8266 chip would be incredibly useful, though. Let me know if there's any way I can help.
I can get the same installation to work great on an uno, but i ran out of memory after 250 LED's (sk6812). So i upgraded to the Mega, and i cannot get the library to work. Any suggestions?
Thanks so much for the fantastic library!
Hello!
Is it possible to control many individual LEDs?
I don't want to make strips or led matrixes, I just want to place leds in certain places and I want to be able to control each one individually, some leds might display status from certain sensors, others might display twitter notifications maybe ?
Is this possible with this library.
(Disclaimer, just bought a batch of SK6812 and an ESP-14, never issued a microcontroller before and I don't own an Arduino, I do have an Raspberry Pi Zero W which I plan to control all my micro devices using ESPs, I am comfortable with programing PHP/JavaScript and others)
Thanks!
Hello! I really love how tidy and efficient FAB LED is, but I found a missed optimization in the core loops, where it loops over the individual bits of each color byte.
For example, here, in onePortSoftwareSendBytes
:
const uint8_t val = array[c];
for(int8_t b=7; b>=0; b--) {
const bool bit = (val>>b) & 0x1;
The problem is that AVR has no instruction to shift by more than 1 bit at a time, so val >> b
compiles to an additional loop that executes for every bit to be sent.
The extra loop can be eliminated by changing to:
uint8_t val = array[c];
for(uint8_t b=0; b<8; b++, val <<= 1) {
const bool bit = val & 0x80;
Hi, your lib looks great. Now I ordered a ESP32-POE and waiting for it. In the meantime I looking for a lib that support RGBW SK6812 LEDs and wana try the lib with a tiny or atmega.
Will the lib work later with esp32 too?
Ive tried various adaptions right in sources, replacing "" with spaces (suspect those are used for compiler to see 2 line code on 1 line) but after each modification i get new errors.
For starters, im using Uno and Pro mini but wont get compiler to work for neither of them,
heres a output...
Any ideas why ??
`
In file included from /Users/deko/Documents/Arduino/libraries/FAB_LED-master/Examples/0_simpleExamples/sk6812b/sk6812b.ino:31:0:
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h: In static member function 'static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const rgbw*)':
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:126: error: 'else' without a previous 'if'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1284:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h: In static member function 'static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const grbw*)':
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:126: error: 'else' without a previous 'if'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1303:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h: In static member function 'static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const hbgr*)':
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:126: error: 'else' without a previous 'if'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1322:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h: In static member function 'static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const rgb*)':
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:126: error: 'else' without a previous 'if'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1338:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const rgb' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1243:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1338:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const rgb' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1249:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1338:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const rgb' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1252:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1338:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h: In static member function 'static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const grb*)':
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:126: error: 'else' without a previous 'if'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1351:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const grb' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1243:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1351:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const grb' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1249:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1351:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const grb' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1252:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1351:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h: In static member function 'static void avrBitbangLedStrip<high1, low1, high0, low0, minMsRefresh, dataPortId, dataPortPin, clockPortId, clockPortPin, colors, protocol>::sendPixels(uint16_t, const bgr*)':
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:126: error: 'else' without a previous 'if'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1364:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const bgr' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1243:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1364:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const bgr' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1249:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1364:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1263:47: error: 'const bgr' has no member named 'w'
#define sendWhiteMacro sendBytes(1, &array[i].w)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1252:6: note: in definition of macro '_SEND_REMAPPED_PIXELS'
sendWhite;
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1264:91: note: in expansion of macro 'sendWhiteMacro'
#define SEND_REMAPPED_PIXELS_4B(numPixels, array) _SEND_REMAPPED_PIXELS(numPixels, array, sendWhiteMacro)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1266:131: note: in expansion of macro 'SEND_REMAPPED_PIXELS_4B'
#define SEND_REMAPPED_PIXELS(color, numPixels, array) if IS_PIXEL_FORMAT_3B(color) SEND_REMAPPED_PIXELS_3B(numPixels, array) else SEND_REMAPPED_PIXELS_4B(numPixels, array)
^
/Users/deko/Documents/Arduino/libraries/FAB_LED-master/FAB_LED.h:1364:3: note: in expansion of macro 'SEND_REMAPPED_PIXELS'
SEND_REMAPPED_PIXELS(colors, numPixels, array);
^
exit status 1
Error compiling for board Arduino/Genuino Uno.
`
I submitted a PR several months ago which adds support for what Arduino calls the "megaavr" architecture, including the Uno Wifi Rev. 2, Nano Every, numerous third party boards, and at least one upcoming official board as well. (this covers the megaAVR 0-series, tinyAVR 0, 1, and 2-series, the current flagship 8-bit parts in the AVR DA and DB-series, as well as the upcoming AVR DD-series low-pincount parts and upcoming AVR EA series (the first full-size parts with the fancy ADC the 2-series has). Since 2016, all AVR devices released have been of this architecture, and all new AVR products for the foreseeable future will be as well. With the tinyAVR range reaching down into 2k and 4k, (and the 8-pin parts limited to 4k) there's a good deal of interest in non-buffered libraries (my adaptation of Adafruit Neopixel doesn't cut it on those parts)
Thanks to your clear comments and the similarity between modern and classic AVRs, adding support for the new architecture was straightforward, and it's been tested by the person who originally reported the issue to me. Is there any chance of getting #35 merged?
Thanks
This repository has a copy of the GPL as "LICENSES," which is the standard way to indicate that the contents are licensed under the GPL. But FAB_LED.h has a comment at the top: "Licence: limited use is authorized for the purpose of beta testing." That statement isn't consistent with the GPL. Which is it? Are others allowed to modify, use, and redistribute this code like the GPL permits, or are we only allowed to use it (unmodified?) for beta testing? I'd quite like to use this library as part of a bigger open-source project, but I can't unless it's got a clear license that's compatible with the license covering the rest of the project.
Also, I'd encourage you to consider changing the license to MIT (which FastLED uses), LGPL 3.0 (which Adafruit_NeoPixel uses), or at the very least GPL 3.0. The choice of license is obviously yours to make, but GPL 2.0 code is incompatible with virtually all of the other licenses out there; it can't even be used in a GPL 3.0 project. If copyleft is important to you, LGPL preserves that for your code, while making it open to a much wider audience. There's a summary of various licenses at https://choosealicense.com/, which seems pretty good. (But their frontpage description of GPL is wrong: it doesn't just prohibit distributing closed-source programs, it prohibits using the code in anything that's not licensed under the same GPL license, which none of the other common licenses require.)
First of all thanks a million for this library!
I'm having difficulties in making your library work on an Arduino Nano with a 288 WS2812B led strip.
Due to memory limitations, I'm using the palette based implementation, but my led strip is flickering at the beginning, then behaving as expected mid way the loop()
function and finally behaving erratically at the end.
Here is my sketch, I tried to keep it simple for demonstration purposes:
#include <FAB_LED.h>
ws2812b<D,6> myLeds;
const uint16_t numPixels = 288;
const uint8_t bitsPerPixel = 4;
const uint8_t numColors = 1<<bitsPerPixel;
grb palette[2*numColors] = {};
uint8_t pixels[ARRAY_SIZE(numPixels, bitsPerPixel)];
void setup() {
myLeds.clear(numPixels);
for (uint8_t i = 0; i < numColors; i++) {
palette[i] = {255/i,0,0}; // gradient of green
}
}
void loop() {
for (uint8_t c = 0; c <= numColors; c++) {
for (uint16_t i = 0; i < numPixels; ++i) {
SET_PIXEL(pixels, i, bitsPerPixel, c);
myLeds.sendPixels<bitsPerPixel,grb>(numPixels, pixels, palette);
}
delay(1000);
}
}
I was expecting to see the strip fill up of green and then fill up again of a darker shade of green and so forth, down to black and then back again.
I started having a compilation issue in line 1523
sendBytes(bytesPerPixel, &palette[bytesPerPixel*colorIndex]);
Which I solved with a cast
sendBytes(bytesPerPixel, (uint8_t*)(&palette[bytesPerPixel*colorIndex]));
Either my fix is wrong and I don't understand your library principles or the problem lies somewhere else...
BTW, your library deserves some proper documentation: it is really promising for low memory consumption.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.