Ошибка при использовании библиотеки Bounce

Loki_86
Offline
Зарегистрирован: 07.04.2017

Доброго времени суток.

При попытке запилить код на ШИМ управление двумя кнопками с использованием библиотеки bounce вылезли непонятные проблемы.

1 Не дает через #define назначить переменные для портов

2 Не дает назначить в переменную bouncer.read (пробовал и в int и в boolean) 

Проблемы я пометил в коде комментариями. 



#include <Bounce2.h>

// изначально скетч разрабатывается для ШИМ управления светодиодом двумя кнопками "+" и "-" и без прерывания цикла программы

int buttonPin_1 = 2; // не дает почему-то поставить #define
int buttonPin_2 = 4; // не дает почему-то поставить #define
int ledPin = 9;  // не дает почему-то поставить #define
int ledStatus = 0;
int ledPreStatus = 0; // 
#define ledStep 51;
#define buttonTime 10  
Bounce bouncer1 = Bounce();
Bounce bouncer2 = Bounce();

void setup() {
  analogWrite(ledPin, ledStatus); 
  pinMode(buttonPin_1, INPUT_PULLUP);
  bouncer1.attach(buttonPin_1);
  bouncer1.interval(buttonTime);
  
  pinMode(buttonPin_2, INPUT_PULLUP);
  bouncer2.attach(buttonPin_2);
  bouncer2.interval(buttonTime);

}

void loop() {
  bouncer1.update();
  bouncer2.update();
  int val1 = !bouncer1.read ; // не может преобразовать ни в int ни в boolean
  int val2 = !bouncer2.read ; // не может преобразовать ни в int ни в boolean
    if ( val1 == HIGH && val2 == LOW ){
      if (ledPreStatus<255){
   ledPreStatus = ledPreStatus+ledStep;
   if (ledPreStatus>255){
    ledPreStatus = 255;
      }
        }
    }
    
    if ( val2 == HIGH && val1 == LOW){
      if (ledPreStatus>0){
   ledPreStatus = ledPreStatus-ledStep;
   if (ledPreStatus<0){
    ledPreStatus = 0;  
      }
        }
    }
    ledStatus=ledPreStatus
  }

 

 

JasKo
Offline
Зарегистрирован: 21.11.2015

Правильный дефайн у вас в 10 строке - делайте подобным образом.

По поводу 30 и 31 строки - смотрите описание вашей библиотеки как с ней правльно работать.

Loki_86
Offline
Зарегистрирован: 07.04.2017

В строках 5, 6, 7  я пробовал ставить #define. но компилятор ругался.

Update. Довел код до работоспособного (как всегда невнимательность) . но проблема с #define осталась


#include <Bounce2.h>

//скетч разрабатывается для ШИМ управления светодиодом двумя кнопками "+" и "-" по однократному нажатию

int buttonPin_1 = 2; // не дает почему-то поставить #define buttonPin_1 2
int buttonPin_2 = 4; // не дает почему-то поставить #define buttonPin_2 4
int ledPin = 9;  // не дает почему-то поставить #define ledPin 9
int ledStatus = 0;
#define ledStep 51;
#define buttonTime 50  
Bounce bouncer1 = Bounce();
Bounce bouncer2 = Bounce();
  boolean StatePin_1 = 0;
  boolean StatePin_2 = 0;

void setup() {
  ledStatus = 0;
  analogWrite(ledPin, ledStatus); 
  
  pinMode(buttonPin_1, INPUT_PULLUP);
  bouncer1.attach(buttonPin_1);
  bouncer1.interval(buttonTime);
  
  pinMode(buttonPin_2, INPUT_PULLUP);
  bouncer2.attach(buttonPin_2);
  bouncer2.interval(buttonTime);
 
}

void loop() {
  
  bouncer1.update();
  bouncer2.update();
  boolean val1 =!bouncer1.read(); 
  boolean val2 =!bouncer2.read(); 

    if ( val1 == HIGH && val2 == LOW ){
      if (ledStatus<255 && val1 !=StatePin_1){
   ledStatus = ledStatus+ledStep;
   StatePin_1=HIGH;
   if (ledStatus>255){
    ledStatus = 255;
      }
}
        
    }
    
    if ( val2 == HIGH && val1 == LOW ){
      if (ledStatus>0 && val2 !=StatePin_2){
   ledStatus = ledStatus-ledStep;
   StatePin_2=HIGH;
   if (ledStatus<0){
    ledStatus = 0;  
      }
        }
        
    }
    if(val1 == LOW && val2 == LOW){
      StatePin_1=LOW;
      StatePin_2=LOW;
    }
    
    
    analogWrite(ledPin, ledStatus);
  }
JasKo
Offline
Зарегистрирован: 21.11.2015

Проверил ваш скетч у себя все с дефайнами компилируется без проблем.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Лучший  "bounce" это конденсатор.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Loki_86 пишет:

Проблемы я пометил в коде комментариями. 

Лучше б Вы ообщения компилятора привели!

Не ставьте ; после определяемого числа в #define и будет Вам счастье.

#define  reffery  321

Вот как-то так

Logik
Offline
Зарегистрирован: 05.08.2014

