Page 3 of 3 FirstFirst 123
Results 21 to 22 of 22

Thread: Matrix Serial Read

  1. #21
    Join Date
    Mar 2015
    Location
    Kent, WA
    Posts
    29
    Post Thanks / Like

    Default Re: Matrix Serial Read

    here is the final code that finally worked

    Code:
    // header in vixen must be >>####<<  #### will be your total number of leds , 1224 for these 2 matrix, >>1224<<
    // Many thanks to all who helped at doityourselfchristmas.com
    // You must download and install the library from http://fastled.io/
    #include <FastLED.h>
    
    #define matrix_a 968                    // 22*44
    #define matrix_b 256                    // 8*32
    #define NUM_LEDS matrix_a + matrix_b    // 968+256=1224
    
    CRGB leds[matrix_a + matrix_b];         // 968+256=1224
    
    
    void setup() {
      // Define the speed of the serial port
      Serial.begin(115200);   //115200 worked now I'm checking 230400
    }
    
    void loop() {
      // Set some counter / temporary storage variables
      int cnt;
      unsigned int num_leds;
      unsigned int d1, d2, d3, d4;
    
      // Begin an endless loop to receive and process serial data
      for (;;) {
        // Set a counter to 0. This couter keeps track of the pixel colors received.
        cnt = 0;
        //Begin waiting for the header to be received on the serial bus
        //1st character
        while (!Serial.available());
        if (Serial.read() != '>') {
          continue;
        }
        //second character
        while (!Serial.available());
        if (Serial.read() != '>') {
          continue;
        }
        //get the first digit from the serial bus for the number of pixels to be used
        while (!Serial.available());
        d1 = Serial.read();
        //get the second digit from the serial bus for the number of pixels to be used
        while (!Serial.available());
        d2 = Serial.read();
        //get the third digit from the serial bus for the number of pixels to be used
        while (!Serial.available());
        d3 = Serial.read();
        //get the forth digit from the serial bus for the number of pixels to be used
        while (!Serial.available());
        d4 = Serial.read();
        //get the end of the header
        while (!Serial.available());
        if (Serial.read() != '<') {
          continue;
        }
        while (!Serial.available());
        if (Serial.read() != '<') {
          continue;
        }
        // calculate the number of pixels based on the characters provided in the header digits
        num_leds = (d1 - '0') * 1000 + (d2 - '0') * 100 + (d3 - '0') * 10 + (d4 - '0');
        // ensure the number of pixels does not exceed the number allowed
        if (num_leds > NUM_LEDS) {
          continue;
        }
    
        // CODE ADDED - tell FastLED there's 63 PIXEL leds on pin 8, starting at index 0 in the led array
        //    FastLED.addLeds<WS2811, 8, RGB>(leds, 0, NUM_LEDS_PER_STRIP);
        // CODE ADDED - tell FastLED there's 63 PIXEL leds on pin 9, starting at index 64 in the led array
        //    FastLED.addLeds<WS2811, 9, RGB>(leds, NUM_LEDS_PER_STRIP, NUM_LEDS_PER_STRIP);
        // CODE ADDED - tell FastLED there's 63 PIXEL leds on pin 10, starting at index 127 in the led array
        //    FastLED.addLeds<WS2811, 10, RGB>(leds, NUM_LEDS_PER_STRIP * 2, NUM_LEDS_PER_STRIP);
        // CODE ADDED - tell FastLED there's 63 PIXEL leds on pin 11, starting at index 190 in the led array
        //    FastLED.addLeds<WS2811, 11, RGB>(leds, NUM_LEDS_PER_STRIP * 3, NUM_LEDS_PER_STRIP);
        
        // CODE ADDED - tell FastLED there's 968 PIXEL leds on pin 8, starting at index 0 in the led array 
        FastLED.addLeds<WS2811, 8, GRB>(leds, 0, matrix_a);
        // CODE ADDED - tell FastLED there's 256 PIXEL leds on pin 10, starting at index 968 in the led array 
        FastLED.addLeds<WS2811, 10, GRB>(leds, matrix_a, matrix_b);
    
    
        do {
          while (!Serial.available());
          leds[cnt].r = Serial.read();
          while (!Serial.available());
          leds[cnt].g = Serial.read();
          while (!Serial.available());
          leds[cnt++].b = Serial.read();
        }
        while (--num_leds);   // Tell the FastLED Library it is time to update the strip of pixels
        FastLED.show();       // WOO HOO... We are all done and are ready to start over again!
      }
    }
    matrix code for non-serial, "just displays message"

    Code:
    #include <Adafruit_GFX.h>
    #include <Adafruit_NeoMatrix.h>
    #include <Adafruit_NeoPixel.h>
    
    #define PIN 3
    
    // MATRIX DECLARATION:
    // Parameter 1 = width of NeoPixel matrix
    // Parameter 2 = height of matrix
    // Parameter 3 = pin number (most are valid)
    // Parameter 4 = matrix layout flags, add together as needed:
    //   NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT:
    //     Position of the FIRST LED in the matrix; pick two, e.g.
    //     NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
    //   NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal
    //     rows or in vertical columns, respectively; pick one or the other.
    //   NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed
    //     in the same order, or alternate lines reverse direction; pick one.
    //   See example below for these values in action.
    // Parameter 5 = 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)
    
    Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(44, 22, PIN,
      NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
      NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
      NEO_GRB            + NEO_KHZ800);
    
    const uint16_t colors[] = {
      matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(255, 255, 0),matrix.Color(0, 0, 255), matrix.Color(255, 0, 255), matrix.Color(0, 255, 255), matrix.Color(255, 255, 255)};
    
    void setup() {
      matrix.begin();
      matrix.setTextWrap(false);  //"true" if multi-lines
      matrix.setBrightness(5);
      matrix.setTextColor(colors[0]);
    }
    
    int x    = matrix.width();
    int pass = 0;
    
    void loop() {
      matrix.fillScreen(0);    //Turn off all the LEDs
      matrix.setCursor(x, 0);
      matrix.print(F("Just Display This Message"));  //inside the "can be anything you want"
    
      if( --x < -30 ) {
        x = matrix.width();
    
        if(++pass >= 6) pass = 0;
        matrix.setTextColor(colors[pass]);
      }
      matrix.show();
      delay(30);
    }

    Again thanks to everyone for their help

  2. #22
    Join Date
    Dec 2011
    Posts
    7,340
    Post Thanks / Like

    Default Re: Matrix Serial Read

    Thank you for sharing this. It is great you figured this out .

Page 3 of 3 FirstFirst 123

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •