#include <lib_dmx.h> // comment/uncomment #define USE_UARTx in lib_dmx.h as needed
// This example receive 4 channels from address 1 to 4 and write analog values to PWM pins 2 to 5
// outputs update in main loop
//*********************************************************************************************************
// New DMX modes *** EXPERIMENTAL ***
//*********************************************************************************************************
#define DMX512 (0) // (250 kbaud - 2 to 512 channels) Standard USITT DMX-512
#define DMX1024 (1) // (500 kbaud - 2 to 1024 channels) Completely non standard - TESTED ok
#define DMX2048 (2) // (1000 kbaud - 2 to 2048 channels) called by manufacturers DMX1000K, DMX 4x or DMX 1M ???
#define buttonPin 6 // Pin button is connected to (other side of button connects to GND)
void setup()
{
pinMode(buttonPin,INPUT_PULLUP);
ArduinoDmx0.set_control_pin(22); // Arduino output pin for MAX485 input/output control (connect to MAX485 pins 2-3)
ArduinoDmx0.set_rx_address(1); // set rx0 dmx start address
ArduinoDmx0.set_rx_channels(8); // number of rx channels
ArduinoDmx0.init_rx(DMX512); // starts universe 0 as rx, NEW Parameter DMX mode
} //end setup()
void loop()
{
unsigned int baseChannel = 1; // Assume button not pressed
if (digitalRead(buttonPin) == LOW){
baseChannel = 5; // Button pressed so alter base address
}
//write values from dmx channels 1-4 universe 0 to arduino pwm pins 2-5
analogWrite(2, ArduinoDmx0.RxBuffer[baseChannel - 1]); //buffers 0 indexed
analogWrite(3, ArduinoDmx0.RxBuffer[baseChannel]);
analogWrite(4, ArduinoDmx0.RxBuffer[baseChannel + 1]);
analogWrite(5, ArduinoDmx0.RxBuffer[baseChannel + 2]);
} //end loop()
Thanks for idea. I will test it. You have chnaged number of receiving channel 3 to 8 & change in loop
Try your idea and see if it works.
As you have no DMX control over how many channels the desk sends then apart from the extra bytes for a bigger receive buffer it should not matter if you receive 4 or 8 bytes and select the 4 you want.