Дистанционное управление светом IR

filipow65
filipow65 аватар
Offline
Зарегистрирован: 18.01.2016

Имеется скеч на одну лампу.

Нужен на две лампы. Чтобы было два выключателя, также програмировались кнопки пультов. Динамик один оставить.

#include <IRremote.h>   
#include <avr/delay.h> 
#include <EEPROM.h> 
#define button 7 
#define speaker 11 
#define lamp 6 

IRrecv irrecv(2);  //вход для ик приемника 
decode_results results;   
unsigned long ir_command; 
uint8_t swt, count, state = 0;  //статус лампочки 
    
void setup()   
{   
  pinMode(speaker, OUTPUT);//громкоговоритель 
  pinMode(button, INPUT);//вход для кнопки 
  digitalWrite(button,HIGH);//включить подтяжку 
  pinMode(lamp, OUTPUT);//лампочка 
  irrecv.enableIRIn(); // включить приемник   
}   
    
void loop()  
{   
 swt=digitalRead(button); 
 count=0;  
 while(swt==0) 
   { 
    if(count>30) 
     {  
       beep(100,400); 
       for(unsigned long i=0; i<2000000; i++) 
       { 
         if (irrecv.decode(&results))   
          {   
            SaveEEPROM(results.value);   
            irrecv.resume();            
            break;             
          } 
        }  
       beep(30,900);   
       break;  
      } 
    count++;   
    swt=digitalRead(button);   
    _delay_ms(100);  
   } 
   
 ir_command=LoadEEPROM(); 
    if (irrecv.decode(&results)) 
    {     
      if(ir_command==results.value)  
        { 
          state=~state;  
          digitalWrite(lamp, state); 
          beep(10,300);  
          _delay_ms(700);  
        }             
     irrecv.resume();          
    } else  if(count>1)       
             {  
               state=~state; 
               digitalWrite(lamp, state);  
               beep(10,500); 
               _delay_ms(100); 
             }         
} 

void SaveEEPROM(unsigned long ir_code) 
{ 
  EEPROM.write(0, ir_code & 0xFF); 
  EEPROM.write(1, (ir_code & 0xFF00) >> 8); 
  EEPROM.write(2, (ir_code & 0xFF0000) >> 16); 
  EEPROM.write(3, (ir_code & 0xFF000000) >> 24); 
} 

unsigned long LoadEEPROM()  
{ 
  byte val = EEPROM.read(3);  
  unsigned long ir_code=val; 
      val = EEPROM.read(2); 
                ir_code= (ir_code << 8) | val; 
      val = EEPROM.read(1); 
                ir_code= (ir_code << 8) | val; 
      val = EEPROM.read(0); 
                ir_code= (ir_code << 8) | val; 
  return ir_code; 
} 

void beep(byte dur, word frq) 
{ 
  dur=(1000/frq)*dur; 
  for(byte i=0; i<dur; i++) 
  { 
   digitalWrite(speaker, HIGH);  
   _delay_us(frq);  
   digitalWrite(speaker, LOW); 
   _delay_us(frq); 
  }  
} 

В программирование я полный 0 , помогите пожалуста.

filipow65
filipow65 аватар
Offline
Зарегистрирован: 18.01.2016

Нашол здесь: http://777led.ru/distancionnyj-vyklyuchatel-svoimi-rukami/ даже с видио есть https://youtu.be/imxr91KRP_A

собрал работает.