Проверьте простенький скетч...если не лень, конечно))плз

lonely_jack
Offline
Зарегистрирован: 12.10.2015

Идея такова - управление светодиодом led при помощи кнопки и ик пульта. ее я реализовал(заранее узнав код кнопок ик). а теперь вот хочу прикрутить обучение этой штуке. алгоритм - кнопку learn нажимаем - загорается светодиод learnled, запускается обучение, а потом кнопкой пульта(которую запомнила ардуина) включаем/выключаем светодиод led. 

что добавить или убрать?

//управление нагрузками (светом) при помощи ик пульта и тактовой кнопки. 
#include <IRremote.h>
#include <Bounce.h>
#include <EEPROM.h>
 
#define BUTTON 2
#define led 13
#define RECV_PIN 11
#define learn 10
#define learnled 7
#define IR_CODE_DATA_ADDRESS 0
 
//создаем объект класса Bounce. Указываем пин, к которому подключена кнопка, и время дребезга в мс.
Bounce bouncer = Bounce(BUTTON,10); 
Bounce bouncerlearn = Bounce(learn,5);
 
 
//задаем начальное состояние светодиода "выключен"
int ledValue = LOW;
int learnledValue = LOW;
// переменные
int ledStat = 0;
int leearnledStat = 0;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
//определяем режимы работы пинов
  pinMode(BUTTON,INPUT);
  pinMode(led,OUTPUT);
  pinMode(learn,INPUT);
  pinMode(learnled,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Запуск приемника
}
 
void loop() {
 
 
 //если сменилось состояние кнопки
  if ( bouncer.update() ) {
    //если считано значение 1
    if ( bouncer.read() == HIGH) {
     //если свет был выключен, будем его включать
     if ( ledValue == LOW ) {
       ledValue = HIGH;
     //если свет был включен, будем выключать
     } else {
       ledValue = LOW;
     }
     //записываем значение вкл/выкл на пин со светодиодом 
     digitalWrite(led,ledValue);
    }
  }
   if ( bouncerlearn.update() ) {
    //если считано значение 1
    if ( bouncerlearn.read() == HIGH) {
     //если свет был выключен, будем его включать
     if ( learnledValue == LOW ) {
       learnledValue = HIGH;
       //задаем ожидание команды с пульта
       Serial.println(results.value);
    if (results.value = 0xFFFFFFFF){
    EEPROM.write(results.value, IR_CODE_DATA_ADDRESS); }
     //если свет был включен, будем выключать
     } else {
       learnledValue = LOW;
     }
     //записываем значение вкл/выкл на пин со светодиодом 
     digitalWrite(learnled,learnledValue);
    }
  }
if (irrecv.decode(&results)) 
{
Serial.println(results.value);
 
//красный
if (results.value ==  EEPROM.read(IR_CODE_DATA_ADDRESS)
 && ledValue == 0)
{
digitalWrite(led, HIGH);
ledValue = 1;
}
else
if (results.value == EEPROM.read(IR_CODE_DATA_ADDRESS)
 
 && ledValue == 1)
{
digitalWrite(led, LOW);
ledValue = 0;
}
 
 
irrecv.resume(); // Получить слудующее значение
}
}
 
 значение
}
}
 
lonely_jack
Offline
Зарегистрирован: 12.10.2015

забыл сказать - для продвинутых - знаю, что код некрасивый совсем, однако с чего то надо начать, сильно не пинаем (хотя можно и поворчать для развлекухи)

lonely_jack
Offline
Зарегистрирован: 12.10.2015

ардуино уно использую