Нужен кусочек кода

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

Добрый день, нашел скетч управления светодиодной лентой с ик пульта. На пульте 3 кнопки, 1 включает/выключает, 2я уменьшает яркость, 3я увеличивает. Как изменить код чтобы 4я кнопка включала эффект плавного затухания и обратно повышения яркости ленты? 


#include <IRremote.h>
int bright;
int before;
int out=9; // подключение LED к 9 пину 
int steps=5; // шаг изменения яркости
int RECV_PIN = 3; // сигнальный контакт ИК приемника


IRrecv irrecv(RECV_PIN);

decode_results results;

void setup(){
  irrecv.enableIRIn(); // запуск приемника
  before=0; // LED изначально отключен
  bright=255; // максимальная яркость 255 значений
  pinMode(out,OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {

  if (results.value==0x20DF4EB1){ // включение/отключение светодиода
    if(before==0){ // если светодиод отключен, то включаем его 
      digitalWrite(out,HIGH);
      before=1; // LED включен
    }
    else{
      digitalWrite(out,LOW); // если светодиод включен, то вылючаем его 
      before=0;
      bright=255; 
    }}
  if (results.value==0x20DF8E71 && before==1){ // уменьшение яркости
    if(bright-255/steps<0){ 
      analogWrite(out,bright);
    }
    else{
    bright=bright-255/steps;
    analogWrite(out,bright);
  }}
  if (results.value==0x20DFC639 && before==1){ // увеличение яркости
    if(bright+255/steps>255){
      analogWrite(out,bright);
    }
    else{    
    bright=bright+255/steps;
    analogWrite(out,bright);
  }}

  irrecv.resume();
  }}
sadman41
Offline
Зарегистрирован: 19.10.2016

500ры

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015
#include <IRremote.h>
int bright;
int before;
int out = 9; // подключение LED к 9 пину
int steps = 5; // шаг изменения яркости
int RECV_PIN = 3; // сигнальный контакт ИК приемника


IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  irrecv.enableIRIn(); // запуск приемника
  before = 0; // LED изначально отключен
  bright = 255; // максимальная яркость 255 значений
  pinMode(out, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {

    if (results.value == 0x20DF4EB1) { // включение/отключение светодиода
      if (before == 0) { // если светодиод отключен, то включаем его
        digitalWrite(out, HIGH);
        before = 1; // LED включен
      }
      else {
        digitalWrite(out, LOW); // если светодиод включен, то вылючаем его
        before = 0;
        bright = 255;
      }
    }
    if (results.value == 0x20DF8E71 && before == 1) { // уменьшение яркости
      if (bright - 255 / steps < 0) {
        analogWrite(out, bright);
      }
      else {
        bright = bright - 255 / steps;
        analogWrite(out, bright);
      }
    }
    if (results.value == 0x20DFC639 && before == 1) { // увеличение яркости
      if (bright + 255 / steps > 255) {
        analogWrite(out, bright);
      }
      else {
        bright = bright + 255 / steps;
        analogWrite(out, bright);
      }
    }
    if (results.value == "АДРЕС_ЧЕТВЕРТОЙ_КНОПКИ" )
    {
      for(int i = 0; i < 254; i++)
      {
          analogWrite(out, i);
      }
      
      delay(200);

      for(int i = 254; i > 0; i--)
      {
          analogWrite(out, i);
      }
    }
  }
  irrecv.resume();
}

 

 

Здесь раздел за вознаграждение...если что. если всё правильно набросал --- можно и тел пополнить (в анкетах исполнителей есть)

sadman41
Offline
Зарегистрирован: 19.10.2016

"Уже оказанная услуга ничего не стоит" - восточная мудрость.

Да и линейное регулирование светодиодов так себе на вид...

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

sadman41 пишет:

"Уже оказанная услуга ничего не стоит" - восточная мудрость.

Да и линейное регулирование светодиодов так себе на вид...

Ну если не считать блокировку кнопок на те пару циклов, то пойдет.

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

sadman41 пишет:

"Уже оказанная услуга ничего не стоит" - восточная мудрость.

Да и линейное регулирование светодиодов так себе на вид...

Попробую не убиваться по этому поводу.. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, и еще - боюсь, что в голове ТС сидит такая мысль: "Четвертая кнопка при первом нажатии плавно тушит с установленной яркости, при повторном - плавно включает до установленной яркости". В ином случае вся операция "4-я кнопка" смысла не имеет.

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

не важно на каком уровне был свет в момент нажатия, нужно просто включение цикличного плавного затухания и обратного повышения яркости

DevotedFerrari
Offline
Зарегистрирован: 18.09.2015
warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]
 
     if (results.value == "код 4й кнопки" )
 
 
и не работает ни одна теперь
brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Мдааа....грустно... Пополните человеку челефон и спросите у него "чем заменить эти русские буквы"... И будет у вас готовое решение.

Green
Offline
Зарегистрирован: 01.10.2015

