Code Sketch


atharva
By: Mhalsakant School
Category: Art
#include <DMXSerial.h>

// ================================
// SHARPY DMX CONTROLLER
// Arduino + MAX485
// DMX Start Address = 1
// 18 Channel Generic Template
// ================================

#define SHARPY_ADDR 1

// ---------- DMX Channels ----------
#define CH_PAN       1
#define CH_PAN_FINE  2
#define CH_TILT      3
#define CH_TILT_FINE 4
#define CH_SPEED     5
#define CH_DIMMER    6
#define CH_SHUTTER   7
#define CH_COLOR     8
#define CH_GOB0      9
#define CH_GOB1      10
#define CH_PRISM     11
#define CH_PRISM_ROT 12
#define CH_FOCUS     13
#define CH_FROST     14
#define CH_ZOOM      15
#define CH_EFFECT1   16
#define CH_EFFECT2   17
#define CH_RESET     18

// ---------- Helper ----------
void dmxSet(int ch, byte value) {
  DMXSerial.write(SHARPY_ADDR + ch - 1, value);
}

// ---------- Blackout ----------
void blackout() {
  dmxSet(CH_DIMMER, 0);
  dmxSet(CH_SHUTTER, 0);
}

// ---------- Open Light ----------
void lightOn() {
  dmxSet(CH_DIMMER, 255);
  dmxSet(CH_SHUTTER, 255);
}

// ---------- Color ----------
void color(byte value) {
  dmxSet(CH_COLOR, value);
}

// ---------- Pan/Tilt ----------
void position(byte pan, byte tilt) {
  dmxSet(CH_PAN, pan);
  dmxSet(CH_PAN_FINE, 0);

  dmxSet(CH_TILT, tilt);
  dmxSet(CH_TILT_FINE, 0);
}

// ---------- Strobe ----------
void strobe(byte value) {
  dmxSet(CH_SHUTTER, value);
}

// ---------- Gobo ----------
void gobo(byte value) {
  dmxSet(CH_GOB0, value);
}

// ---------- Prism ----------
void prism(byte value) {
  dmxSet(CH_PRISM, value);
}

// ---------- Prism Rotation ----------
void prismRotate(byte value) {
  dmxSet(CH_PRISM_ROT, value);
}

// ---------- Focus ----------
void focus(byte value) {
  dmxSet(CH_FOCUS, value);
}

// ---------- Dimmer ----------
void dimmer(byte value) {
  dmxSet(CH_DIMMER, value);
}

// ---------- Red/Color Demo ----------
void colorDemo() {

  // White
  color(0);
  delay(1000);

  // Color 1
  color(32);
  delay(1000);

  // Color 2
  color(64);
  delay(1000);

  // Color 3
  color(96);
  delay(1000);

  // Color 4
  color(128);
  delay(1000);

  // Color 5
  color(160);
  delay(1000);

  // Color 6
  color(192);
  delay(1000);

  // Color 7
  color(224);
  delay(1000);
}

// ---------- Pan/Tilt Movement ----------
void movementDemo() {

  position(0, 128);
  delay(500);

  position(64, 128);
  delay(500);

  position(128, 128);
  delay(500);

  position(192, 128);
  delay(500);

  position(255, 128);
  delay(500);

  position(128, 64);
  delay(500);

  position(128, 128);
  delay(500);

  position(128, 192);
  delay(500);

  position(128, 255);
  delay(500);
}

// ---------- Setup ----------
void setup() {

  // Start DMX
  DMXSerial.init(DMXController);

  // Clear all channels
  for (int i = 1; i <= 18; i++) {
    dmxSet(i, 0);
  }

  delay(1000);

  // Initial settings
  dimmer(255);
  strobe(255);

  // Center position
  position(128, 128);

  // Open shutter
  lightOn();
}

// ---------- Main Loop ----------
void loop() {

  // ----------------------------
  // Automatic Sharpy Show
  // ----------------------------

  // Scene 1
  color(0);
  gobo(0);
  prism(0);
  position(128, 128);
  dimmer(255);
  delay(1500);

  // Scene 2
  color(50);
  position(0, 128);
  delay(1000);

  // Scene 3
  color(100);
  position(255, 128);
  delay(1000);

  // Scene 4
  color(150);
  position(128, 0);
  delay(1000);

  // Scene 5
  color(200);
  position(128, 255);
  delay(1000);

  // Gobo
  gobo(80);
  delay(1500);

  // Prism
  prism(255);
  prismRotate(180);
  delay(1500);

  // Strobe effect
  strobe(220);
  delay(500);

  strobe(255);

  // Movement
  movementDemo();

  // Color sequence
  colorDemo();

  // Return center
  position(128, 128);
  prism(0);
  gobo(0);
  delay(1000);
}