   ledMode = (mode);\
 }
 
-// fill LED buffer with alternating colors every $modulo pixels, reset state, set mode
+// fill LED buffer with alternating colors every modulo pixels, reset state, set mode
 #define setLeds2(color1, color2, modulo, mode) {\
   for (uint8_t i = 0; i < MAXPIX+EXTRAPIX; i++) {\
     leds[i] = (i % (modulo)) ? ((color2)) : ((color1));\

} ledState;

// pre-defined colors. GRB order, g++ doesn't implement out-of-order initializers
const cRGB traktor = {g: 0xB8/4, r: 0x67/4, b: 0xDC/4}; // https://wiki.attraktor.org/Corporate_Identity
const cRGB black = {g: 0x00, r: 0x00, b: 0x00};
const cRGB white = {g: 0x1F, r: 0x1F, b: 0x1F};
const cRGB red = {g: 0x00, r: 0x1F, b: 0x00};
const cRGB green = {g: 0x1F, r: 0x00, b: 0x00};
const cRGB yellow = {g: 0x1F, r: 0x1F, b: 0x00};
const cRGB blue = {g: 0x00, r: 0x00, b: 0x1F};

// macro instead of inline function. TODO: compare generated code again

        break;
      }

if (pirTrigger == HIGH) {
  debug(currentMillis, F("Motion sensor triggered - door blocked by PIR\r\n"));
  setLeds1(yellow, ledBlink);
  doorState = doorBlockedPir;
  break;
}

      openMillis += elapsedMillis;
      if (openMillis >= openInterval || swBack == HIGH) {
        if (swBack == HIGH) {
