Project in progress
DMXino Handheld Tester

DMXino Handheld Tester © GPL3+

DMX512 tester display / receive or transmit the level of 1 of 512 DMX control channels.

  • 1,899 views
  • 0 comments
  • 5 respects

Components and supplies

Necessary tools and machines

MA Lighting 2 port Node
MA Lighting GMA1 onPC Software
Cable, DMX 5M/3F XLR, Shielded
Cable, DMX 5F/3M XLR, Shielded

Apps and online services

MA Lighting onPC Software
Conceptinetics.h DMX library

About this project

DMX512 has proven a rugged, reliable serial data interface specification for two decades now. Adopted as a standard in the entertainment lighting industry, it is often the best and most convenient way to control OEM equipment.

Having a small handheld tester is crucial to troubleshooting any system.

This collection of shields and associated code provide the basis for a simple tester. The "Select" button toggles between the Transmit and Recieve modes of operation. The "UP" and "DOWN" buttons provide scrolling channel selection, while the "LEFT" and "RIGHT" keys provide adjustment of the selected channels intensity.

In some of the documentation the 4 Relay Shield is shown, preparation for a future project.

Code

DMXino 3.0Arduino
DMX Handheld Tester
/*
 *******************************************************************************
    DMXino DMX512 Transmitter / Reciever
 ***************************************************************************** */

// set Variables used throughout program:

const int ledPin =  13; //non dim indicator of current channel status

// Variables that will change:

int dimmer_val;         //Value to be output in Transmit Mode
int CHNumber = 1;       //channel number in either mode
float  ChannelValuePER; //recieved channel value percent
int ChannelValuePERint; //recieved channel value percent integer
int TesterMode = 1;     // Mode Flag (Transmit/Recieve)`

#include <LiquidCrystal.h>

// Select the pin used on LCD

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define the buttons;

int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

//read the button value
int read_LCD_buttons()
{
  adc_key_in = analogRead(0);          // read analog A0 value
  // when read the 5 key values in the vicinity of the following0,144,329,504,741
  // By setting different threshold, you can read the one button

  if (adc_key_in < 50)   return btnRIGHT;
  if (adc_key_in < 250)  return btnUP;
  if (adc_key_in < 450)  return btnDOWN;
  if (adc_key_in < 650)  return btnLEFT;
  if (adc_key_in < 850)  return btnSELECT;
  return btnNONE;
}
#include <Conceptinetics.h>

//
// CTC-DRA-13-1 ISOLATED DMX-RDM SHIELD JUMPER INSTRUCTIONS
//
// If you are using the above mentioned shield you should
// place the RXEN jumper towards G (Ground), This will turn
// the shield into read mode without using up an IO pin
//
// The !EN Jumper should be either placed in the G (GROUND)
// position to enable the shield circuitry
//   OR
// if one of the pins is selected the selected pin should be
// set to OUTPUT mode and set to LOGIC LOW in order for the
// shield to work
//

//
//
//
#define DMX_SLAVE_CHANNELS   512
#define DMX_MASTER_CHANNELS  512
//
#define RXEN_PIN                2

//DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS );
// If you are using an IO pin to control the shields RXEN
// the use the following line instead
DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS , RXEN_PIN );

// Configure a DMX master controller, the master controller
// will use the RXEN_PIN to control its write operation
// on the bus
DMX_Master        dmx_master ( DMX_MASTER_CHANNELS, RXEN_PIN );




void setup()
{
   // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  
  // Enable DMX slave interface and start recording
  // DMX data


  // Set start address, this is also the default setting
  // You can change this address at any time during the program
  dmx_slave.setStartAddress (CHNumber);
  dmx_master.setChannelRange ( 1, 512, 00 );

  lcd.begin(16, 2);           //This routine initializes the display,
  lcd.setCursor(0, 0);        //
  lcd.print("DMXino TESTER");
  lcd.setCursor(0, 1);
  lcd.print("DMX512");
  delay(1000);
  // scroll 16 positions (string length) to the left
  // to move it offscreen left:
  for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
    // scroll one position left:
    lcd.scrollDisplayRight();
    // wait a bit:
    delay(30);

  }
  lcd.begin(16, 2);     //Start in recieve mode
  RecieveMode();
}


