#define irPin 2
void setup() {
  Serial.begin(9600);
  pinMode(irPin, INPUT);
}
void loop() {
  int i;
  int data[32];
  int s = pulseIn(irPin, HIGH);
  int result = 0;

  if (s > 3000) { //запись значений с датчика
    for (i = 0; i < 32; i++)
      data[i] = pulseIn(irPin, HIGH);

    Serial.print("Код без обработки: ");
    for (i = 0; i < 32; i++) { //вывод значений
      Serial.print(data[i]);
      Serial.print(" ");
    }
    Serial.println("");

    Serial.print("Код: ");
    for (i = 0; i < 32; i++) { //перевод значений в двоичный код
      if (data[i] > 1000)
        data[i] = 1;
      else
        data[i] = 0;
      Serial.print(data[i]);
    }

    int adr = 0;
    int com = 0;

    for (i = 7; i >= 0; i--) //извлекаем из массива неинвертированный сигнал (адрес и команду)
      adr |= (data[i] << i);
    for (i = 7; i >= 0; i--)
      com |= (data[16 + i] << i);

    Serial.println(""); //выводим в Serial
    Serial.print("Адрес: "); Serial.print(adr); Serial.print(" Бинарный: "); Serial.println(adr, BIN);
    Serial.print("Команда: "); Serial.print(com); Serial.print(" Бинарный: "); Serial.println(com, BIN);
    Serial.println("---------------------------------");
  }
}