Es gibt DMX aus
und steuert gleichzeitig auch auf den PWM Ausgängen einen LED Streifen.
Aber Vorsicht die DMXLib muss im Header etwas angepasst werden damit sie auf dem Micro läuft.
Code
#include <Conceptinetics.h>
#define DMX_MASTER_CHANNELS 100
#define RXEN_PIN 12 // pin for direction
#define RED 9// pin for red
#define GREEN 10 // pin for green
#define BLUE 11 // pin for blue
#define SIZE 255
#define DELAY 5
#define HUE_MAX 6.0
#define HUE_DELTA 0.01
DMX_Master dmx_master ( DMX_MASTER_CHANNELS, RXEN_PIN );
long rgb[3];
long rgbval;
float hue=0.0, saturation=1, value=1;
long bright[3] = { 256, 256, 256}; //color adjust
long k;
void setup() {
dmx_master.enable ();
}
void loop()
{
hue += HUE_DELTA;
if (hue > HUE_MAX) {
hue=0.0;
}
rgbval=HSV_to_RGB(hue, saturation, value);
rgb[0] = (rgbval & 0x00FF0000) >> 16;
rgb[1] = (rgbval & 0x0000FF00) >> 8;
rgb[2] = rgbval & 0x000000FF;
for (k=0; k<3; k++) {
analogWrite(RED + k, rgb[k] * bright[k]/256);
dmx_master.setChannelValue ( 1+k,rgb[k] * bright[k]/256 );
}
delay(DELAY);
}
long HSV_to_RGB( float h, float s, float v ) {
/* modified from Alvy Ray Smith's site: http://www.alvyray.com/Papers/hsv2rgb.htm */
// H is given on [0, 6]. S and V are given on [0, 1].
// RGB is returned as a 24-bit long #rrggbb
int i;
float m, n, f;
// not very elegant way of dealing with out of range: return black
if ((s<0.0) || (s>1.0) || (v<1.0) || (v>1.0)) {
return 0L;
}
if ((h < 0.0) || (h > 6.0)) {
return long( v * 255 ) + long( v * 255 ) * 256 + long( v * 255 ) * 65536;
}
i = floor(h);
f = h - i;
if ( !(i&1) ) {
f = 1 - f; // if i is even
}
m = v * (1 - s);
n = v * (1 - s * f);
switch (i) {
case 6:
case 0:
return long(v * 255 ) * 65536 + long( n * 255 ) * 256 + long( m * 255);
case 1:
return long(n * 255 ) * 65536 + long( v * 255 ) * 256 + long( m * 255);
case 2:
return long(m * 255 ) * 65536 + long( v * 255 ) * 256 + long( n * 255);
case 3:
return long(m * 255 ) * 65536 + long( n * 255 ) * 256 + long( v * 255);
case 4:
return long(n * 255 ) * 65536 + long( m * 255 ) * 256 + long( v * 255);
case 5:
return long(v * 255 ) * 65536 + long( m * 255 ) * 256 + long( n * 255);
}
}
Alles anzeigen
Ein Beispiel wie einfach man Dinge erledigen kann. Von der HSV_to_RGB Funktion soll man sich nicht erschrecken lassen. Man kann LEDs nicht linear dimmen. Das sieht dann etwas komisch aus ![]()