Независимый FADE 2х диодов

karp.exe
Offline
Зарегистрирован: 25.03.2019

Задача упрощенно- 2 кнопки, 2 светодиода.

При нажатии на кнопку светодиод плавно разграется до максимума, и горит пока нажата кнопка, при отпускании так же плавно гаснет.

Вторая кнопка и светодиод управляется так же.



По отдельности каждая кнопка/диод работает корректно.

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

Пытаюсь добиться того, чтобы второй отрабатывал корретно и независимо.

 

Спасибо.

 

 

#include <Button.h>

Button button1(3); // Connect your button between pin 2 and GND
Button button2(4); // Connect your button between pin 3 and GND

boolean butt_flag1 = 0;
boolean butt_flag2 = 0;
boolean butt1;
boolean butt2;
unsigned long last_press1;
unsigned long last_press2;
unsigned long f1;
unsigned long f11;
unsigned long f2;
unsigned long f22;

int led1 = 6;  
int led2 = 10;  


void setup() {
  button1.begin();
  button2.begin();
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  if (button1.pressed()) {
    Serial.println("Button 1 pressed");
                for (int i=0; i <= 255;){
                  if(millis() - f1 > 30){
                  f1 = millis();
                  analogWrite(led1, i);
                  i=i+5;
                  }
                }
        }   
  if (button1.released()){
    Serial.println("Button 1 released");
                  for (int i=255; i >=0;){
                  if(millis() - f11 > 10){
                  f11 = millis();
                  analogWrite(led1, i);
                  i=i-5;
                  }
                }
      }
  if (button2.pressed()){
    Serial.println("Button 2 pressed");
                  for (int i=0; i <= 255;){
                  if(millis() - f2 > 30){
                  f2 = millis();
                  analogWrite(led2, i);
                  i=i+5;
                  }
                }
            last_press2 = millis();
        }
        
  if (button2.released()) {
    Serial.println("Button 2 released");
                for (int i=255; i >=0;){
                  if(millis() - f22 > 10){
                  f22 = millis();
                  analogWrite(led2, i);
                  i=i-5;
                  }
                }

  }}

 

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

Почему он должен реагировать?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

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

С божьими лупом и миллисом, повергнем супостатов.)))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

bwn пишет:

С божьими лупом и миллисом, повергнем супостатов.)))

Неправославно это.  Надо таймерами крутить да размахивать. 

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

DetSimen пишет:

Неправославно это.  Надо таймерами крутить да размахивать. 

Вай, нэ умэю. Эл.нагрузку в корпус уберу, отлажу и за часики на ИН-1 возьмусь, там твои таймера меня уже в засаде ждут, баюс.))))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а я скоро выкладу проект AudioUIMeter на 1602.  Там мне мои таймеры очень памогають. 

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

Ты, за библиотеку? Не, это не спортивно, я их самих, цволочей, выдрессировать хочу. Так что жди, скоро обертки, от вискаса, выклянчивать начну.))))

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

DetSimen пишет:

а я скоро выкладу проект AudioUIMeter на 1602.  Там мне мои таймеры очень памогають. 

Что измеряешь?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

я по аудио всё прикалываюсь.  Конкретно этот метер пайдёт в Вега 50-У122

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

DetSimen пишет:

я по аудио всё прикалываюсь.  Конкретно этот метер пайдёт в Вега 50-У122

Это я понял. Уровень звука на индикатор выводишь? Я как-то такое на ADS1115 делал, но с адресными светодиодами. Могу подкинуть - может интересное чего найдёшь.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

точно!!! есть же ADS1115.  Щас закажу.  Хотелось бы сделать, канеш, логарифмический, он более правильный для индикатора, да у Ардуины АЦП не того полёта...  

karp.exe
Offline
Зарегистрирован: 25.03.2019

Спасибо. получилось вот так оптимизмровать - всё работает.

 

byte pwm_led1; 
byte pwm_led2; 

boolean btn1=0; 
boolean btn2=0; 

unsigned long f1;
unsigned long f2;

const int b1 = 3; //вход кнопки 1 
const int b2 = 4; //вход кнопки 2 

const int l1 = 6; // выход 1 диода 
const int l2 = 10; //выход 2 диода 


void setup() { 
pinMode(l1, OUTPUT); 
pinMode(l2, OUTPUT); 
pinMode(b1, INPUT_PULLUP); 
pinMode(b2, INPUT_PULLUP); 
} 

void loop(){ 
btn1 = !digitalRead(b1); 
btn2 = !digitalRead(b2); 

if(millis()-f1>=3){f1=millis(); 
if(btn1&&pwm_led1<255){pwm_led1++;} 
if(!btn1&&pwm_led1>0) {pwm_led1--;} 
} 

if(millis()-f2>=3){f2=millis(); 
if(btn2&&pwm_led2<255){pwm_led2++;} 
if(!btn2&&pwm_led2>0) {pwm_led2--;} 
} 

analogWrite(l1,pwm_led1); 
analogWrite(l2,pwm_led2);
}

 

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

DetSimen пишет:

точно!!! есть же ADS1115.  Щас закажу.  Хотелось бы сделать, канеш, логарифмический, он более правильный для индикатора, да у Ардуины АЦП не того полёта...  

Дык табличные преобразования наше всё.