Code Sketch
atharva
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);
}