Vixen and Arduino Mega + inexperience

Gabry59

New member
as required by RichieNorthcott public pc coView attachment 46787m setting and Vixen settingView attachment 46787
I connected individual LEDs to be exact 9 red LEDs starting from channel 3

#define CH01 2 #define CH02 3 #define CH03 4 #define CH04 5 #define CH05 6 #define CH06 7 #define CH07 8 #define CH08 9 #define CH09 10 #define CH10 11 #define CH11 12
#define CH12 13 #define CH13 A0 #define CH14 A1 #define CH15 A2 #define CH16 A3 #define CH17 A4 #define CH18 A5
// Up to here for Arduino uno.
#define CH19 A6 #define CH20 A7 #define CH21 A8 #define CH22 A9 #define CH23 A10 #define CH24 A11 #define CH25 A12 #define CH26 A13 #define CH27 A14 #define CH28 A15
#define CH29 22 #define CH30 23 #define CH31 24 #define CH32 25 #define CH33 26 #define CH34 27 #define CH35 28 #define CH36 29 #define CH37 30 #define CH38 31 #define CH39 32
#define CH40 33 #define CH41 34 #define CH42 35 #define CH43 36 #define CH44 37 #define CH45 38 #define CH46 39 #define CH47 40 #define CH48 41

int channels[] = {CH01, CH02, CH03, CH04, CH05 , CH06, CH07, CH08, CH09,
CH10, CH11, CH12, CH13, CH14, CH15, CH16, CH17, CH18, CH19, CH20, CH21, CH22,
CH23, CH24, CH25, CH26, CH27, CH28, CH29, CH30, CH31, CH32, CH33, CH34, CH35,
CH36, CH37, CH38, CH39, CH40, CH41, CH42, CH43, CH44, CH45, CH46, CH47, CH48
};

int incomingByte[CHANNEL_COUNT];
int i = 0; // Loop counter
volatile unsigned long timer_a = 0; // new line

//setup the pins/ inputs & outputs
void setup() {
// enable the watchdog timer with a time of 1 second. If the board freezes, it will reset itself after 1 second.
wdt_enable(WDTO_1S);
// specifically for the UNO
sei();
// initalize PWM Channels / Pins
for (i = 0; i < CHANNEL_COUNT; i++) {
pinMode(channels, OUTPUT);
}
// set all the realys to off to start with
if (MODE == NOT_INVERTED) {
for (i = 0; i < CHANNEL_COUNT; i++) {
digitalWrite(channels, LOW);
}
}
else {
for (i = 0; i < CHANNEL_COUNT; i++) {
digitalWrite(channels, HIGH);
}
}
testSequence();
// set up Serial according to the speed defined above.
Serial.begin(VIXEN_COM_SPEED);
}

void loop(){
if (Serial.available() >= (CHANNEL_COUNT + 2)) {
wdt_reset(); // resets the watchdog
timer_a = millis (); // new line
int uno = Serial.read();
if (uno == 126) {
int dos = Serial.read();
if (dos == 33) {
for (i = 0; i < CHANNEL_COUNT; i++) {
// read each byte
incomingByte = Serial.read();
}
if (MODE == NOT_INVERTED) {
for (i = 0; i < CHANNEL_COUNT; i++) {
int value = incomingByte;
if (value <= 127) {
digitalWrite(channels, LOW);
}
else {
digitalWrite(channels, HIGH);
}
}
}
else {
for (i = 0; i < CHANNEL_COUNT; i++) {
int value = incomingByte;
if (value < 127) {
digitalWrite(channels, HIGH);
}
else {
digitalWrite(channels, LOW);
}
}
}
}
}
}
// Random mode code. Random mode starts if no serial input has been received in TIME_OUT millisenconds
else {
wdt_reset(); // resets the watchdog
unsigned long diff = millis() - timer_a;
if (diff >= TIME_OUT) {
timer_a = millis ();
int random_a = 0;
for (i = 0; i < CHANNEL_COUNT; i++) {
random_a = random(0, 2);
if (random_a == 0) {
digitalWrite(channels, LOW);
}
else {
digitalWrite(channels, HIGH);
}
}
}
}
}


void testSequence() {
if (MODE == NOT_INVERTED) {
for (i = 0; i < CHANNEL_COUNT; i++) {
wdt_reset(); // resets the watchdog
digitalWrite(channels, HIGH);
delay (500);
digitalWrite(channels, LOW);
}
}
else {
for (i = 0; i < CHANNEL_COUNT; i++) {
wdt_reset(); // resets the watchdog
digitalWrite(channels, LOW);
delay (500);
digitalWrite(channels, HIGH);
}
}
}
I copied the program from the previous post. I connected individual LEDs to be exact 9 red LEDs starting from channel 3
The sketch includes a 'header' of -!, tonight I will do a test I had not headed it.
 

Attachments

  • COM number and setting.PNG
    COM number and setting.PNG
    29.2 KB · Views: 16
  • COM number and setting VIXEN.PNG
    COM number and setting VIXEN.PNG
    21.5 KB · Views: 20
After unhinged attempts by adding ~! It started working. Thank you for your help and I will try to learn more and more to improve this beautiful passion Thank you Gabry59
 
Sorry I had this wrong, good to hear you have it working. And thanks for the screen grabs, looks like everything is good. Yes this:

