Circular matrix

Hi I want to make a circular matrix with 32 axis like this :
download

but i don't know how to it i want to write txt and show image in this display and i don't have a clue about what should i do. is this any library that can do this work?

this is maybe helpful about what i want to dohttps://www.youtube.com/watch?app=desktop&v=GK4q2c9FP28

If you look at the shape of each ‘pixel’… it’s basically a standard xy matrix with distorted pixels… some tall, some wider.

I think you make it with 32 addressable LED strips in a radial pattern. The density of these strips ( pixels per meter ) must be high, maybe these are miniature led strips instead of the normal 5mm LED strips.

I doubt it, you will have to write something yourself.

That is a big ask because the spacing between LEDs changes with the radial distance, so any text will have holes in the letters that depend on where in the display they are. In short if you try and write text it will look rubbish.

Do you mean actual pictures or drawings? Again this will look rubbish due to the uneven spacing. It is great however for abstract shapes that show off the nature of the display as the video showed.

agree with @Grumpy_Mike

say you take 32 led strips with 32 pixels

You arrange them in a circle

and you consider you have a 32 x 32 matrix on which to display something, without doing any specific maths. The geometry of the strips will distort the shape of whatever you send, but it will probably look cool :wink:

Looking at the video, it looks like the images does not actually distort as it moves through the center, but does have a brighter appearance because of the greater concentration of LEDs.

What you could try is mapping the location of the LEDs to specific pixels on a regular rectangular display, display the image, then have a function that reads the pixel data from the image buffer and transfers it to the LED buffer. It would take a massive amount of memory to implement a full color image buffer in memory, an alternative method is using an actual display that allows you to read back pixel data from the display itself. Some TFT displays allow this, and the MCUFRIEND_kbv library has functions to read the internal TFT display buffer.

@hossein8m - I made something that you might want...
@J-M-L - pattern 1 code crunched...

Who is smuggling I AM smuggling the algorithm!

Pattern 1: Colors determined by position inside three nested loops (boring, but tight):

void swirl_1() {
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < STRINGS; j++) {
      int dot = (j * STRING_SIZE) + j + (i * STRINGS);
      for (int k = 0; k < STRINGS; k++) {
        if (dot + k * STRING_SIZE > STRINGS * STRING_SIZE)
          dot = dot - STRINGS * STRING_SIZE;
        leds[dot + k * STRING_SIZE] =  CRGB(k*32, j*STRING_SIZE, i*256);
      }
      FastLED.show();
      delay(100);
    }
  }
  delay(100);
  FastLED.clear();
}

Pattern 2: RYB showing the spirals involved in Pattern 1...

void swirl_2() {
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < STRINGS; j++) {
      int dot = (j * STRING_SIZE) + j + (i * STRINGS);

      if (dot + 00 > STRINGS * STRING_SIZE)
        dot = dot - STRINGS * STRING_SIZE;
      leds[dot + 00] =  CRGB(255, 000, 000);
      if (dot + 16 > STRINGS * STRING_SIZE)
        dot = dot - STRINGS * STRING_SIZE;
      leds[dot + 16] =  CRGB(255, 255, 000);
      if (dot + 32 > STRINGS * STRING_SIZE)
        dot = dot - STRINGS * STRING_SIZE;
      leds[dot + 32] =  CRGB(000, 000, 255);
      // if (dot + 48 > STRINGS * STRING_SIZE)
      //   dot = dot - STRINGS * STRING_SIZE;
      // leds[dot+ 48] =  CRGB(255, 000, 255);
      // if (dot + 64 > STRINGS * STRING_SIZE)
      //   dot = dot - STRINGS * STRING_SIZE;
      // leds[dot+ 64] =  CRGB(000, 255, 000);
      // if (dot + 80 > STRINGS * STRING_SIZE)
      //   dot = dot - STRINGS * STRING_SIZE;
      // leds[dot+ 80] =  CRGB(000, 255, 255);
      // if (dot + 96 > STRINGS * STRING_SIZE)
      //   dot = dot - STRINGS * STRING_SIZE;
      // leds[dot+ 96] =  CRGB(255, 255, 255);
      // if (dot + 112 > STRINGS * STRING_SIZE)
      //   dot = dot - STRINGS * STRING_SIZE;
      // leds[dot+112] =  CRGB(255, 165, 000);

      FastLED.show();
      delay(100);
    }
  }
  delay(100);
  FastLED.clear();
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.