@ -19,16 +19,16 @@
# include "looper.h"
# include "looper.h"
# include <RGBConverter.h>
# include <RGBConverter.h>
# define DEBUG 1
//#define DEBUG 1
# define SENSOR_SCHED 10
# define SENSOR_SCHED 10
# define DMX_COLOR_CHANGER_SCHED 10 0
# define DMX_COLOR_CHANGER_SCHED 5 0
# define LED_SCHED 50
# define LED_SCHED 50
# define LEVEL_CHECK_SCHED 10 0
# define LEVEL_CHECK_SCHED 5 0
# define DEBUG_SCHED 500
# define DEBUG_SCHED 500
# define BUTTON_LONG_PRESS 1000
# define BUTTON_LONG_PRESS 1000
# define MIN_TIME_SWITCH_PRESSED 5 0
# define MIN_TIME_SWITCH_PRESSED 3 0
# define POTI_DEAD_ZONE 3
# define POTI_DEAD_ZONE 3
# define LED_NORMAL_BRIGHTNESS 180
# define LED_NORMAL_BRIGHTNESS 180
# define LED_PLAY_BRIGHTNESS 20
# define LED_PLAY_BRIGHTNESS 20
@ -36,7 +36,7 @@
# define MAX_VOL_LEVEL 30
# define MAX_VOL_LEVEL 30
# define MAX_DMX_LEVEL 255
# define MAX_DMX_LEVEL 255
# define DMX_FOG_MACHINE_ADDRESS 100
# define DMX_FOG_MACHINE_ADDRESS 100
# define MAX_RAND_WHITE_LEVEL 128
# define MAX_RAND_WHITE_LEVEL 150
# define DMX_BRIGHTNESS 0
# define DMX_BRIGHTNESS 0
# define DMX_FADE_TIME 1
# define DMX_FADE_TIME 1
@ -47,7 +47,7 @@
# define MAX_DMX_FADE_TIME 15
# define MAX_DMX_FADE_TIME 15
# define MIN_DMX_HOLD_TIME 3
# define MIN_DMX_HOLD_TIME 3
# define MAX_DMX_HOLD_TIME 30
# define MAX_DMX_HOLD_TIME 30
# define ON_OFF_FADE_TIME 1
# define ON_OFF_FADE_TIME 1.5
// Arduino pins
// Arduino pins
# define POTI1_PIN A1
# define POTI1_PIN A1
@ -75,7 +75,7 @@ enum {
OFF
OFF
} ;
} ;
bool fog_state = false ;
bool fog_state = false ;
uint8_t light_state = NORMAL ;
uint8_t light_state = OFF ;
typedef struct {
typedef struct {
uint8_t dmx_type = 4 ;
uint8_t dmx_type = 4 ;
@ -152,10 +152,6 @@ void show_led(void) {
void dmx_auto_colorchanger ( void ) {
void dmx_auto_colorchanger ( void ) {
// DMX auto Fade
// DMX auto Fade
//if (light_state != NORMAL)
// return;
for ( uint8_t s = 0 ; s < MAX_DMX_SPOTS ; s + + ) {
for ( uint8_t s = 0 ; s < MAX_DMX_SPOTS ; s + + ) {
uint8_t diff_counter = 0 ;
uint8_t diff_counter = 0 ;
@ -170,7 +166,7 @@ void dmx_auto_colorchanger(void) {
// start hold timer
// start hold timer
if ( light_state ! = NORMAL )
if ( light_state ! = NORMAL )
continue ;
continue ;
int8_t start = MIN_DMX_HOLD_TIME + MIN_DMX_HOLD_TIME * poti_level [ 1 ] / 255.0 * 4 ;
int8_t start = MIN_DMX_HOLD_TIME + MIN_DMX_HOLD_TIME * poti_level [ DMX_HOLD_TIME ] / 255.0 * MIN_DMX_HOLD_TIME ;
spot [ s ] . steps = random ( start , start + ( ( MAX_DMX_HOLD_TIME - start ) * poti_level [ DMX_HOLD_TIME ] / 255.0 ) ) * 1000 / DMX_COLOR_CHANGER_SCHED ;
spot [ s ] . steps = random ( start , start + ( ( MAX_DMX_HOLD_TIME - start ) * poti_level [ DMX_HOLD_TIME ] / 255.0 ) ) * 1000 / DMX_COLOR_CHANGER_SCHED ;
# ifdef DEBUG
# ifdef DEBUG
Serial . print ( F ( " Spot " ) ) ;
Serial . print ( F ( " Spot " ) ) ;
@ -185,7 +181,7 @@ void dmx_auto_colorchanger(void) {
continue ;
continue ;
RGBConverter color_converter ;
RGBConverter color_converter ;
uint8_t rgb [ 3 ] ;
uint8_t rgb [ 3 ] ;
uint8_t start = MIN_DMX_FADE_TIME + MIN_DMX_FADE_TIME * poti_level [ 2 ] / 255.0 * 4 ;
uint8_t start = MIN_DMX_FADE_TIME + MIN_DMX_FADE_TIME * poti_level [ DMX_FADE_TIME ] / 255.0 * MIN_DMX_FADE_TIME ;
color_converter . hsvToRgb ( random ( 0 , 1024 ) / 1024.0 , 1.0 , 1.0 , rgb ) ;
color_converter . hsvToRgb ( random ( 0 , 1024 ) / 1024.0 , 1.0 , 1.0 , rgb ) ;
@ -212,7 +208,7 @@ void dmx_auto_colorchanger(void) {
Serial . println ( F ( " seconds " ) ) ;
Serial . println ( F ( " seconds " ) ) ;
# endif
# endif
}
}
} else {
} /* else {
for ( uint8_t i = 0 ; i < spot [ s ] . dmx_type ; i + + ) {
for ( uint8_t i = 0 ; i < spot [ s ] . dmx_type ; i + + ) {
if ( spot [ s ] . diff [ i ] ! = 0.0 ) {
if ( spot [ s ] . diff [ i ] ! = 0.0 ) {
spot [ s ] . values [ i ] + = spot [ s ] . diff [ i ] ;
spot [ s ] . values [ i ] + = spot [ s ] . diff [ i ] ;
@ -224,7 +220,6 @@ void dmx_auto_colorchanger(void) {
DmxSimple . write ( spot [ s ] . address + i , uint8_t ( spot [ s ] . values [ i ] * poti_level [ DMX_BRIGHTNESS ] / 255.0 + 0.5 ) ) ;
DmxSimple . write ( spot [ s ] . address + i , uint8_t ( spot [ s ] . values [ i ] * poti_level [ DMX_BRIGHTNESS ] / 255.0 + 0.5 ) ) ;
}
}
# ifdef DEBUG
# ifdef DEBUG
Serial . print ( F ( " Spot " ) ) ;
Serial . print ( F ( " Spot " ) ) ;
Serial . print ( s , DEC ) ;
Serial . print ( s , DEC ) ;
@ -237,12 +232,13 @@ void dmx_auto_colorchanger(void) {
Serial . print ( F ( " value " ) ) ;
Serial . print ( F ( " value " ) ) ;
Serial . println ( spot [ s ] . values [ i ] , 4 ) ;
Serial . println ( spot [ s ] . values [ i ] , 4 ) ;
# endif
# endif
}
}
}
} */
spot [ s ] . steps - - ;
spot [ s ] . steps - - ;
}
}
dmx_commit ( ) ;
// Fog machine
// Fog machine
if ( fog_state = = true ) {
if ( fog_state = = true ) {
DmxSimple . write ( DMX_FOG_MACHINE_ADDRESS , poti_level [ DMX_FOG_LEVEL ] ) ;
DmxSimple . write ( DMX_FOG_MACHINE_ADDRESS , poti_level [ DMX_FOG_LEVEL ] ) ;
@ -269,6 +265,24 @@ void test_worker(void) {
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
// HELPER FUNCTIONS
// HELPER FUNCTIONS
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
void dmx_commit ( void ) {
float l = pow ( poti_level [ DMX_BRIGHTNESS ] / 255.0 , 3 ) ;
for ( uint8_t s = 0 ; s < MAX_DMX_SPOTS ; s + + ) {
for ( uint8_t i = 0 ; i < spot [ s ] . dmx_type ; i + + ) {
//if (spot[s].diff[i] != 0.0) {
spot [ s ] . values [ i ] + = spot [ s ] . diff [ i ] ;
if ( spot [ s ] . values [ i ] > 255.0 )
spot [ s ] . values [ i ] = 255.0 ;
else if ( spot [ s ] . values [ i ] < 0 )
spot [ s ] . values [ i ] = 0.0 ;
DmxSimple . write ( spot [ s ] . address + i , uint8_t ( spot [ s ] . values [ i ] * l + 0.5 ) ) ;
}
// }
}
}
void do_level ( uint8_t p ) {
void do_level ( uint8_t p ) {
# ifdef DEBUG
# ifdef DEBUG
Serial . print ( F ( " POTI " ) ) ;
Serial . print ( F ( " POTI " ) ) ;
@ -442,13 +456,13 @@ uint8_t poti_pin_by_number(byte n) {
return ( 0 ) ;
return ( 0 ) ;
}
}
void set_rgbw ( dmx_spot * spot , uint8_ t fade , uint8_t * rgb , uint8_t w ) {
void set_rgbw ( dmx_spot * spot , floa t fade , uint8_t * rgb , uint8_t w ) {
spot - > steps = fade * 1000 / DMX_COLOR_CHANGER_SCHED ;
spot - > steps = fade * 1000 / DMX_COLOR_CHANGER_SCHED ;
spot - > diff [ 3 ] = ( w - spot - > values [ 3 ] ) / spot - > steps ;
spot - > diff [ 3 ] = ( w - spot - > values [ 3 ] ) / spot - > steps ;
set_rgb ( spot , fade , rgb ) ;
set_rgb ( spot , fade , rgb ) ;
}
}
void set_rgb ( dmx_spot * spot , uint8_ t fade , uint8_t * rgb ) {
void set_rgb ( dmx_spot * spot , floa t fade , uint8_t * rgb ) {
spot - > steps = fade * 1000 / DMX_COLOR_CHANGER_SCHED ;
spot - > steps = fade * 1000 / DMX_COLOR_CHANGER_SCHED ;
for ( uint8_t i = 0 ; i < 3 ; i + + )
for ( uint8_t i = 0 ; i < 3 ; i + + )
spot - > diff [ i ] = ( rgb [ i ] - spot - > values [ i ] ) / spot - > steps ;
spot - > diff [ i ] = ( rgb [ i ] - spot - > values [ i ] ) / spot - > steps ;
@ -504,9 +518,9 @@ void setup() {
// DMX setup
// DMX setup
spot [ 0 ] . address = 1 ; // Stairville LED Par56 MKII RGBA 10mm SI https://images.thomann.de/pics/atg/atgdata/document/manual/274646_c_274644_274646_375069_v3_de_online.pdf
spot [ 0 ] . address = 1 ; // Stairville LED Par56 MKII RGBA 10mm SI https://images.thomann.de/pics/atg/atgdata/document/manual/274646_c_274644_274646_375069_v3_de_online.pdf
spot [ 1 ] . address = 5 ; // Stairville LED Par56 MKII RGBA 10mm SI
spot [ 1 ] . address = 5 ; // Stairville LED Par56 MKII RGBA 10mm SI
DmxSimple . write ( 9 , 0 ) ; // Init PAR64, channel: 9, DIP 1: on, DIP 4: on, DIP 8: off
DmxSimple . write ( 9 , 0 ) ; // Init PAR64, channel: 9, DIP 1: on, DIP 4: on, DIP 8: off
spot [ 2 ] . address = 10 ; // Stairville PAR 64 https://images.thomann.de/pics/atg/atgdata/document/manual/c_193245_v2_r3_de_online.pdf
spot [ 2 ] . address = 10 ; // Stairville PAR 64 https://images.thomann.de/pics/atg/atgdata/document/manual/c_193245_v2_r3_de_online.pdf
DmxSimple . write ( 15 , 41 ) ; // Init LED Bar for 3-segment-mode, channel: 15
DmxSimple . write ( 15 , 41 ) ; // Init LED Bar for 3-segment-mode, channel: 15
spot [ 3 ] . address = 17 ; // Stairville LED BAR RGB 252 - Segment 1 https://images.thomann.de/pics/prod/255346_manual.pdf
spot [ 3 ] . address = 17 ; // Stairville LED BAR RGB 252 - Segment 1 https://images.thomann.de/pics/prod/255346_manual.pdf
spot [ 4 ] . address = 20 ; // Stairville LED BAR RGB 252 - Segment 2
spot [ 4 ] . address = 20 ; // Stairville LED BAR RGB 252 - Segment 2
spot [ 5 ] . address = 23 ; // Stairville LED BAR RGB 252 - Segment 3
spot [ 5 ] . address = 23 ; // Stairville LED BAR RGB 252 - Segment 3