Цитата Сообщение от Serg_w Посмотреть сообщение
Еще раз попрошу Chipa подправить скетч и программу для All-In-One...
Пробуй

PHP код:
//http://compcar.ru   
#include <IRremote.h>  
byte bytes[13];    // 0-3 байт   энкодер, рулевые кнопки, ИК приемник, веб камера  
                  //   4 байт   датчик света 
                  //   5 байт   датчик напряжения 
                  //   6 байт   датчик топлива 
                  //   7-12 зарезервированы                   
  
int LIGHT_SENS ;   // Вход датчика освещености 
int VOLT_SENS ;    // Вход датчика напряжения 
int FUEL_SENS ;    // Вход датчика уровня топлива 
int JOYSTIK_PIN ;  // Вход для рулевых Кнопок 
int NC2_SENS ;    // Вход датчика 
int NC1_SENS ;    // Вход датчика  
int NC3_SENS ;    // Вход датчика 
int NC4_SENS ;    // Вход датчика 
  
  
int RECV_PIN 6;     //вход ИК приемника  
int back_cam 5//Вход активатора камеры 
int encoder0PinA //Вывод А энкодера 
int encoder0PinB //Вывод В энкодера 
int encoder_botton 4//Вход кнопки энкодера 
  
unsigned long res_dtir_dtold_irtime
byte tempcam_status
IRrecv irrecv(RECV_PIN);  
decode_results results
  
//****************************************** 
void setup()      
{  
  
pinMode(encoder0PinAINPUT);  
  
digitalWrite(encoder0PinAHIGH);     // подключить подтягивающий резистор 
  
pinMode(encoder0PinBINPUT);  
  
digitalWrite(encoder0PinBHIGH);    // подключить подтягивающий резистор 
  
pinMode(encoder_bottonINPUT);  
  
digitalWrite(encoder_bottonHIGH);    // подключить подтягивающий резистор 
   
pinMode(back_camINPUT);  
  
digitalWrite(back_camHIGH);    // подключить подтягивающий резистор 
  
  
attachInterrupt(0doEncoderAFALLING);  // настроить прерывание interrupt 0 на pin 2 
  
attachInterrupt(1doEncoderBFALLING);  // настроить прерывание interrupt 0 на pin 3   
Serial.begin(115200); // настроить скорость com порт    
irrecv.enableIRIn(); // включить приемник  
}   
//****************************************** 
void loop()   
{   
IR_resiver(); 
joystik(); 
/*cam(); 
  if ((millis()-time)>1000 && results.value ==0) //запуск процедур по таймеру 
   {     
     time = millis(); 
      autolight(); 
      fuel(); 
      voltmetr(); 
   }*/  

//*******************ИК приемник*********************** 
void IR_resiver() 
{  
   if ((
millis()-time)>1000 )  
   {    
     
time millis();   
     
results.value=0
   } 
  
  if (
irrecv.decode(&results))   
  {  
    if (
results.value && results.value 0xFFFFFFFF)  
    {  
      
ir_dt results.value;  
      
bytes[0] = ir_dt 0xFF;          // преобразовать в 4-байта   
      
bytes[1] = (ir_dt 0xFF00) >> 8;   
      
bytes[2] = (ir_dt 0xFF0000) >> 16;  
      
bytes[3] = (ir_dt 0xFF000000) >> 24;  
      
Serial.writebytes,13); // отправить прочитаное значение компьютеру  
  
      
if (old_ir == ir_dt){delay(300);} // Пауза после нажатия и удержания(перед повторами) 
      
else {delay(500);} 
      
old_ir ir_dt
    }  
           if (
results.value == 0xFFFFFFFF 
            { 
             
delay(130); //пауза между повторами 
             
Serial.writebytes,13); 
            }  
       
irrecv.resume();  
  }  

//****************резистивные кнопки************************** 
void joystik() 
{   
  
res_dt analogRead(JOYSTIK_PIN); // прочитать данные АЦП  
  
if( res_dt 1023 && results.value == 0
  { 
    
delay(50); // пауза для проверки дребезга 
    
if(res_dt == analogRead(JOYSTIK_PIN))   //если нет дребезга 
      

        
bytes[0] = res_dt 255;          // преобразовать в 2-байта  
        
bytes[1] = (res_dt 768) >> 8;  
        
bytes[2] = 0
        
bytes[3] = 0
        
Serial.writebytes,13); // отправить прочитаное значение компьютеру      
        
delay(250); // Пауза между нажатиями 
      
}   
  }     
}  
//******************Датчик освещения************************ 
void autolight() 

byte light;   
byte sens analogRead(LIGHT_SENS)/4;   
  
if ((
sens 0) && (sens<30)) {light 2;}    
if ((
sens 30) && (sens<60)) {light 60;}    
if ((
sens 60) && (sens<90)) {light 90;}  
if ((
sens 90) && (sens<120)) {light 120;}  
if ((
sens 120) && (sens<150)) {light 150;}    
if ((
sens 150) && (sens<190)) {light 190;}    
if (
sens 190)  {light 255;}    

   if(
light != bytes[4]) // если были изменения 
     
{  
      
clear_buf();    
      
bytes[4] = light
      
Serial.writebytes,13); 
     }       
}  
//*******************Измерение Напряжения*********************** 
void voltmetr() 

    
temp analogRead(VOLT_SENS)/4
      if(
temp !=  bytes[5]) 
      { 
        
clear_buf(); 
        
bytes[5]=temp;  
         
Serial.writebytes,13); 
      } 

//*******************Датчик топлива*********************** 
void fuel() 

      
temp analogRead(FUEL_SENS)/4
      if(
temp !=  bytes[6]) 
      { 
        
clear_buf(); 
        
bytes[6]=temp
         
Serial.writebytes,13); 
      } 

//*******************Активация веб камеры по сигналу ЗХ*********************** 
void cam() 

  
temp=digitalRead(back_cam); 
   if(
temp==HIGH && cam_status==0
   { 
        
clear_buf(); 
        
cam_status=255
        
bytes[1]=8
        
Serial.writebytes,13);  
   }  
       if(
temp==LOW && cam_status==255
         { 
          
clear_buf(); 
          
cam_status=0;  
          
bytes[1]= 9
          
Serial.writebytes,13); 
         } 

//*******************Активация веб камеры по сигналу ЗХ*********************** 
void clear_buf() 

      
bytes[0] = 0
      
bytes[1] = 0
      
bytes[2] = 0;  
      
bytes[3] = 0

//*******************обработка прерывания*********************** 
void doEncoderA() 

cli(); 
  if(
digitalRead(encoder0PinB)==HIGH){bytes[1]=24;}else{bytes[1]=15;}  
      
bytes[0] = 0
      
bytes[2] = 0;  
      
bytes[3] = 0
  
Serial.writebytes,13); 
sei();  
}   
//*******************обработка прерывания*********************** 
void doEncoderB() 

cli(); 
    if(
digitalRead(encoder0PinA)==HIGH){bytes[1]=15;}else{bytes[1]=24;} 
      
bytes[0] = 0
      
bytes[2] = 0;  
      
bytes[3] = 0
    
Serial.writebytes,13); 
sei();