#include #include #define UPPIN 3 #define DOWNPIN 4 #define KEYSPEED 200 // buttons action trheshold in ms LiquidCrystal lcd(9,10,8,7,6,5); int dmxbase=1; // base DMX boolean btn_up=true, // buttons state btn_down=true; unsigned long last_btn=millis(); // buttons press timestamp byte dmxdata[6], // data dmxlast[6], // previous cycle data btn_ticks=0, // movement buttons handled actions deltadmx=1; // address offset step void processmovestep(){ btn_ticks++; if(btn_ticks>10) deltadmx=10; // increase step if(btn_ticks>20) deltadmx=50; if(btn_ticks>30){ // reset step deltadmx=1; btn_ticks=0; } lcd.setCursor(6,0); LeadZeroLCD(dmxbase); } void LeadZeroLCD(int data){ if(data<100) lcd.print("0"); if(data<10) lcd.print("0"); lcd.print(data,DEC); } void setup(){ byte i; DMXSerial.init(DMXController); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("Base: "); processmovestep(); pinMode(UPPIN,INPUT_PULLUP); pinMode(DOWNPIN,INPUT_PULLUP); pinMode(A0,INPUT); pinMode(A1,INPUT); pinMode(A2,INPUT); pinMode(A3,INPUT); pinMode(A4,INPUT); pinMode(A5,INPUT); for(i=0;i<5;i++){ dmxdata[i]=0; dmxlast[i]=0; } } void loop(){ byte i; for(i=0;i<=5;i++) DMXSerial.write(dmxbase+i,dmxdata[i]); // write current channels to DMX if(btn_up && btn_down){ // read movement keys from idle mode btn_up=digitalRead(UPPIN); btn_down=digitalRead(DOWNPIN); last_btn=millis(); btn_ticks=0; deltadmx=1; if(!btn_up && !btn_down) btn_down=true; } if(!btn_up) btn_up=digitalRead(UPPIN); // read movement keys from moving mode if(!btn_down) btn_down=digitalRead(DOWNPIN); if(!btn_up && millis()-last_btn>=KEYSPEED){ // move DMX up last_btn=millis(); dmxbase+=deltadmx; if(dmxbase>507) dmxbase=1; processmovestep(); } if(!btn_down && millis()-last_btn>=KEYSPEED){ // move DMX down last_btn=millis(); dmxbase-=deltadmx; if(dmxbase<1) dmxbase=507; processmovestep(); } for(i=0;i<=5;i++){ dmxlast[i]=dmxdata[i]; dmxdata[i]=analogRead(A0+i)/4; delay(15); } for(i=0;i<=5;i++){ if(abs(dmxlast[i]-dmxdata[i])>=2){ lcd.setCursor(0,1); lcd.print("#"); lcd.print(i,DEC); lcd.print(" DMX"); LeadZeroLCD(dmxbase+i); lcd.print(": "); LeadZeroLCD(dmxdata[i]); } } }