   if (m_pinSwitch>0) {
     pinMode(m_pinSwitch,INPUT_PULLUP);
   }
-  if (m_pinOn>0) {
+  if (m_pinOn>0 && m_pinOn<128) {
     pinMode(m_pinOn,OUTPUT);
     digitalWrite(m_pinOn,LOW);
   }
-  if (m_pinOff>0) {
+  if (m_pinOff>0 && m_pinOn<128) {
     pinMode(m_pinOff,OUTPUT);
     digitalWrite(m_pinOff,LOW);
   }

  Serial.println("I");
  // start blink counter
  lastBlink = millis();
  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight
  lcd.setCursor(0,0);
  lcd.print("KSP-Gegi");
  lcd.setCursor(0,1);
  lcd.print("Ready for action");
}

void updateAnalogs() {
  for (auto &p : analogInPins) {
    p.update();
  }
}

void updatePins() {
  const unsigned long currentMillis = millis();
  bool blink = false;
  // is it time for tick?
  if (((unsigned long)(currentMillis - lastBlink) >= blinkInterval)) {
    blink = true;


#include <Arduino.h>

// dł kabelków 15-20cm
// diody LED: niebieskie (bez rezystora, krótka nóżka) do GND, białe (z rezystorem, długa nóżka) do pinu
// potencjometr: niebieski z czarną kreską do GND, biały do +5V, niebieski do pinu A0 / A1
// przełączniki2: niebieski do GND, biały do pinu, wszystkie zamontowane tak, aby niebieski był w środku, biały na dole, a niepodłączone u góry (wtedy gałka w górę==załączenie)
// przełączniki3: środkowy (ciemny) do GND, boczne do pinów

// 595:
// 15  A1 SCRCK(13) // clock
// 16  A2 SERIN(3)  // data
// 17  A3 RCK(12)   // latch
// /SRCLR(8) -> +5V
// /G (9) -> GND
// /DRAINx = GND od LEDa (LED niebieskie, bez rezystora, krótka nożka do drain; białe, z rezystorem, długa nóżka do +5V)

const uint8_t clockPin = A1;  // SCRCK (13)
const uint8_t dataPin  = A2;  // SERIN (3)
const uint8_t latchPin = A3;  // RCK (12)

class digitalPin {
  public: // pinOn/Off - 0-127=hw pin, 128+[0..7]=serial pin
    digitalPin(const uint8_t id, const uint8_t pinSwitch, const uint8_t pinOn, const uint8_t pinOff);
    void updateSwitch();
    void updateLedState(const uint8_t c, const uint8_t val);
    void updateLed(const bool blink) ;
    const uint8_t getId() const { return(m_id); }
    const uint8_t getOnOffBits() const; // return object where serial bits are on/off according to state m_OnLed+m_Offled
  private:
    const uint8_t m_id, m_pinSwitch, m_pinOn, m_pinOff;
    uint8_t m_OnLed { LOW };
    uint8_t m_OffLed { LOW };
    uint8_t m_lastPinState { HIGH } ;
    uint8_t m_lastLedState { 0 } ; // bits: 0=GxON, 1=RxON, 2=GxBLINK, 3=RxBLINK
};

digitalPin digiPins[] = {
  digitalPin(0,2,0,0),    // OLED mode1 switch 2
  digitalPin(1,3,0,0),    // OLED mode2 switch 3
  digitalPin(2,4,0,0),    // LCD mode1 switch 4
  digitalPin(3,5,0,0),    // LCD mode2 switch 5
  digitalPin(4,6,0+0x80,4+0x80),    // light, switch pin 6, green led 0, red led 4
  digitalPin(5,7,1+0x80,5+0x80),    // gear, switch pin 7, green led 1, red led 5
  digitalPin(6,8,2+0x80,6+0x80),    // RCS, switch pin 8, green led 2, red led 6
  digitalPin(7,9,3+0x80,7+0x80),    // SAS, switch pin 9, green led 3, red led 7
  digitalPin(8,10,0,0),    // stage, switch pin 10
  digitalPin(9,11,0,0),    // stagemode, switch pin 11
  digitalPin(10,0,0,12),    // low fuel, yellow led 12
  digitalPin(11,0,0,13),    // low fuel, yellow led 13
  digitalPin(12,0,0,A0),    // low fuel, red led 14=A0
};

digitalPin::digitalPin(const uint8_t id, const uint8_t pinSwitch, const uint8_t pinOn, const uint8_t pinOff) :
