PHP код:
	
/*
  Пять кнопок: 
  Вкл/Выкл питания нагрузки
  Режим 1 (короткое нажатие)
  Режим 1 (длинное нажатие)
  Режим 2 (короткое нажатие)
  Режим 2 (длинное нажатие)
 
 Питание на нагрузку подается либо при начальной инициализации системы, 
 либо программно (для вкл/выкл нагрузки без снятия питания со всей системы)
 По включению питания формируется импульс сброса самотестирования нагрузки. 
 
 
 The circuit:
 * Оптрон Режима 1  attached from pin 9 to ground 
 * Оптрон Режима 2  attached from pin 11 to ground
 * Оптрон Вкл/Выкл  attached from pin 7 to ground
 * Иммитация короткого нажатия режима 1 attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground
 * Иммитация длинного нажатия режима 1 attached to pin 3 from +5V
 * 10K resistor attached to pin 2 from ground
 * Иммитация короткого нажатия режима 2 attached to pin 4 from +5V
 * 10K resistor attached to pin 4 from ground
 * Иммитация длинного нажатия режима 2 attached to pin 5 from +5V
 * 10K resistor attached to pin 5 from ground
 * pin 8 attached to pin 11   
 * pin 7 attached to pin 12
  
  ******************
 modified 22.01.2010
  */
// constants won't change. They're used here to 
// set pin numbers:
const int buttonPin1 = 12;     // Вход с питания
const int buttonPin2 = 8;     // Вход с формирователя сброса
const int buttonPin3 = 2;     // Режим 1 короткое нажатие
const int buttonPin4 = 3;     // Режим 1 длинное нажатие
const int buttonPin5 = 4;     // Режим 2 короткое нажатие
const int buttonPin6 = 5;     // Режим 2 длинное нажатие
const int buttonPin7 = 6;     // Включение/выключение питания
const int ledPin4 =  9;       // Управление 1 режимом
const int ledPin5 =  11;      // Управление 2 режимом/Ипульс сброса теста
const int ledPin2 =  7;      // Включение нагрузки
// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin4, OUTPUT); 
  pinMode(ledPin5, OUTPUT);
    // initialize the pushbutton pin as an input:
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);  
  pinMode(buttonPin4, INPUT);
  pinMode(buttonPin5, INPUT);  
  pinMode(buttonPin6, INPUT);
  pinMode(buttonPin7, INPUT);
    // turn LED on:    
    digitalWrite(ledPin2, HIGH); // Первое включение системы
   
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin1);
  // check if the pushbutton is pressed.
  // Если питание подано, формируется импульс сброса с задержкой 2 сек:
  if (buttonState == HIGH) {     
    // turn LED on: 
   delay(2000);                  // пауза на сброс теста for a 2 second 
    digitalWrite(ledPin5, HIGH); // Импульс сброса 2 сек 
   delay(1000);  
  } 
  else {
  }
}
void loop() {
  // Если нагрузка уже инициалирована, переход в рабочую программу
  while (digitalRead(buttonPin1) == HIGH) {
     work(); 
   }
    // Если нагрузка не инициалирована, переход в инициализацию
  while (digitalRead(buttonPin1) == LOW) {
     initial(); 
   }
}
void initial(){   
  delay(1000);                  // пауза на включение
   // Выбор режима Вкл/Выкл:
  buttonState = digitalRead(buttonPin7);
  
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin2, HIGH); // Включение питания
     } 
  else {
      }
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin1);
  // check if the pushbutton is pressed.
  // Если питание подано, формируется импульс сброса с задержкой 2 сек:
  if (buttonState == HIGH) {     
    // turn LED on: 
   delay(2000);                  // пауза на сброс теста for a 2 second 
    digitalWrite(ledPin5, HIGH); // Импульс сброса 2 сек 
   delay(1000);  
  } 
  else {
  }
   // Если импульс сброса сформирован, переход к рабочему циклу
   while (digitalRead(buttonPin2) == HIGH) {
     work(); 
   }
}
void work(){
  digitalWrite(ledPin5, LOW); // Снятие импульса сброса
  // Выбор режима 1 короткое/длинное нажатие:
  buttonState = digitalRead(buttonPin3);
  
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin4, HIGH); 
   delay(1000);                  // Короткое нажатие (Реж.1)
  digitalWrite(ledPin4, LOW);    // set the LED off 
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin4, LOW); 
  }
  buttonState = digitalRead(buttonPin4);
  
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin4, HIGH); 
   delay(5000);                  // Длинное нажатие (Реж.1)
  digitalWrite(ledPin4, LOW);    // set the LED off 
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin4, LOW); 
  }
  // Выбор режима 2 короткое/длинное нажатие:
  buttonState = digitalRead(buttonPin5);
  
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin5, HIGH); 
   delay(1000);                  // Короткое нажатие (Реж.2)
  digitalWrite(ledPin5, LOW);    // set the LED off 
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin5, LOW); 
}
// read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin6);
  
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin5, HIGH); 
   delay(5000);                  // Длинное нажатие (Реж.2)
  digitalWrite(ledPin5, LOW);    // set the LED off 
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin5, LOW); 
  }
  
  // Включение/выключение питания:
  buttonState = digitalRead(buttonPin7);
  
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin2, LOW); 
   delay(1000);                  // 
  digitalWrite(ledPin2, LOW);    // set the LED off 
  } 
  else {
  }
  
} 
 Задержки и длительности импульсов выставлены на глазок - величины уточню, когда буду вязать сабжи напрямую друг к другу...