Please leave feedback and comments. I am always interested to hear how people get on using these LScripts!

Monday, 3 September 2018

Arduino Project FX v1.0e [PublicRelease]

This is an early binary release of my arduino FX engine stripped to allow realtime effects seen on my youtube videos. A more extensive version is to come soon but until then this will give a taste of the engine running limited up to 600 leds.

  It requires an Arduino MEGA 2560 Rev 3 (ATmega2560), an SSD1306 0.96' I2C 128x32 OLED, three buttons to interface and 33ohm resistors for data protection.

  You can always find the latest version at

This is free software; you can redistribute it and/or modify it under the terms of the CC BY-NC-SA 3.0 license.

Please see the included documents for further information.

Commercial use of this software requires you to buy a license that will allow commercial use. This includes all classes,  modified or not, as a tool to sell products.


Documentation (PDF)
Binary for Arduino ATmega2560 (Zip)



    - SSD1306 I2C 128x32 OLED display (must be connected)
    - 3 button interface
    - Stack based processing
    - Accurate timing
    - Shared Memory engine
    - Cached / Delayed write EEPROM
    - Patch connected Buffer and Output
    - Simultaneous multiple signal pin out (Output)
    - Compatible with WS2811, WS2812, WS2812B
    - 27 FX Presets
    - 6 FX Plugins (currently unavailable)
    - Early implementation of FX plugins
    - Cycle Mode
    - Preset Mode
    - User customisation
    - Maximum LED limit of 600 nodes
    - 20 frames per second target playback
    - Colour / Hue selection
    - Menu engine
    - LED for information

Project FX (magic) is designed to be a simple stand alone self contained engine for running a christmas tree or trees with user editable presets. It is designed to run at a target of 20 frame per second tho this can be configured by presets.

It uses a stack engine (FX) to create complex effects that in next release will have Custom Mode and editor for creation of of effects by user and saved and reloaded allowing creation of many effects in real time as you edit. The presets already built in use this this stack to create effects and this will be built upon over time.

This uses a custom buffer, patch and output system and allows complex output configurations tho for this release it is currently configured as a single output for a stand alone tree use.

Source Code

  The source will become available once it has been documented and all goal features are ready and stable.

