wordclock_esp8266
Software for a Wordclock based on ESP8266 and Neopixel LEDs with PONG, TETRIS, SNAKE game modes
Patterns for NeoPixel strips and matrixes including the patterns of the NeoPattern Example by Adafruit.
git clone https://github.com/ArminJo/NeoPatterns.gitArminJo/NeoPatternsThis is an extended version version of the NeoPattern example by Adafruit.
New Patterns are added, a snake game running on a matrix is included and you can run multiple patterns simultaneously on the same strip.
Available as Arduino library "NeoPatterns".
The original SCANNER pattern is extended and includes the CYLON as well as the ROCKET or FALLING_STAR pattern. The more versatile STRIPES pattern replaces the old THEATER_CHASE one.
See UserPattern example.
the included NeoPixel library is an extensions of the Adafruit NeoPixel library and supports multiple virtual NeoPixel (and NeoPattern) objects on one physical strip. It also contains a lot of useful functions like:
WS2812 require a 800 kHz bit signal and 24 bit per LED, resulting in 30 µs (33 kHz) per LED. An 8 bit strip requires 0.24 ms and a 8x8 matrix 1.92 ms (520 Hz). For 550 LEDs we get 60 Hz refresh rate.
First, you need to install "Adafruit NeoPixel" library with Tools -> Manage Libraries... or Ctrl+Shift+I. Use "neoPixel" as filter string. Then install this "NeoPatterns" library with Tools -> Manage Libraries... (Ctrl+Shift+I). Use "NeoPatterns" as filter string.
Origin (0,0) of x and y values is at the top left corner and the positive direction is right and DOWN.
Pixel mappings definitions and semantics are taken from https://github.com/adafruit/Adafruit_NeoMatrix/blob/master/Adafruit_NeoMatrix.h Here you find also mappings for tiled display with multiple matrices.
Examples for LED index to position mappings:
ProgressiveMapping ZigzagTypeMapping
Regular Mirrored Regular Mirrored
Bottom/Right Bottom/Left
15 14 13 12 12 13 14 15 12 13 14 15 15 14 13 12
11 10 9 8 8 9 10 11 11 10 9 8 8 9 10 11
7 6 5 4 4 5 6 7 4 5 6 7 7 6 5 4
3 2 1 0 0 1 2 3 3 2 1 0 0 1 2 3
All matrix pixel mappings except NEO_MATRIX_COLUMNS are supported
In case you need NEO_MATRIX_COLUMNS layout, try to rotate your Matrix and use NEO_MATRIX_ROWS or use your own custom mapping function.
multiple definitions linker errorsIn order to support compile options more easily, the line #include <NeoPatterns.h>
or MatrixNeoPatterns.hpp or MatrixSnake.hpp must be changed to #include <NeoPatterns.hpp>,
but only in your main program (aka *.ino file with setup() and loop()), like it is done in the examples.
In all other files you must use #include <NeoPatterns.h> etc., otherwise you will get tons of "multiple definition" errors.
Take care that all macros you define in your main program before #include <NeoPatterns.hpp> etc. ,
e.g. DO_NOT_USE_MATH_PATTERNS should also be specified before the NeoPatterns.h include,
otherwise the include may not work as expected!
To customize the library to different requirements, there are some compile options / macros available.
These macros must be defined in your program before the line #include <NeoPixel.hpp> or #include MatrixNeoPixel.hpp to take effect.
Modify them by enabling / disabling them, or change the values if applicable.
| Name | Default value | Description |
|---|---|---|
DO_NOT_SUPPORT_RGBW |
disabled | Disables RGBW pixels support. Activate it, if you only have RGB pixels. Saves up to 428 bytes program memory for the AllPatternsOnMultiDevices example. |
DO_NOT_SUPPORT_BRIGHTNESS |
disabled | Disables the brightness functions. Saves up to 428 bytes program memory for the AllPatternsOnMultiDevices example. |
DO_NOT_SUPPORT_NO_ZERO_BRIGHTNESS |
disabled | Disables the special brightness functions, which sets a dimmed pixel to 0 only if brightness or input color was zero, otherwise it is clipped at e.g. 0x000100. Saves up to 144 bytes program memory for the AllPatternsOnMultiDevices example. |
NEO_KHZ400 |
0x0100 | If you do not require the legacy 400 kHz functionality, you can disable the line 138 #define NEO_KHZ400 0x0100 ///< 400 KHz data transmission in Adafruit_NeoPixel.h. This saves up to 164 bytes program memory for the AllPatternsOnMultiDevices example. |
These macros must be defined in your program before the line #include <NeoPatterns.hpp> or #include MatrixNeoPatterns.hpp or #include MatrixSnake.hpp to take effect.
Modify them by enabling / disabling them, or change the values if applicable.
| Name | Default value | Description |
|---|---|---|
ENABLE_PATTERN_<Pattern name> |
all | Selection of individual pattern(s) to be enabled for your program. You can specify multiple pattern. See NeoPatterns.h |
ENABLE_MATRIX_PATTERN_<Pattern name> |
all | Selection of individual matrix pattern(s) to be enabled for your program. You can specify multiple pattern. See MatrixNeoPatterns.h |
ENABLE_SPECIAL_PATTERN_<Pattern name> |
all | Selection of individual special pattern(s) (currently only snake pattern) to be enabled for your program. You can specify multiple pattern. See MatrixSnake.h |
ENABLE_NO_NEO_PATTERN_BY_DEFAULT |
disabled | Disables the default selection of all non matrix NeoPattern patterns if no ENABLE_PATTERN_ is specified. Enables the exclusively use compilation of matrix NeoPattern. |
ENABLE_NO_MATRIX_AND_NEO_PATTERN_BY_DEFAULT |
disabled | Disables default selection of all matrix and non matrix NeoPattern patterns if no ENABLE_PATTERN_ or ENABLE_MATRIX_PATTERN_ is specified. Thus it enables the exclusively use of special Snake pattern which saves program memory. |
DO_NOT_USE_MATH_PATTERNS |
disabled | Disables the BOUNCING_BALL pattern. Saves from 0 bytes up to 1140 bytes program memory, depending if floating point and sqrt() are already used otherwise. |
SUPPORT_ONLY_DEFAULT_GEOMETRY |
disabled | Disables other than default geometry, i.e. Pixel 0 is at bottom right of matrix, matrix is row major (horizontal) and same pixel order across each line (no zig-zag). Saves up to 560 bytes program memory and 3 bytes RAM. |
These macros must be defined in your program before the line #include MatrixSnake.hpp to take effect.
Modify them by enabling / disabling them, or change the values if applicable.
| Name | Default value | Description |
|---|---|---|
ENABLE_PATTERNS_FOR_SNAKE_AUTORUN |
disabled | Selects all matrix and non matrix NeoPattern patterns used for the snake game. |
ENABLE_USER_SNAKE_SOLVER |
disabled | Disables the built in solver function getNextSnakeDirection() and enables the user provided solver function. |
WOKWI online simulation of the AllPatternOnOneBar example

