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

Тема в разделе "Флудилка", создана пользователем filipow65, 24 янв 2016.

  1. filipow65

    filipow65 Нуб

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

    Нужен на две лампы. Чтобы было два выключателя, также програмировались кнопки пультов. Динамик один оставить.
    Код (C++):
    #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);
      }
    }
    Помогите пожалуста.