void loop()
{

  if (TesterMode == 1)
  {
    RecieveMode();
  }
  if (TesterMode == 0)
  {
    TransmitMode();
  }
  // ************LCD BUTTON INPUT************


  lcd_key = read_LCD_buttons();  // read key

  switch (lcd_key)               // display key
  {
    case btnRIGHT:
      {
        lcd.setCursor(13, 1);
        lcd.print("   " );
        dimmer_val++;
        delay (200);
        break;
      }
    case btnLEFT:
      {
        lcd.setCursor(13, 1);
        lcd.print("   " );
        dimmer_val--;
        delay (200);
        break;
      }
    case btnUP:
      {
        if   (CHNumber  < 512)
        {
          lcd.setCursor(5, 1);
          lcd.print("   " );
          CHNumber++;
        }
        delay (200);
        break;
      }
    case btnDOWN:
      {
        if   (CHNumber   > 1)
        {
          lcd.setCursor(5, 1);
          lcd.print("   " );
          CHNumber--;
        }
        delay (200);
        break;
      }

    case btnSELECT:
      {
        lcd.begin(16, 2);
        lcd.setCursor(0, 0);
        lcd.print(" TESTER MODE");
        delay (200);
        TesterMode = !TesterMode;

        break;
      }
    case btnNONE:
      {
        lcd.print("       ");
        break;
      }

  }
  // EXAMPLE DESCRIPTION
  //
  // If the selected channel comes above 50% the led will switch on
  // and below 50% the led will be turned off

  // NOTE:
  // getChannelValue is relative to the configured startaddress
  if ( dmx_slave.getChannelValue (CHNumber) > 127 )
    digitalWrite ( ledPin, HIGH );
  else
    digitalWrite ( ledPin, LOW );
}

void RecieveMode()
{
  dmx_slave.enable ();
  lcd.setCursor(0, 0);
  lcd.print("DMXino Recieve");
  lcd.setCursor(0, 1);
  lcd.print("CHAN#");
  lcd.setCursor(9, 1);
  lcd.print("LVL");
  lcd.setCursor(5, 1);
  lcd.print(CHNumber );
  lcd.setCursor(13, 1);
  //lcd.print ( dmx_slave.getChannelValue(CHNumber));
  ChannelValuePER = dmx_slave.getChannelValue(CHNumber) / 2.55;
  ChannelValuePERint = int( ChannelValuePER);
  lcd.print (ChannelValuePERint);

}

void TransmitMode()
{
  dmx_master.enable ();
  lcd.setCursor(0, 0);
  lcd.print("DMXino Transmit");
  lcd.setCursor(0, 1);
  lcd.print("CHAN#");
  lcd.setCursor(9, 1);
  lcd.print("LVL");

  lcd.setCursor(5, 1);
  lcd.print(CHNumber );
  lcd.setCursor(13, 1);
  lcd.print(dimmer_val);
  dmx_master.setChannelValue ( (CHNumber), dimmer_val );
}

Schematics

DMXino V4
Img 0638 rstfa4zw7h

Comments

Similar projects you might like

TB6600 Stepper Motor driver Tester

Project in progress by ashleyblack

  • 26,771 views
  • 22 comments
  • 29 respects

Cable Tester RJ45 (Ethernet)

Project tutorial by Andreaberri

  • 8,205 views
  • 1 comment
  • 12 respects

The Magnetic Field and RGB Tester

Project tutorial by Kutluhan Aktar

  • 4,549 views
  • 0 comments
  • 17 respects

All About Servo Motors and Servo Motor Tester

Project tutorial by RoboCircuits

  • 1,997 views
  • 0 comments
  • 8 respects

Sound Direction Tester

Project tutorial by calettso

  • 1,858 views
  • 0 comments
  • 3 respects
Add projectSign up / Login