Vidor libraries and core updates

Hi everyone!
We just released an updated version of Vidor libraries to solve some nasty bug you may have encountered during these weeks; here's the complete changelog

## VidorGraphics and VidorPeripherals 1.1.0 release notes

* Fixed extended UART operations
* jtag communication speedup and cleanup (now based on libxsvf)

# VidorGraphics only:

* Added support for matrix arranged NeoPixels (see VidorNeoPixelMatrix.ino for an overview)

# API changes:

• VidorGFX alpha channel is now 8 bits wide (if you want maximum alpha you need to change 1 to 255)

We also updated samd-beta core to version 1.6.24
This update brings a great speedup for the usual compile/upload/test/modify loop; if you are working on the same bitstream now upload takes ~2 seconds
It also gets rid of a bunch of spurious warnings so compiling with "All warnings" enabled now makes sense :slight_smile:

Happy hacking!

Let me add that now gfx library works also on neopixels so you can draw lines, boxes, circles, text and so on directly on neopixel matrices!!!

as Martino wrote an example is in VidorNeoPixelMatrix.ino.

let us have your impressions!


I am working on a neopixel cube (125 pixels at the moment) which in the long term I hope to link to sounds, sensors and perhaps the camera. But to begin with the neopixel library seems to address the wrong neopixels. The neopixels are displayed in a non-sequential order. I wonder if you could help.

This code:

#include "VidorGraphics.h"
#include "Vidor_NeoPixel.h"

Vidor_NeoPixel np(125, 0); // The constructor allows you to set the control pin and the number of the LED's.

void setup() {

  while (!Serial) {}
  if (!FPGA.begin()) {
    Serial.println("Initialization failed!");
    while (1) {}
  Serial.println("Initialization Done!");
  for (int j = 0; j < 125; j++) {
    np.setPixelColor(j, 0, 0, 0, 0); // The function setPixelColor(led,red,green,blue,white) sets the desired color to a particular LED.
  np.setBrightness(20); // The np.setBrightness(int) function sets the brightness of all the LED's on the strip; //The function send the commands to the strips


void loop()  {
  for (uint16_t j = 0; j < 125; j++) {
    np.setPixelColor(j, 255, 255, 0, 1);;
    np.setPixelColor(j, 0, 0, 0, 1);;

produces different results to this on a circuitpython playground express:

num_pixels = 125  # Number of pixels driven from Crickit NeoPixel terminal
# The following line sets up a NeoPixel strip on Crickit CPX pin A1
pixels = neopixel.NeoPixel(board.A1, num_pixels, brightness=0.1,

while True:

    for x in range(0, 125):
        print ("pixel %d" % (x))
        pixels[x] = BLUE
        pixels[x] = (0,0,0)

Do you have any ideas?



Hi Matt,
Apparently code should do the same but there may be some hidden difference. I assume that your cube is wired in some optimize way, usually in a zigzag pattern. The way you are testing should light up LEDs in a sequential way, exactly as they're wired however you can use the matrix object that allows handling a 2d structure specifying it's zigzag pattern so that you can index pixels in an ordered way.
Please let me know if this helps