Parts List
  1) Arduino MEGA 2560 Rev 3 (ATmega2560)
  2) SSD1306 0.96' I2C 128x32 OLED
  3) 3 x Push buttons
  4) 33ohm resistors
  5) 100ohm resistors (optional protection)


  1. Looks good Stephen! Many hours of work I am sure. Thanks for sharing!

  2. Great work and thanks for sharing! I'm eager to try it on my Christmas setup.
    I was wondering: where did you find that useful white case for the oled display and the 3 buttons?

    1. Hi Max, Thank you. The case I modelled and 3D printed. It was just a quick while I work on it design that will in time probably change.

  3. Thanks so much for publishing ! Ironically I wont be home for Xmas this year. Shall definitely be testing though.
    I presume the 8 pins for signal out are a single 'channel'. Does this give a theoretical 8*600 nodes, albeit the 8 lines are mirrored ?

    1. Your welcome.

      The 8 pins on this release output the same data mirrored but the engine it runs on is capable of 8 different output to the pins of any order, forward or reversed on different pins as well as different led types. I restricted on this release because at the time I hadn't finished the onboard editor to configure things.

      The editor was left out because to use it it requires an SD card due to storage constraints of eeprom.

  4. Hello, Stephen Culley
    I have a few questions:
    Is it possible to connect only one channel of the garland?
    How do these two channels work - in parallel or in series?
    Is it possible to connect a different number of LEDs to each channel?

  5. Hi Stephen, thanks for making public, I have been eagerly watching and waiting via your Youtube video. I am having some issues with the display not resetting at bootup which results in garbage being displayed. It works sometimes after a lot of fiddling around. Doing some Google searching, this seems to be a known problem. Have you seen this issue?

    1. Hi, thank you for comment. I havn't seen this issue on the displays I have used so far. I have noticed loose connections on data can cause stops but once connection is fixed it resolved my problems. If you can email me any information I will look in to if the cause is my end or specific products.

      Email is under profile.

  6. Hi Stephen, thank you for sharing this project. The youtube video is amazing! And very inspiring!

    However, I still have quite some learning to do regarding electronic parts and programming, so I have some (very basic) questions:
    - The WS2811 50-led-pixel string you use is a 12V string that (at maximum) pulls 30W, I assume? (searching ebay it seems there are also 5V 15W WS2811 options available)
    - This means your power supply is able to provide at least 360W?
    - The picture on page 7 of the pdf shows 4 outputs: blue, yellow, red and green. The description mentions this setup can drive 600 leds, which means 150 leds (3 strings) per yellow, blue, green and red output, right?
    - The black box attached to the powersupply is a 12v to 5v converter and those 4 black 'things' are fuses?

    I ask you all these questions, because I want to DIY something similar: my personal goal this year is to be able to drive and program 2 strings (100 leds).

    If I may share some thoughts. An option for your project could be a touchscreen maybe, instead of buttons to select a light setup. Though, I doubt if that can be integrated easily, as I have not seen your code yet (I do not have a mega, only uno), and I am not sure if there are enough pins left on the mega to make all the connections. Another thing would be arduino controlled relays (preferably switched by a touch screen interface) to control more christmas accessories/ lightning.

    I look forward to a response, and more posts on this incredible blog!

    1. I use 12v leds because it allows longer runs with less voltage drop. It also requires less amps compared to 5v lights.

      I fuse all my leads for safety and so it wont affect all the lights.

      I have 4 sets of lights running off mine... but it is configured on this release to output the same data on all 8 signal pins. so 600leds * 8 pins but will all produce the same output.

      Touch screen would be nice but its a memory and speed issue. There just is not enough to go around. I will be adding some effect plugins to drive relays.. this is in my to do list. I intergrated a basic version for fog machine in current version I am working on but this is to be extended later. Currently making stable SD card use.

      Many thanx!

    2. Much thanks for your reply and for sharing this binary. I've flashed your binary and it's absolutely wonderful. I can't believe how someone is able to program such things.
      Though, as someone mentioned already, some presets on some occasions are to bright, demanding too much attention. A few other things for improvement: a preset 'static glow', a preset 'personal color' a personal selection of 3, 4 or 5 colors. And last, a possibility to select colors to include or exclude in 'random'. Now random is all or nothing and if you select a color it only displays that particular color; however being able deselect/select certain colors in 'random' would awesome. Nevertheless, the tree has never been this happy and beautfiul. Happy holidays.

    3. Your welcome... The current in progress version is allowing access to the editor and plugins that all the effects are built on but required SD card connected to work due to memory limits of Eeprom. But it allows completely custom effects and colours.

      The exclude from random is a good idea and I will look in to how that might be implemented.

      I still have bugs and a few changes to make to accomplish where I want my project to go but its getting there. Peoples input is muchly appreciated which was why the early release to get feed back.

    4. Hi Stephen,
      I managed to built/program my very first own script with the help of the Fastled library. I think my script is ugly, less user friendly (poorly defined (yet), no EEprom, no engines or PlugIns, but it does contain most these LED programs and a few different ones (20+ by now), along with cycle modes, adjustable color variations, adjustable speeds, a few color modes/ color arrays, glow settings, variable brightness, and more. So I can say I am very pleased and want to thank you as you inspired me, and put me in the right direction!

      A thing I also added and I find very convenient, is IR remote with a second uno. This way I can switch the whole device (powersupply etc.) on or off, and also (via serial connection) change brightness, colors, colormodes, enable cycle modes, speeds, etc. etc. just from the couch!

      One thing that might be relevant maybe, if you don't know already. More and more arduinos/processors are or have been released with more memory an example is the due, which is faster also. I have not tried a Due yet, as I currently I drive 100 leds at 60fps which is no problem, and I have no memory issues. However soon I am gonna try 300 leds, hope the mega can keep up.

      Have a nice day and thank you.

  7. Hello, Stephen Culley. you could describe in detail how to flash Arduino MEGA 2560
    And why in the archive two files?
    which of them need to flash

    1. If your device does not already have bootloader you can use the bootloader version and it will add bootloader... if you are updating via bootloader you can use normal binary. There are many documents on the Arduino forum on flashing.

      I connect my board via usb and use the tools with the IDE with commandline and the tools do the work.

  8. This comment has been removed by the author.

  9. How can you make only one way to the garland?

  10. Great project! Is it possible to do without buttons and a display so that the programs switch automatically?

    1. I have not tested but I beleive it will work headless. Once it is configured power off and disconnect buttons and display and it will probably run. I do have headless ability in newest version but currently have not set up a pin to control enable on it. So many things to get through the list just grows and grows!

      Hope that helps for now!

  11. Many thanks for the long-awaited binaries.
    I have only one wish: add a LED brightness level to config[]. Sometime indoors LEDS are too bright. Thnx.

    1. It is already added in next version. There are limits to how much you can fade lights and still animate them due to range of brightness inherent to the pixel design. But you can dim with not too much problem to around 60% and retain animtion smoothness. Beyond and you will see a stuttery jump colour fade.

      Still working on the built in editor and resolving SD card playback stability and saving and loading.

      Please enjoy binary's til new ones arrive :)

  12. Hi Stephen, thank you so much from my whole family for your wonderful Christmas project!
    We hope that this project is not abandoned and new releases will contain even more bewitching effects and opportunities!

  13. Hello, I've got a problem. The display on the screen is OK, the button are working good but I only have the 2nd led of my test strip ON (and in green). I Don't understand what's going on with it.
    Also, for the screen to work, I have to hook the screen on different pin than the one you say. SDA on SDA pin, SCL on the SCL pin, Power on the 3.3v from the Arduino mega and Ground, on one of the Ground Pin. Otherwise I Don't have a display at all.

    Thanks for sharing your amazing Christmas light show !

  14. Hi Stephen, any updates for this Christmas ?

  15. Thanks for a great product. I used it on my tree this Christmas(2019) with 200 leds. It's been a year since anything was released. Can you publish the source on github so we can continue the work?