Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 3 of 3

Thread: OctoWS2811 scrolling text?

  1. #1
    Junior Member
    Join Date
    Dec 2016
    Posts
    4

    OctoWS2811 scrolling text?

    Hi

    Any suggestions how to implement scrolling text with the OctoWS2811 adapter and teensy 3.2 pleaase?
    I use ws8211 leds, for tests I use array 9x9, all leds are connected to pin 2 as a one zigzag strip.
    Thank you
    Best
    Grzegorz

  2. #2
    Senior Member crees's Avatar
    Join Date
    Dec 2016
    Location
    Utah
    Posts
    145
    Look at serial with glediator or jinx. If your more adventurous look at adding a w5200/w5500 module and using artnet or sACN to communicate your software to the teensy/octo

  3. #3
    Senior Member mortonkopf's Avatar
    Join Date
    Apr 2013
    Location
    London, uk
    Posts
    887
    Hi there. For standard Octows2811 setup, you can use the following to generate scolling text:

    Code:
     #include "OctoWS2811.h"
    
    //fixed values for octoWS2811
    const int ledsPerStrip = 60;
    DMAMEM int displayMemory[ledsPerStrip*6];
    int drawingMemory[ledsPerStrip*6];
    const int config = WS2811_GRB | WS2811_800kHz;
    OctoWS2811 leds(ledsPerStrip, displayMemory, drawingMemory, config);
    
    //=== F O N T ===//
        /*for ease of reading the code the font could be placed under a seperate 
          tab using the add tab and then using #include*/
    byte alphabets [96] [5]  = {
      { 0x00, 0x00, 0x00, 0x00, 0x00 }, // space  (0x20)
      { 0x00, 0x00, 0x2F, 0x00, 0x00 }, // !
      { 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
      { 0x14, 0x7F, 0x14, 0x7F, 0x14 }, // #
      { 0x24, 0x2A, 0x7F, 0x2A, 0x12 }, // $
      { 0x23, 0x13, 0x08, 0x64, 0x62 }, // %
      { 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
      { 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
      { 0x00, 0x1C, 0x22, 0x41, 0x00 }, // (
      { 0x00, 0x41, 0x22, 0x1C, 0x00 }, // (
      { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
      { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
      { 0x00, 0x50, 0x30, 0x00, 0x00 }, // ,
      { 0x08, 0x08, 0x08, 0x08, 0x08 }, // -
      { 0x00, 0x30, 0x30, 0x00, 0x00 }, // .
      { 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
    
      { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0  (0x30)
      { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
      { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
      { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
      { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
      { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
      { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
      { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
      { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
      { 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
      { 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
      { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
      { 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
      { 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
      { 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
      { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
    
      { 0x32, 0x49, 0x79, 0x41, 0x3E }, // @  (0x40)
      { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
      { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
      { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
      { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
      { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
      { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
      { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
      { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
      { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
      { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
      { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
      { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
      { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
      { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
      { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
    
      { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P  (0x50) //edited - replace 0x3F with 0x7F
      { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
      { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
      { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
      { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
      { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
      { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
      { 0x3F, 0x40, 0x30, 0x40, 0x3F }, // W
      { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
      { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
      { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
      { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
      { 0x02, 0x04, 0x08, 0x10, 0x20 }, // backslash
      { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
      { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
      { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
    
      { 0x00, 0x01, 0x02, 0x04, 0x00 }, // `  (0x60)
      { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
      { 0x7F, 0x50, 0x48, 0x48, 0x30 }, // b
      { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
      { 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
      { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
      { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
      { 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
      { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
      { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
      { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
      { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
      { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
      { 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
      { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
      { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
    
      { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p  (0x70)
      { 0x08, 0x14, 0x14, 0x08, 0x7C }, // q
      { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
      { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
      { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
      { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
      { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
      { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
      { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
      { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
      { 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
      { 0x00, 0x08, 0x36, 0x41, 0x00 }, // {
      { 0x00, 0x00, 0x7F, 0x00, 0x00 }, // |
      { 0x00, 0x41, 0x36, 0x08, 0x00 }, // }
      { 0x30, 0x08, 0x10, 0x20, 0x18 }, // ~
      { 0x7F, 0x55, 0x49, 0x55, 0x7F }  // unknown char (0x7F)  
    };//==end of font array==//
    
    //fixed values for scrolling text
    String inData = "";
    int rows = 8;
    int strip =ledsPerStrip;//strip length
    int pix[8] = {strip-1,(strip*2)-1,(strip*3)-1,(strip*4)-1,(strip*5)-1,(strip*6)-1,(strip*7)-1,(strip*8)-1};
    int del = 7; 
    //#define BLACK    0x000000
    //#define RED 0xFF0000
    int Colour1 = Color(random(1,100),random(1,100),random(1,100));
    char msg[] = " OctoWS2811. Scrolling text using a character lookup table for alphabet. # $ @ * etc...  ";
    char leng[120];// non-dynamic string length reference
    
    void setup() {
    leds.begin(); // start the ws2811 library
      delay(200);
    }//==end of setup==//
    
    void loop() {
    
    texttest(msg);
    }//==end of loop==//
    
    void texttest(char msg[]){  
    //==Start of message setup==//
      for (int charIndex=0; charIndex < (sizeof(leng)-1); charIndex++) //start of charIndex setup
      { 
        int  alphabetIndex = msg[charIndex]- ' ';
        if (alphabetIndex < 0) alphabetIndex=0;
     bool isOn =0;
      for (int col=0; col < 6;col++) {
    
    //==START OF SET METHOD==//
     for(int row=0; row<rows ;row++){
       if (col<5) isOn = bitRead( alphabets[alphabetIndex][col], row ) == 1;
    leds.setPixel(pix[row], isOn*Colour1);
    leds.show();delay(1);
      }
      
    //==START OF THE SCROLL METHOD==//
    for(int a=0; a<rows; a++){
      for(int b=1; b<ledsPerStrip;b++){
        int a1 = a*ledsPerStrip;
    leds.setPixel(((a1+b)-1),leds.getPixel(a1+b));}
    
          }//end of Scroll Method
        }//end of Set Method
      }//end of message setup
    }//end of texttest
    
    //------- HELPER FUNCTION------//
    // Create a 24 bit color value from R,G,B ////these strips are BRG
    unsigned int Color(byte r, byte g, byte b)
    {
      //Take the lowest 8 bits of each value and append them end to end
    return( ((unsigned int)g & 0x1F )<<16 | ((unsigned int)b & 0x1F)<<8 | (unsigned int)r & 0x1F);
      }
    Using just the one pin, you could probably change the section I called "set method". in here, add in a loop that changes the direction of assigning the next 9 leds each time by counting first set of 9, then count doen from 17 to 9, then swap again. this would be used on the setPixel.

Posting Permissions

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