uint8_t buffer[513];
void xmit() {
digitalWriteFast(12, HIGH);
Serial1.begin(83333, SERIAL_8N1);
Serial1.write(0);
Serial1.flush();
Serial1.begin(250000, SERIAL_8N2);
digitalWriteFast(12, LOW);
// first byte of buffer must be zero
// to comply with DMX protocol
Serial1.write(buffer, sizeof(buffer));
Serial1.flush();
}
#define RED 0xFF0000
#define GREEN 0x00FF00
#define BLUE 0x0000FF
#define YELLOW 0xFFFF00
#define PINK 0xFF1088
#define ORANGE 0xE05800
#define WHITE 0xFFFFFF
void setup() {
Serial1.begin(250000);
pinMode(12, OUTPUT);
}
void loop() {
colorWipe(RED);
colorWipe(GREEN);
colorWipe(BLUE);
colorWipe(YELLOW);
colorWipe(PINK);
colorWipe(ORANGE);
colorWipe(WHITE);
}
void colorWipe(int color)
{
for (int i=0; i < 48; i++) {
buffer[0] = 0;
buffer[i*3 + 1] = color >> 16;
buffer[i*3 + 2] = color >> 8;
buffer[i*3 + 3] = color >> 0;
buffer[i*3 + 1 + 144] = color >> 16;
buffer[i*3 + 2 + 144] = color >> 8;
buffer[i*3 + 3 + 144] = color >> 0;
buffer[i*3 + 1 + 288] = color >> 16;
buffer[i*3 + 2 + 288] = color >> 8;
buffer[i*3 + 3 + 288] = color >> 0;
buffer[25] = 0x5A;
xmit();
buffer[25] = 0xA5;
xmit();
}
}