Клапауций не спать!!

Запрети нах этот bounce, он не только хрень дебильная, он даже хуже твоего титанового самоката.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

Клапауций не спать!!

Запрети нах этот bounce, он не только хрень дебильная, он даже хуже твоего титанового самоката.

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

Loki_86
Offline
Зарегистрирован: 07.04.2017

Logik, в чем проблема использования библиотеки bounce?

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

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Loki_86 пишет:

Logik, в чем проблема использования библиотеки bounce?

логик отправлен в питушатню за балабольство.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Loki_86 пишет:

Logik, в чем проблема использования библиотеки bounce?

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

Так ведь есть такие "начинающие", что которым до статуса начинающих как до Луны пехом. А библитеку bounce я посылаю к Джереми Блуму вместе с теми кто ее юзает.

Logik
Offline
Зарегистрирован: 05.08.2014

Хе-хе

Клапауций 112 пишет:

 - ходи в тему класс титановый велосипед для тактовой кнопки. и обоснуй 

Клапауций 112 пишет:

логик отправлен в питушатню за балабольство.

 

Теперь я знаю где на форуме петушатня. Самокритчно ты Клапауций, к своей теме относишся )) Но справедливо.

Loki_86 пишет:

Logik, в чем проблема использования библиотеки bounce?

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

Не годно. Потому что верное решение будет выглядеть дето так.

// изначально скетч разрабатывается для ШИМ управления светодиодом двумя кнопками "+" и "-" и без прерывания цикла программы

int buttonPin_1 = 2; // не дает почему-то поставить #define
int buttonPin_2 = 4; // не дает почему-то поставить #define
int ledPin = 9;
int ledStatus = 0;
int ledPreStatus = 0;
#define ledStep 51

void setup() {
  analogWrite(ledPin, ledStatus); 
  pinMode(buttonPin_1, INPUT_PULLUP);
  pinMode(buttonPin_2, INPUT_PULLUP);
}

void loop() {
  static byte TimeKey;
  static byte TimeKeyCnt;
  byte Time=millis();
  if(Time-TimeKey>50)
  {
    if(!TimeKeyCnt)
    {
      if(digitalRead(buttonPin_1)==LOW)
        ledPreStatus=min(255,ledPreStatus+ledStep);
      if(digitalRead(buttonPin_2)==LOW)
        ledPreStatus=max(0,ledPreStatus-ledStep);
      if(ledPreStatus!=ledStatus)
      {
        TimeKeyCnt=10;
       ledStatus=ledPreStatus;
      }
    } else TimeKeyCnt--;
    TimeKey=Time;
  }
}

Теперь о преимуществах этого кода.

1. Расширен востребованый функционал, добавлен автоповтор.

2. Обем написания меньше.

3. Обем скомпилировеного кода меньше.

4. Использует озу меньше. Пункты 2-4 можете проверить сами, а заодно сходить в "петушатню" по ссылке выше и сравнить с тамошним.

5. Загружвет процессор меньше.

6. Не требует наличия сторонней библиотеки. Проект собирается на любой версии без выкачки либы.

7. При разработке не требует  времени на изучение интерфейса сторонней библиотеки. Использованы только широко известные функции.

8. Не зависит от качества сторонней библиотеки, её глюков, наличия делея, версионной политики, использования ценных аппаратных ресурсов.

9. Расширяемость. Любой требуемый функционал самой экзотичной фантазии (например двойной клик одной кнопки при долгом удержании второй при потушеном светодиоде) достаточно легко добавляется. Причем ровно в том обеме, в котором сочтете нужным.

10. Знание общего подхода (формирован временных интервалов без делея) избавляет от необходимости знания многих частных (набора библиотек на каждый пук). Для новичка это скорость освоения ардуины, для старпера - меньше хлама в голове.

ПС. Искал в Вашем коде непосредственно установку ledPin, не нашел, ну и себе не стал писать.

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

Теперь я знаю где на форуме петушатня. Самокритчно ты Клапауций, к своей теме относишся )) Но справедливо.

поздно отмазываться от звания питушиного балабола - ты не ответил за свои слова.

Logik
Offline
Зарегистрирован: 05.08.2014

Клапауций 112 пишет:

Logik пишет:

Теперь я знаю где на форуме петушатня. Самокритчно ты Клапауций, к своей теме относишся )) Но справедливо.

поздно отмазываться от звания питушиного балабола - ты не ответил за свои слова.

Клапауций 112 пишет:

 

Не. На твой пожизненый титул я не претендую. Хотяб потому что в 

Logik пишет:

и обоснуй там, что дребезг в моём коде обрабатывается некорректно. 

 

 

нет важной штучки  -  ссылки на то, где я такое утверждал. Но так-как ты балабол то шо с тя взять..

ПС. Такого "дребезг в моём коде обрабатывается некорректно" я даже в принципе знать не могу, я её не пользовал и  не буду. Никогда. Потому про ней, как и про эту bounce, пишу просто и конкретно -  ненужная и даже вредная хрень. Обоснования - см. на пару постов выше, целых 10 пунктов.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

я даже в принципе знать не могу, я её не пользовал и  не буду.

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