Извиняюсь за такое обяснение... Вот последний рабочий скетч. На данный момент средний уровень устанавливается нажатием кнопки CentrSet (когда D12==HIGH) хотелось бы реализовать это автаматически. Тоесть при включении arduino выполнялась одноразовая команда "записать длинну сигнала в переменную centr

PHP код:
#include <TimerOne.h> 

#define BTNPIN 2    // Вход сигнала 
#define SET 12      // Кнопка CentrSet
#define L 5         // Выход на H-Мост вращение в лево 
#define R 6         // Выход на H-Мост вращение в право 

int centr = 150;  //значение по умолчанию пока не будет нажата кнопка CentrSet

volatile uint16_t lengthImpuls, timerCount;

void setup() 
{   

/* LOW — вызов прерывания всякий раз,  
    когда на порту низкий уровень напряжения; 
    CHANGE – прерывание вызывается при изменении  
    значения на входе; 
    RISING – вызов прерывания при изменении уровня  
    напряжения с низкого (LOW) на высокое(HIGH) 
    FALLING – вызов прерывания при изменении уровня  
    напряжения с высокого (HIGH) на низкое (LOW)*/ 
    
  
lengthImpuls=0; 
   
  
pinMode (BTNPIN, INPUT);
  
pinMode (SET, INPUT);  
  
pinMode (L, OUTPUT); 
  
pinMode (R, OUTPUT); 
  
analogWrite (L, 0); 
  
analogWrite (R, 0);

  
Timer1.initialize(10);               
  
Timer1.attachInterrupt(callback);   

  
attachInterrupt(0, fireUp, RISING);
} 
void callback() {  timerCount++; } 

void loop() 
{ 
   
uint16_t li = lengthImpuls; 
   if (
li > (centr-50) && li < (centr+50)) 
  {  
    if (
li > (centr+1)) {analogWrite (R, (li-centr)*5); analogWrite (L, 0);}  
    else if (
li > (centr+45)) {analogWrite (R, 255); analogWrite (L, 0);}
    
    if (
li < (centr-1)) {analogWrite (L, (centr-li)*5); analogWrite (R, 0);}
    else if (
li < (centr-45)) {analogWrite (L, 255); analogWrite (R, 0);}
    
    if (
li > (centr-1) && li < (centr+1)) {analogWrite (L, 0); analogWrite (R, 0);}
    
    if (
digitalRead (12)== HIGH) {centr = li;}
}
}

// Функция обработки прерывания на подъем 
void fireUp() 
{ 
  
timerCount=0; 
  
detachInterrupt(0);
  
attachInterrupt(0, fireDown, FALLING); 
} 

// Функция обработки прерывания на падение 
void fireDown() 
{ 
   
lengthImpuls = timerCount; 
  
detachInterrupt(0); 
  
attachInterrupt(0, fireUp, RISING); 
}