Software > Vixen

32 channel ssr + 100 ic rgb + 2 codes + 1 ardunio = OOPS, PLEASE help .*solved *

<< < (2/2)

n1ist:
Try this.  It compiles, but I don't have the hardware to test it on...
Code: You are not allowed to view links. Register or Login#include <Adafruit_NeoPixel.h>    //  This is the Neo-Pixel library (ws2812)
                                  //  Change to the library for your pixel types
                                  //  Suggest using a library created by Adafruit
                                  //  so the function names will be the same                               
                                 
                                 
                                 
#define DPIN 11                    //  Change this to the pin# connected to your pixels DataIn
                                  //  Will probably need to define a ClockPin for other pixel


int   PixelCount = 100;             //  Set this to the number of Pixels connected

int   bugLevel  = 0;              //  This is just a way I manage turning debugging over serial on/off

 
const int numChannels = 32;
// List Arduino pins in Channel number order
int channels[numChannels] = {2,3,4,5,6,7,8,9,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45};

/*  Sets up the NeoPixel Strip object
 Replace with proper Object initiation for your pixel types */
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PixelCount, DPIN, NEO_RGB + NEO_KHZ800);   



void setup()
{
  delay(0);                    //  A delay for a reason I can't remember. I can live with one in the setup. 
  strip.begin();                 //  Get strip started
  strip.show();                  //  Initialize all pixels to 'off'
 
  Serial.begin(38400);          //  Start the Serial communication
  bugit("Setup Complete",10);    //  DEBUG: Confirm setup is complete


  for(uint8_t i = 0; i < numChannels; i++)
  {
    pinMode(channels[i], OUTPUT);
    // Start with lights turned off
    digitalWrite(channels[i],0);
  }
}



void loop()
{                                       // START LOOP
 
  bugit("Waiting for Header",10);     // DEBUG: Header waiting started
  waitForVixenHeader();               // Header check function
  bugit("VixStart Triggered",10);     //  DEBUG: Header found; getting color data
 
  // First 'numChannel' channels are relays
  for(uint8_t i = 0; i < numChannels; i++)
  {
    while (Serial.available() < 1)        // Wait for bytes to be received
    {
      delay(10);
    }
    digitalWrite(channels[i], Serial.read());
  }

  // Next 'PixelCount' sets of three channels are pixels
  for (int pixCount=0; pixCount<PixelCount;pixCount++)       // Do this for as many Pixels defined in PixelCount
  {
    int RGB[3];                             // Create array to hold this pixels RGB value                   
    for (int color = 0;color<3;color++)     // For the next 3 incoming bytes
    {                       
      while (Serial.available() < 1)        // Wait for bytes to be received
      {
        delay(10);
      }
      RGB[color] = Serial.read();           // Save this byte to the correct RGB value
    }                                       // Repeat until bytes for this pixels RGB value have been recieved

    strip.setPixelColor(pixCount,RGB[0],RGB[1],RGB[2]);  //Set this pixels new color
     
  }                                         // Repeat untill all pixels have had new RGB value set
  strip.show();                             // Update the strip and show with new color                             
                                            // YAY! DO IT AGAIN!
}                                              // END OF LOOP



/**
 *  FUNC    bugit           [manages printing of debugging based on debugging level]
 *  @param  String  bugstr  [string to be be printed]
 *  @param  int     blevel  [the level at which this debugging should be ignored]
 *   
*/


int bugit(String bugstr,int blevel)
{
  if (blevel < bugLevel)
  {
    Serial.println(bugstr);
  }
}


/**
 * I 'borrowed' snippets of this waitForVixenHeader() function from some code I found online
 * Can't find the originator now but thank you. It works well. 
 *
 * Based on the original waitForVixenHeader() provided, but does not write beyond the end of the buffer
 * Waits forever until it sees the header
 */
void waitForVixenHeader()
{
  uint8_t index = 0;

  const char *header="VIXStart";

  while (true)
  {
    if (Serial.available() == 0) continue; // Wait until we get a byte from Vixen
   
    if (header[index] != Serial.read())
    {
      index = 0;  // The byte we read doesn't match the 'nth' byte in the header, so start over
    }
    else
    {
      index++; // It's a match.  'index' bytes match so far
      if (index == 8) return;  // All bytes match.  We're done.  Let whoever called us get on with processing the data
    }
  }
}


--- End code ---
/mike

