Difference between revisions of "Blog 24"

From BitWizard Wiki
Jump to navigation Jump to search
Line 13: Line 13:


Hardware used:
Hardware used:
*[http://bitwizard.nl/shop/index.php?route=product/product&product_id=161 WS2812 usb controller]
*WS2812 usb controller: [http://bitwizard.nl/shop/index.php?route=product/product&product_id=161 Shop link] | [[Usb ws2812|Wiki link]]
*RGB led strip
*RGB led strip
*Equipment wire
*Equipment wire

Revision as of 10:12, 7 January 2016

Working with RGB leds on the WS2812

For Linux/Raspberry:

apt-get install ckermit

If you use and other device, or want to know more:

C-Kermit

For Windows users it's optional to use:

PuTTY 

RGB lighted paper Tree

Hardware used:

Software used on my linux pc:

  • C-kermit


Making the construction

The RGB leds:

RGBTree1.jpg

On ////J7 a connector is added, also an cable from the J1 was connected on pin 15 with the second pin from J7. The image further on explains itself. You still have to look out, that you let the pointers point away from the usb ws2812.


Paper tree: The paper tree is made by folding a green paper. On the folded green paper I put my RGB led connection. Around the RGB led I draw a Christmas tree. At the point every single RGB led were laying I put a dot with a pencil. After that I cut the tree and put holes only on paper with the pencil dots. After that I used some scotch tape to bring it all together. The final result:

RGBTree2.jpg

You can of course go all crazy with the tree by adding glitters and stuff like that.


The code

The c-program RGBTree.c can be downloaded: here.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define WHITE  0xffffff
#define YELLOW 0xffff00
#define RED    0x800000
#define GREEN  0x008000
#define BLUE   0x0000ff
#define BLACK  0x000000 

int nfadesteps = 30;
int delayms = 30; 

int interpolate (int c1, int c2, int shift, int pos, int end)
{
  c1 >>= shift;
  c2 >>= shift;
  c1 &= 0xff;
  c2 &= 0xff;

  return c1 * (end-pos) / end + c2 * pos / end;
}

void fadeto (int pixnum, int col1, int col2)
{
   int i; 
   int r, g, b; 

   for (i=0;i <= nfadesteps;i++) {
      r = interpolate (col1, col2, 16, i, nfadesteps);
      g = interpolate (col1, col2,  8, i, nfadesteps);
      b = interpolate (col1, col2,  0, i, nfadesteps);
      printf ("pix %d %06x\n", pixnum, 
	 (r << 16) | (g << 8) | (b << 0)); 

      usleep (delayms*1000);
   }
}

int main (int argc, char **argv)
{
  int nleds = 10;
  int *pixels;
  int pixnum, newcolor;
  int i;
  
  if (argc > 1) 
    nleds = atoi (argv[1]);

  pixels = calloc (nleds, sizeof(int));
  
  printf ("pix %d %06x\n", nleds, WHITE);  

  for (i=0;i < nleds;i++){  
    if (random () % 2 == 0)
       pixels[i] = RED;
    else
       pixels[i] = GREEN;
    printf ("pix %d %06x\n", i, pixels[i]);  
  }

  while (1) {
     pixnum = random () % nleds; 
     if (pixels[pixnum] == RED) 
	newcolor = GREEN;
     else 
       newcolor = RED; 
     fadeto (pixnum, pixels[pixnum], newcolor);
     pixels[pixnum] = newcolor;
  }
  exit (0);

}
RGBThree.jpg

Useful links