Need a Simple 16x16 LED Test

I am trying to help my 14-year-old. He is trying to light up a 16x16 LED matrix (WS2812), without luck. The code appears to compile and the Arduino Uno flashes. I've included the code and the compilation messages as attachments, since they are quite long, and I've also included a photo of the wiring. Is there a simple way to test the LED matrix just to make sure it's not a dud?

Any other suggestions welcome, including ideas about testing the wiring. Thank you!

wiring.jpg

16_by_16_leds.ino (4.04 KB)

compilation messages.txt (12.4 KB)

wiring.jpg

We need to see how it's wired & how it's powered.
Getting one long strip of 256 needs up to 15A power supply (256 LEDs x 0.06A/LED when on full).

Please read the guidelines for posting. This will tell you how to post your code.

Do not post .pdfs. Post photos as .png or .jpg, text as text.

Do not "zip" anything. Photo formats cannot be compressed. A picture of no less than four megapixels (minimum usable) will attach - and will in fact be automatically inserted into the post if in the correct format.

CrossRoads:
We need to see how it's wired & how it's powered.
Getting one long strip of 256 needs up to 15A power supply (256 LEDs x 0.06A/LED when on full).

Thanks for asking. I've added the wiring photo, and hope that you can see enough detail. The LED matrix is connected to 5V pin on the Arduino which is plugged in to a USB port on the iMac. Please forgive my ignorance -- this is not my hobby and I am trying to support my kid.

Paul__B:
Please read the guidelines for posting. This will tell you how to post your code.

Do not post .pdfs. Post photos as .png or .jpg, text as text.

Do not "zip" anything. Photo formats cannot be compressed. A picture of no less than four megapixels (minimum usable) will attach - and will in fact be automatically inserted into the post if in the correct format.

Paul__B:
Please read the guidelines for posting. This will tell you how to post your code.

Do not post .pdfs. Post photos as .png or .jpg, text as text.

Do not "zip" anything. Photo formats cannot be compressed. A picture of no less than four megapixels (minimum usable) will attach - and will in fact be automatically inserted into the post if in the correct format.

My apologies. I did read the guidelines for posting (before my first post) and did not see anything about PDFs. The attachment function lists PDF as an allowed file type, so I thought it was okay. I have updated the post to include the compilation message in txt format. I've left the code in an attachment as it is quite long. The guidelines for posting suggest that this is appropriate. If you have more specific recommendations, please just let me know.

Yes, we can see the photo now. It was probably added into the post when you attached it.

If you read the instructions again, you will find how to post your code into the posting proper so that people can examine it.

Noting that the display requires substantial power - a quarter of an Amp with all pixels black and 15 Amps if all LEDs full white, I do not see any power supply for it provided in your picture. :astonished: Mind you a proper picture as I suggested rather then the thumbnail provided would be more useful. :roll_eyes:

The purpose of PDFs is to format documents in order for them to be printed on paper; they are not able to be embedded (easily) in Web pages though Firefox and some other browsers can render them separately. They are commonly used to prevent extraction of the information contained, as with a fax image. :sunglasses:

Paul__B, where should he attach the power supply? This information was somehow not included in the directions he is following, so he imagined that the computer was powering the LEDs through the Arduino.

I am sorry that I do not know how to create the proper picture you request. The "preview" software on the Mac will allow me to resize the image by pixels, but not megapixels. If a megapixel is indeed equal to one million pixels, then a 4x4 megapixel image would be 4Mx4M pixels, and this value is too large for the software. I am obviously misunderstanding something.

Here is the code inline with the message.

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN 6

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(256, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code


  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  //colorWipe(strip.Color(255, 0, 0), 50); // Red
 // colorWipe(strip.Color(0, 255, 0), 50); // Green
  //colorWipe(strip.Color(0, 0, 255), 50); // Blue
//colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
  // Send a theater pixel chase in...
 // theaterChase(strip.Color(127, 127, 127), 50); // White
  //theaterChase(strip.Color(127, 0, 0), 50); // Red
  //theaterChase(strip.Color(0, 0, 127), 50); // Blue

  rainbow(20);
  //rainbowCycle(20);
  //theaterChaseRainbow(50);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i  ) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j  ) {
    for(i=0; i<strip.numPixels(); i  ) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j  ) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i  ) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j  ) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q  ) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j  ) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q  ) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

The power supply - note you need a substantial one (15 Amps at regulated 5 V) to really proceed with this project - connects to the two wires in the middle of the display board. Then you do not connect the 5 V wire to the Arduino UNO, just the ground and data wires.

Too late tonight to check your code!

That makes sense. What kind of power supply do you recommend for 15 Amps at regulated 5 V?
I am hoping that this does not have to be a shopping project. :slight_smile:

Update: We found a helpful video (How to Wire a Cheap Power Supply - YouTube) and made some purchases. Thank you for your patience with me. It's hard to support a kid with this kind of ambition.

upseyed_down:
It's hard to support a kid with this kind of ambition.

Could be. It means you have to learn things too! :grinning:

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