В общем скетч на основе листинга oops1 для распознавания импульсов работает. Только я снимаю длительности "ноля". Так удобнее определить начала пакета.
PHP код:
#include <TimerOne.h> 

#define BTNPIN 2  

volatile uint16_t startImpuls
volatile uint16_t lengthImpuls
volatile uint16_t timerCount=0

byte posInPacket=0;
byte Packet[60];
byte startBYTE 0

void setup() 
{  
/* 
    LOW — вызов прерывания всякий раз, когда на порту низкий уровень напряжения; 
    CHANGE – прерывание вызывается при изменении значения на входе; 
    RISING – вызов прерывания при изменении уровня напряжения с низкого (LOW) на высокое(HIGH) 
    FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкое (LOW) 
  */ 
  
startImpuls=0
  
lengthImpuls=0

  
pinMode(BTNPININPUT);   
   
  
Serial.begin(115200); 
   
  
Timer1.initialize(10); 
  
Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt 

  
attachInterrupt(0fireDownFALLING);

void callback() {  timerCount++; } 

void loop() 

 
  if (
lengthImpuls 0
  { 
    
uint16_t li lengthImpuls
    
lengthImpuls=0;

// получен стартовый импульс > 300
    
if (li 200 && li 400) {
        
startBYTE 1;
//        Serial.println("Start");
    
}
    
// Получен "1" 
    
if (li >20 && li <50 && startBYTE == 1
    { 
      
Packet[posInPacket] = 1;
      
posInPacket ++; 
    } 
    
// Получен "0" 
    
else if (li >60 && li <80  && startBYTE == 1
    { 
      
Packet[posInPacket] = 0;
      
posInPacket ++;
    } 
    
// Отправить пакет "большему брату" 
    
if (posInPacket 56
    { 
      
detachInterrupt(0); 
      for(
int j=16;j<57;j++) 
        
Serial.print(Packet[j],DEC); 
        
Serial.println(" ");
      
posInPacket 0;
      
startBYTE 0
      
attachInterrupt(0fireUpFALLING); 
    } 
  } 
 } 

// Функция обработки прерывания на подъем 
void fireUp() 

  
detachInterrupt(0); 
  
startImpuls timerCount
  
attachInterrupt(0fireDownRISING); 


// Функция обработки прерывания на спад 
void fireDown() 

  
detachInterrupt(0); 
  
lengthImpuls timerCount startImpuls
  
startImpuls=0
  
timerCount=0
  
attachInterrupt(0fireUpFALLING); 

Но, как оказалось, это не самая главная проблема. Проблема в том что я не могу "вычислить" протокол - не очень как то понятно "Ху ис ху". Понятно что все данные укладываются в один пакет, пакет всегда заканчивается "1". Где в нем данные расстояния, где признак датчика
Для примера прилагаю снятые данные пакета в разных режимах (на байты разделил условно):
PHP код:
00000000 00000000 00000000 11010000 11010000 1 сенсор A --
01001100 00000000 00000000 00110000 01111100 1 сенсор A 60
10000000 00000000 00000000 11110000 00001000 1 сенсор A 20

00000000 00000000 00000000 00001101 00001101 1 сенсор B 
--
00000000 00000000 01010000 00000000 01010000 1 сенсор C --

00000000 00000000 00000101 00000000 00000101 1 сенсор D --
00000000 01111000 00001101 00000000 01110011 1 сенсор D 60
00000000 10000000 00001111 00000000 10001111 1 сенсор D 20

00000000 00000000 00000001 11101000 01101001 1 сенсоры A
+-- 
Может у кого появятся мысли на этот счет?