Брокли, это Вы пример подали, вот теперь Ваши последователи и накалываются на кактусах...(
Оно хоть и мелочь, но неприятный осадок остаётся...(
 

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

brokly пишет:

Мдааа....грустно... Пополните человеку челефон и спросите у него "чем заменить эти русские буквы"... И будет у вас готовое решение.

))))) Расскажи человеку что это (а то у меня нервов не хватит), я уехал - буду вечером..

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Green пишет:

Брокли, это Вы пример подали, вот теперь Ваши последователи и накалываются на кактусах...(

Оно хоть и мелочь, но неприятный осадок остаётся...(

Ага , я виноват :) А если я с крыши спрыгну ... Ну и т.д, как в детском саду :) 

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

Это вообще мои русские буквы, вставил сюда чтобы понятно было на какую строчку ошибка вылезает, а так там код кнопки ставил. Там код в кавычках вчера вставлял оказывается, без них ошибка пропала, все компилируется но ничего не работает после этого, не одна кнопка 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Значит не так вставил.

Публикуй копипаст кода прямо из Ардуино ИДЕ. Полностью без купюр.

===

Вот теперь тут, вэтом разделе и я поучаствую. Это правильное место теперь.

DevotedFerrari
Offline
Зарегистрирован: 18.09.2015
#include <IRremote.h>
int bright;
int before;
int out = 9; // подключение LED к 9 пину
int steps = 5; // шаг изменения яркости
int RECV_PIN = 3; // сигнальный контакт ИК приемника


IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  irrecv.enableIRIn(); // запуск приемника
  before = 0; // LED изначально отключен
  bright = 255; // максимальная яркость 255 значений
  pinMode(out, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {

    if (results.value == 0x20DF4EB1) { // включение/отключение светодиода
      if (before == 0) { // если светодиод отключен, то включаем его
        digitalWrite(out, HIGH);
        before = 1; // LED включен
      }
      else {
        digitalWrite(out, LOW); // если светодиод включен, то вылючаем его
        before = 0;
        bright = 255;
      }
    }
    if (results.value == 0x20DF8E71 && before == 1) { // уменьшение яркости
      if (bright - 255 / steps < 0) {
        analogWrite(out, bright);
      }
      else {
        bright = bright - 255 / steps;
        analogWrite(out, bright);
      }
    }
    if (results.value == 0x20DFC639 && before == 1) { // увеличение яркости
      if (bright + 255 / steps > 255) {
        analogWrite(out, bright);
      }
      else {
        bright = bright + 255 / steps;
        analogWrite(out, bright);
      }
    }
    if (results.value == 0x20DF8679 )
    {
      for(int i = 0; i < 254; i++)
      {
          analogWrite(out, i);
      }
      
      delay(200);

      for(int i = 254; i > 0; i--)
      {
          analogWrite(out, i);
      }
    }
  }
  irrecv.resume();
}

 

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

Вот так заработало, но по 4й кнопке свет просто горит на минимальной яркости

 

#include <IRremote.h>
int bright;
int before;
int out = 9; // подключение LED к 9 пину
int steps = 5; // шаг изменения яркости
int RECV_PIN = 3; // сигнальный контакт ИК приемника


IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  irrecv.enableIRIn(); // запуск приемника
  before = 0; // LED изначально отключен
  bright = 255; // максимальная яркость 255 значений
  pinMode(out, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {

    if (results.value == 0x20DF4EB1) { // включение/отключение светодиода
      if (before == 0) { // если светодиод отключен, то включаем его
        digitalWrite(out, HIGH);
        before = 1; // LED включен
      }
      else {
        digitalWrite(out, LOW); // если светодиод включен, то вылючаем его
        before = 0;
        bright = 255;
      }
    }
    if (results.value == 0x20DF8E71 && before == 1) { // уменьшение яркости
      if (bright - 255 / steps < 0) {
        analogWrite(out, bright);
      }
      else {
        bright = bright - 255 / steps;
        analogWrite(out, bright);
      }
    }
    if (results.value == 0x20DFC639 && before == 1) { // увеличение яркости
      if (bright + 255 / steps > 255) {
        analogWrite(out, bright);
      }
      else {
        bright = bright + 255 / steps;
        analogWrite(out, bright);
      }
    }
    if (results.value == 0x20DF8679 ){
    {
      for(int i = 0; i < 254; i++)
      {
          analogWrite(out, i);
      }
      
      delay(200);

      for(int i = 254; i > 0; i--)
      {
          analogWrite(out, i);
      }
    }
  }
  irrecv.resume();
}}

 

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

так задержки поставь сколько нужно -  в каждом цикле

или думал полностью за тебя всё напишут.

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015
for(int i = 0; i < 254; i++)
{
      analogWrite(out, i); delay(100);
}

       
delay(200);
 
for(int i = 254; i > 0; i--)
{
    analogWrite(out, i); delay(100);
}

 

 

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

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

evgta
Offline
Зарегистрирован: 02.09.2016

да заплати уже кому=нибудь, фраза риторическая просто чтобы тему остлеживать, так, чисто поржать

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

а над чем ты ржешь то? 

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Это раздел для возмездной помощи... 

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

я не против

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

пиши подробно что нужно..

можешь на скайп p.masyukov

или вибер 89517956505