DMX2leds.ino 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include <DmxReceiver.h>
  2. DmxReceiver dmx;
  3. IntervalTimer dmxTimer;
  4. int DMXstartChannel= 0 ;
  5. const byte DMXadressPins[8] = {11, 12, 14, 15, 16, 17, 18, 19};
  6. #define PWMnumChannels 10
  7. const int PWMchannels[PWMnumChannels] = {3, 4, 5, 6, 9, 10, 20, 21, 22, 23} ;
  8. #include <FastLED.h>
  9. //const int NUM_LEDS_1 = 90;
  10. const int LEDS_GROUP_1 = 6 ;
  11. const int LEDS_OFF_1 = 2 ;
  12. const int NUM_GROUPS_1 = 10 ;
  13. #define DATA_PIN_1 7
  14. CRGB leds_1[NUM_GROUPS_1*(LEDS_GROUP_1+LEDS_OFF_1)];
  15. //const int NUM_LEDS_2 = 50;
  16. const int LEDS_GROUP_2 = 5 ;
  17. const int LEDS_OFF_2 = 3 ;
  18. const int NUM_GROUPS_2 = 6 ;
  19. #define DATA_PIN_2 8
  20. CRGB leds_2[NUM_GROUPS_2*(LEDS_GROUP_2+LEDS_OFF_2)];
  21. void dmxTimerISR(void)
  22. {
  23. dmx.bufferService();
  24. }
  25. //-----------------------------------------------------------------------------
  26. void setup() {
  27. Serial.begin(9600);
  28. delay(2000); // Instead of while (!Serial), doesn't seem to work on Teensy
  29. Serial.println("Starting.");
  30. FastLED.addLeds<SK6812, DATA_PIN_1, RGB>(leds_1, NUM_GROUPS_1*(LEDS_GROUP_1+LEDS_OFF_1));
  31. FastLED.addLeds<SK6812, DATA_PIN_2, RGB>(leds_2, NUM_GROUPS_2*(LEDS_GROUP_2+LEDS_OFF_2));
  32. for(int i = 0; i<NUM_GROUPS_1*(LEDS_GROUP_1+LEDS_OFF_1)+1; i++){
  33. leds_1[i] = 0;
  34. }
  35. for(int i = 0; i<NUM_GROUPS_2*(LEDS_GROUP_2+LEDS_OFF_2)+1; i++){
  36. leds_2[i] = 0;
  37. }
  38. FastLED.show();
  39. dmx.begin();
  40. dmxTimer.begin(dmxTimerISR, 1000);
  41. //Calculate DMX adress
  42. DMXstartChannel = 0;
  43. for(int i=0; i<8; i++){
  44. pinMode(DMXadressPins[i], INPUT_PULLUP);
  45. }
  46. delay(200);
  47. for(int i=0; i<8; i++){
  48. DMXstartChannel += (!digitalRead(DMXadressPins[i]) * pow(2, i));
  49. }
  50. DMXstartChannel += 256 ;
  51. Serial.print("DMX start adress set to : ");
  52. Serial.println(DMXstartChannel);
  53. }
  54. //------------------------------------------------------------------------------
  55. void loop() {
  56. //Calculate DMX adress
  57. // Serial.println(DMXstartChannel);
  58. if (dmx.newFrame()) {
  59. // 10 first channels are for power led dimmers
  60. for (int i=0; i<PWMnumChannels ; i++){
  61. analogWrite(PWMchannels[i], dmx.getDimmer(DMXstartChannel+i) );
  62. }
  63. for (int groupLed = 0 ; groupLed< NUM_GROUPS_1 ; groupLed++) {
  64. int R = dmx.getDimmer(DMXstartChannel + PWMnumChannels + 3*groupLed);
  65. int G = dmx.getDimmer(DMXstartChannel + PWMnumChannels + 3*groupLed + 1);
  66. int B = dmx.getDimmer(DMXstartChannel + PWMnumChannels + 3*groupLed + 2);
  67. // Serial.println(R);
  68. for (int pixel = 0 ; pixel<LEDS_GROUP_1; pixel++){
  69. leds_1[groupLed * (LEDS_GROUP_1 + LEDS_OFF_1) + pixel ].setRGB( R, G, B);
  70. }
  71. }
  72. for (int groupLed = 0 ; groupLed< NUM_GROUPS_2 ; groupLed++) {
  73. int R = dmx.getDimmer(DMXstartChannel + PWMnumChannels + 3 * NUM_GROUPS_1 + 3*groupLed);
  74. int G = dmx.getDimmer(DMXstartChannel + PWMnumChannels + 3 * NUM_GROUPS_1 + 3*groupLed + 1);
  75. int B = dmx.getDimmer(DMXstartChannel + PWMnumChannels + 3 * NUM_GROUPS_1 + 3*groupLed + 2);
  76. // Serial.println(R);
  77. for (int pixel = 0 ; pixel<LEDS_GROUP_2; pixel++){
  78. leds_2[groupLed * (LEDS_GROUP_2 + LEDS_OFF_2) + pixel ].setRGB( R, G, B);
  79. }
  80. }
  81. // leds_1[0].setRGB(dmx.getDimmer(DMXstartChannel + PWMnumChannels), dmx.getDimmer(DMXstartChannel + PWMnumChannels + 1), dmx.getDimmer(DMXstartChannel + PWMnumChannels + 2) );
  82. FastLED.show();
  83. //
  84. // // Led 1
  85. // int channelOffset = PWMnumChannels + 1 ;
  86. // for (int channel = 0 ; channel< NUM_GROUPS_1 ; channel + 3){ // 3 channels per group of leds
  87. // int R = dmx.getDimmer(channelOffset + channel);
  88. // int G = dmx.getDimmer(channelOffset + channel + 1);
  89. // int B = dmx.getDimmer(channelOffset + channel + 2);
  90. //
  91. // for (int pixel = 0 ; pixel<LEDS_GROUP_1; pixel++){
  92. // leds_1[channel * LEDS_GROUP_1 + (channel - 1) * LEDS_OFF_1 + pixel].setRGB( R, G, B);
  93. // }
  94. // }
  95. //
  96. //
  97. // channelOffset = PWMnumChannels + NUM_GROUPS_1 * 3 + 1 ;
  98. // for (int channel = 0 ; channel< NUM_GROUPS_2 ; channel + 3){
  99. // int R = dmx.getDimmer(channelOffset + channel);
  100. // int G = dmx.getDimmer(channelOffset + channel + 1);
  101. // int B = dmx.getDimmer(channelOffset + channel + 2);
  102. // for (int pixel = 0 ; pixel<LEDS_GROUP_2; pixel++){
  103. // leds_2[channel * LEDS_GROUP_2 + (channel - 1) * LEDS_OFF_2 + pixel].setRGB( R, G, B);
  104. // }
  105. // }
  106. }
  107. }