skykicker:
You are not allowed to view links. Register or LoginTry this.  It compiles, but I don't have the hardware to test it on...
Code: You are not allowed to view links. Register or Login#include <Adafruit_NeoPixel.h>    //  This is the Neo-Pixel library (ws2812)
                                  //  Change to the library for your pixel types
                                  //  Suggest using a library created by Adafruit
                                  //  so the function names will be the same                               
                                 
                                 
                                 
#define DPIN 11                    //  Change this to the pin# connected to your pixels DataIn
                                  //  Will probably need to define a ClockPin for other pixel


int   PixelCount = 100;             //  Set this to the number of Pixels connected

int   bugLevel  = 0;              //  This is just a way I manage turning debugging over serial on/off

 
const int numChannels = 32;
// List Arduino pins in Channel number order
int channels[numChannels] = {2,3,4,5,6,7,8,9,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45};

/*  Sets up the NeoPixel Strip object
 Replace with proper Object initiation for your pixel types */
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PixelCount, DPIN, NEO_RGB + NEO_KHZ800);   



void setup()
{
  delay(0);                    //  A delay for a reason I can't remember. I can live with one in the setup. 
  strip.begin();                 //  Get strip started
  strip.show();                  //  Initialize all pixels to 'off'
 
  Serial.begin(38400);          //  Start the Serial communication
  bugit("Setup Complete",10);    //  DEBUG: Confirm setup is complete


  for(uint8_t i = 0; i < numChannels; i++)
  {
    pinMode(channels[i], OUTPUT);
    // Start with lights turned off
    digitalWrite(channels[i],0);
  }
}



void loop()
{                                       // START LOOP
 
  bugit("Waiting for Header",10);     // DEBUG: Header waiting started
  waitForVixenHeader();               // Header check function
  bugit("VixStart Triggered",10);     //  DEBUG: Header found; getting color data
 
  // First 'numChannel' channels are relays
  for(uint8_t i = 0; i < numChannels; i++)
  {
    while (Serial.available() < 1)        // Wait for bytes to be received
    {
      delay(10);
    }
    digitalWrite(channels[i], Serial.read());
  }

  // Next 'PixelCount' sets of three channels are pixels
  for (int pixCount=0; pixCount<PixelCount;pixCount++)       // Do this for as many Pixels defined in PixelCount
  {
    int RGB[3];                             // Create array to hold this pixels RGB value                   
    for (int color = 0;color<3;color++)     // For the next 3 incoming bytes
    {                       
      while (Serial.available() < 1)        // Wait for bytes to be received
      {
        delay(10);
      }
      RGB[color] = Serial.read();           // Save this byte to the correct RGB value
    }                                       // Repeat until bytes for this pixels RGB value have been recieved

    strip.setPixelColor(pixCount,RGB[0],RGB[1],RGB[2]);  //Set this pixels new color
     
  }                                         // Repeat untill all pixels have had new RGB value set
  strip.show();                             // Update the strip and show with new color                             
                                            // YAY! DO IT AGAIN!
}                                              // END OF LOOP



/**
 *  FUNC    bugit           [manages printing of debugging based on debugging level]
 *  @param  String  bugstr  [string to be be printed]
 *  @param  int     blevel  [the level at which this debugging should be ignored]
 *   
*/


int bugit(String bugstr,int blevel)
{
  if (blevel < bugLevel)
  {
    Serial.println(bugstr);
  }
}


/**
 * I 'borrowed' snippets of this waitForVixenHeader() function from some code I found online
 * Can't find the originator now but thank you. It works well. 
 *
 * Based on the original waitForVixenHeader() provided, but does not write beyond the end of the buffer
 * Waits forever until it sees the header
 */
void waitForVixenHeader()
{
  uint8_t index = 0;

  const char *header="VIXStart";

  while (true)
  {
    if (Serial.available() == 0) continue; // Wait until we get a byte from Vixen
   
    if (header[index] != Serial.read())
    {
      index = 0;  // The byte we read doesn't match the 'nth' byte in the header, so start over
    }
    else
    {
      index++; // It's a match.  'index' bytes match so far
      if (index == 8) return;  // All bytes match.  We're done.  Let whoever called us get on with processing the data
    }
  }
}


--- End code ---
/mike

--- End quote ---

Mike by George i think you got
 thanks a ton could not have done it with out your help
how ever one small thing i had to do was change the baud rate to 19200, other wise it would randomly flash again'
cant thank you enough.
small test works once it is up and running will try to post a video, extremely pressed for time with my schedule.

Hope to have a couple of sequences done by Halloween.

Navigation

[0] Message Index

[*] Previous page

Go to full version