Code:
if (uno == 126) {
int dos = Serial.read();
if (dos == 33) {

is looking for byte values 126 and 33 consecutively as the header. The header is used to 'frame' the data so the sketch knows where the channel values start (as the data 'loops' continuously). Indeed this is '~!' not '-!' as I wrote. This goes in the 'header' config box in Vixen.
 
Last edited:
Hi, sorry for the delay in replying, the system has seen ~! And I managed to turn on the LED with music. Now for RGB strings I have no problems but problems begin with WS2811 strings. I have been following you for a long time and my dream would be to be able to make a 'mega tree' with at least 16 strings of 50 WS2811 LEDs for a total of at least 2400 pixels. all if it is possible with Arduino Mega. if arduino could not drive these 16 strings I was considering the purchase of a 'Flcon F16 v4' or similar. Thanks for the help Gabry59
 
Agree serial data/Arduino isn't the way to go for pixels. While the Mega gives you lots of outputs pins and memory (and sounds impressive!), it doesn't have any speed benefits over a regular nano/uno/micro. It's relatively old technology now.

If you have big plans for a large display you may be best off investing in a commercial controller TBH. You will be wanting to look at one of the other controller types in Vixen (or Xlights) like streaming ACN, not generic serial.

My own display uses multiple Arduino Nanos with wired ethernet shields, each controls 680 pixels in 4 strings of 170. So my tree (and whole display) is designed around that. The sketch takes a different approach than the FastLED library - it reads the incoming bytes and manipulates into a timed output in line with the WS2811 specification.

The ESP microcontroller range is another route to go, there's lots of information on here about that.
 
Last edited:
Hi, If I understand correctly the problem lies in the cycle time of the processor that is not enough to perform all operations. G59
 
Hi, If I understand correctly the problem lies in the cycle time of the processor that is not enough to perform all operations. G59

More or less. While I think that the Arduino could handle 2400 pixels (split into four 600-pixel output streams) with carefully crafted assembly-language code, it would be a pointless exercise in masochism.

The ESP-based solutions that other people have suggested would be a far better solution, particularly because it would be easier to find help on this site when you need it.
 
Thank you for the explanations now I buy a pair of ESP32 Wroom and start experimenting. However, a raspberry pi of the latest generation should be able to process many pixels. What do you think?? G59
 
Possibly yes - but you'll find much more support/code you can use on here for tried and tested solutions based around the ESP32. Programming to support pixels efficiently is not a trivial task since timing etc is crucial. Once you reach the limits of one device you can just add additional to your show network.

You might want to look at the digital-Quad as a possible solution which also includes other ancillaries you'll want like fuses for your various circuits.
https://quinled.info
 
Hi, I got the ESP32 ES-32S ESP-WROOM-32 card. I carried out some experiments with the Arduino IDE by turning on a led, commanding an LED via a button and so far so good. After I downloaded ESPixelStick but for the moment I did not understand how to do and how to act to program ESP32 to pilot ws2811. Now I'm trying to connect ESP32 to vixen via usb or wifi. If you have any advice it will always be welcome. regards G59
 
I haven't done it myself ever, but I think this is what you need:
https://forkineye.com/espixelstick-v3/
Remember the ESP32 are 3.3V devices so I suspect the ESPixelStick level-shifts the WS2811 output(s). You could equally do this via your own components.

You might also find this useful:
https://github.com/forkineye/ESPixelStick


You will only use the serial cable for the initial install, I believe the config is done in a web browser (your would access your microcontroller via its IP address).

On the controller side of things in Vixen you will need to add a Streaming ACN controller, and configure with your network settings. So your Vixen machine needs to be on the same network as your ESP32 device.
 
Last edited:
thanks, following some youtube movies, I managed to configure the ESP32, I managed to prepare a simple configuration of lights with XLiGHT.
The slip connects to the router via wfi and with the noteboock launch the seuenza.
Via notebook from ESP32 diagnostics I can see the effects.
The next step is the purchase of the power supply and several strings of WS2811 LEDs to test everything.
All configured as E1.31 with 5 universes, with 1-2550 channels. E1.31 is a communication protocol, the 5 universes?
The 2550 channels correspond to the pixels?????
here in Italy it is 24:00 so I go to sleep.
thanks and regards G59
 
Hi I apologize, I did not understand what is meant by universe and channels. By setting XLIGTS, E1.31 5 universes 1 - 2550 channels.
thanks G59
 
Thank you for your explanations.
I understood what universes and channels mean.
For the first tests with ESP32 I tried successfully (after explanations) with the ptotocollo E1.31.
Meanwhile, I had a result for the first Christmas project I'm already happy.
In the meantime I will try to understand what DDP and FPP mean.
I will look for posts that riuardano ESP32 and DDP / FPP.
Thanks again.
G59
 
Hi, I apologize for the trouble, I tried what I could for remote FPP that you recommended.
Unfortunately I did not understand much about it.
To date I used "ESPixelStick_Firmware-4.0-beta4" that has inatallato on an ESP32 a firmware that gave me the ability to connect XLIGTS or VIXEN with LEDs WS2811 eniziare on a small show.
Now I do not know how to proceed, I isto that you need a memory card, you need to download other software etc..
To date, the ESP32 connects with the router in WIFI but not with the notebook.
Thank regards G59
 
Hi, I got the paper holder, connected it and prepared a small sequence.
The sequence has been saved on paper.
At the time of operation the sequence did not work and the flashing of the string seemed random.
I disconnected the card and I connected a string of 50 leds WS2811 and I launched the application XLIGHTS but the leds turned on so not in accordance with the sequence set.
Has it happened to anyone?
Thank you G59
 
Hi, these are the settings of the ESP32.
Today he does not want to accept the memory card.
G59
 

Attachments

  • setting 2.jpg
    setting 2.jpg
    39.6 KB · Views: 9
Last edited:
Back
Top