WOKWI online simulation of the MatrixDemo example

WOKWI online simulation of the SnakeGame example
The examples are available at File > Examples > Examples from Custom Libraries / NeoPatterns.
Shows all NeoPatterns included in the NeoPatterns library randomly on one 16 pixel bar.
Shows all patterns for strips rings and matrixes included in the NeoPattern MatrixNeoPattern and Snake library.
Brightnes can be set by a voltage at pin A0.
Uses the included allPatternsRandomHandler() to show all available patterns.
AllPatternsOnMultiDevices on breadboard

Extended version of the OpenLedRace "version Basic for PCB Rome Edition. 2 Player, without Boxes Track".
See also the dedicated repository for OpenLedRace.
OpenLedRace at the Cologne public library MINTköln-Festival

The game can be controlled by 2 or 4 buttons or by serial input (WASD) on the keboard.
For keyboard control, start the Python script in the extras folder of the library with RunPythonKeybordForInput.cmd.
This script sends a wasd key press immediately and does not wait for a return or a press of the send button, as the Arduino Serial Monitor does.
The experimental script Joystick2Serial.py converts game controller input to appropriate serial output for the game.
After 7 seconds of inactivity after boot, the Snake demo with a simple AI is started.
SnakeGame with 4 buttons on breadboard

This example renders a slow "background pattern" and a fast "foreground pattern" on the same strip.
It also shows, how to dynamically determine the length of the attached strip und to resize a parent pixel buffer.
With the SnakeAutorun example you can prove your skill to write an AI to solve the Snake game. Just put your code into the getNextSnakeDirection() function.
UnderlyingNeoPixelObject to ParentNeoPixelObject.TWINKLE, which did not clear the last pixel.allPatternsRandomHandler().TWINKLE.setCompensatedInterval() and copyRegion().ColorWipeD() to ColorWipeDuration() etc. and new FadeDuration() etc.setBrightnessValue() to setBrightness().Interval is now signed.random8() from FastLED.getActualNeopixelLenghtSimple(), clearAndShow(), setMatrixPixelColorAndShow() and testMapping().SNOW pattern.USER_PATTERN1 and USER_PATTERN2 and new UserPattern example.aRepetitions to pattern RainbowCycle.printConnectionInfo(), fillRegion(), stop() and stopAllPatterns().updateAll* and updateAndWait* functions.updateOrRedraw() does never call show().FLASH.PATTERN_* to MATRIX_PATTERN_*.initMultipleFallingStars().random().fillRegion(), isActive() and setAdafruitBrightnessValue().FADE.ENABLE_PATTERN_<pattern_name> to enable reducing size, if some patterns are not used.NeoPatterns.cpp to NeoPatterns.hpp to enable easy configuration by main program.decrementTotalStepCounter().NeoPatterns::initMultipleFallingStars().NeoPixel::fillRegion(), NeoPatterns::isActive() and NeoPixel::setAdafruitBrightnessValue().SnowMatrix pattern.FireMatrix pattern.SUPPORT_ONLY_DEFAULT_GEOMETRY compile option.DIRECTION_NONE.#define SUPPORT_RGBW or defining DO_NOT_SUPPORT_RGBW saves 400 bytes program memory for the AllPatternsOnMultiDevices example.Print * instead of Stream *.addPixelColor().NeoPixel::printInfo(aSerial).*D functions, which take the duration of the whole pattern as argument.init() functions.updateAllPartialPatterns().NeoPatterns(NeoPixel *aUnderlyingNeoPixelObject). Swapped 4. and 5. parameter to make it consistent to the NeoPixel signature.setPixelOffsetForPartialNeoPixel() in NeoPixel.cpp added.drawBar() in NeoPixel.cpp added.Stripes().HEARTBEAT and BOUNCING_BALL added.Fire().UserPattern.getPatternName() added.printPatternName() added.Stripes() and reset ActivePattern to PATTERN_NONE at the end of each pattern.The library examples are tested with GitHub Actions for the following boards:
more like this
Software for a Wordclock based on ESP8266 and Neopixel LEDs with PONG, TETRIS, SNAKE game modes
Arduino library and MATLAB/Simulink API for the AutomationShield Arduino expansion boards for control engineering educa…
An extensible hotkey macropad inspired by the Macropad Hotkeys example from the Adafruit Learning System Guide
search projects, people, and tags