Подскажите с analogData

DevotedFerrari
Offline
Зарегистрирован: 18.09.2015

есть скетч где регулируется яркость светодиода удержанием кнопки на ик пульте, но шаг релулировки туь +/- 1. подключил к ленте светодиодной - от нуля до полной ярокости минуту наверное нужно держать кнопку, как в этом коде увеличить шаг увеличения яркости с 1 до 10 к примеру?

 

#include <IRremote.h> // https://github.com/shirriff/Arduino-IRremote

#define RECV_PIN 4 // IR приемник
#define OUT1 8// выхода на мосфеты
#define OUT2 10
 

#define POWER_KEY 0x20DF4EB1 // коды пульта ДУ
#define KEY1 0x20DFC639 // v-
#define KEY2 0x20DF8679 // v+
#define KEY3 0xC03FC03F
#define KEY4 0xC03F40BF

byte analogData1, analogData2 = 0; // значения аналогово выхода
uint32_t val; 

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  irrecv.enableIRIn();  
//Serial.begin(9600);
}


void loop() {
  if (irrecv.decode(&results)) { // если пришел пакет  
    if (results.value != 0xFFFFFFFF){ // и этот пакет не FF
      val = results.value; // сохраняем правельный пакет в переменную     
    }                 // если пришел FF, соответственно пропускаем.
    
    /// сверяем значение из переменной val.. если пришла команда повтора (пакет с FF)
    /// в переменной останется прошлый, правельный, пакет и код выполнится повторно. 
    if (val == KEY1){      
       if (analogData1 != 0)analogData1--; // если шим не равно 0 отнимаем 1 
       analogWrite(OUT1, analogData1);    // устанавливаем значение в выход     
    }    
     if (val == KEY2){ // и это вторая кнопка     
       if (analogData1 < 255) analogData1++; // если шим меньше 255 прибовляем 1 
       analogWrite(OUT1, analogData1);  // устанавливаем значение 
    }
 
    if (val == KEY4){      
       if (analogData2 != 0)analogData2--;  
       analogWrite(OUT2, analogData2);      
    }    
     if (val == KEY3){      
       if (analogData2 < 255) analogData2++;  
       analogWrite(OUT2, analogData2);  
    }
      
     ///
    if (results.value == POWER_KEY) {  
      if (analogData1 != 0 && analogData2 != 0){ // если ШИМ неравно 0
        analogWrite(OUT1, 0); // выключаем
        analogWrite(OUT2, 0);
        analogData1 = 0;
        analogData2 = 0;
      }
      else {
        analogWrite(OUT1, 255); // включаем
        analogWrite(OUT2, 255); 
        analogData1 = 255;
        analogData2 = 255;
      }          
    }  
        
/*Serial.println(val, HEX); //// ТЕСТЫ!
Serial.println(results.value, HEX); 
Serial.println(analogData1); 
Serial.println(analogData2);
Serial.println();
*/  
  irrecv.resume(); 
  }
}

 

Araris
Offline
Зарегистрирован: 09.11.2012

1. Заведите переменную  byte step=2; // потом опытным путем подберёте значение.

2. Замените analogData1-- analogData1++ analogData2-- analogData2++

соответственно на analogData1-=step analogData1+=step analogData2-=step analogData2+=step

Это всё.

 
bwn
Offline
Зарегистрирован: 25.08.2014

А еще лучше, по команде запускайте цикличное увеличение-уменьшение с задержкой, а в нужный момент останавливайте.

bwn
Offline
Зарегистрирован: 25.08.2014

Код зело знакомый, даже очепятки те же. Если брали у Thorn, то в конце холивара реализованы функции автоматического увеличения-уменьшения яркости, с ручной коррекцией.

DevotedFerrari
Offline
Зарегистрирован: 18.09.2015

Спасибо!