#1 Re: Програмування Arduino » Вопрос по использованию библиотеки <Bounce.h> » 2016-03-04 00:22:29

Zen

и кажется что большое запаздывание, нажал, отпустил и потом примерно чрез 0,5-1 сек происходит реакция на нажатие, так и должно быть?

#2 Re: Програмування Arduino » Вопрос по использованию библиотеки <Bounce.h> » 2016-03-04 00:08:45

Zen
vvr пише:

в лупе идёт постоянный опрос кнопок
а уже работайте с ними где вам нужно, после или до ваших ифов

у меня еще используется switch case...при попадании в case корректно ли будет работать опрос, если разместить сразу после loop
buttonEsc.update() и т.д. Загрузил в ардуину, и мне кажется, что нажатие как-то очень долго остается активно, потому что заходит в меню (написанное мной в case) и сразу выходит из него.... в самом начале программы объявлено Вounce buttonUp = Bounce(8, 5); (аналогично и для других кнопок)
что не так?

#3 Re: Програмування Arduino » Вопрос по использованию библиотеки <Bounce.h> » 2016-03-03 23:50:09

Zen
alex_dol пише:
Zen пише:

пытаюсь бороться с дребезгом контактов....

Лучше 0,1 мкф впаралель кнопкам.

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

#4 Re: Програмування Arduino » Вопрос по использованию библиотеки <Bounce.h> » 2016-03-03 21:38:45

Zen
vvr пише:

а нафига вам столько делеев в коде
ну и ещё есть хорошая штука Serial
смотрите в мониторе что с вашими переменными происходит

пытаюсь бороться с дребезгом контактов....
вот если получиться нормально решить вопрос с этой библиотекой, тогда избавлюсь от делеев)
если поставить сразу после loop
buttonEsc.update();
buttonEnter.update();
buttonDown.update();
buttonUp.update();
то не совсем то что надо, например если я по какому-то условию попадаю в условие if, кнопки должны опрашиваться и обновляться только в этом условии....., у них в этом условии свои назначения....как это решить?

#5 Re: Програмування Arduino » Вопрос по использованию библиотеки <Bounce.h> » 2016-03-03 19:25:48

Zen
vvr пише:

один раз в начале loop()

кнопки проде бы заработали, только вот такое выражение отказывается работать
if ((buttonEsc.read()==0)&&(buttonEnter.read()==0))
            {
                flagStat=1;
                delay (300);
           
            }
что не так?

#6 Re: Програмування Arduino » Вопрос по использованию библиотеки <Bounce.h> » 2016-03-02 13:16:14

Zen
vvr пише:

buttonEsc.update();
buttonEnter.update();
buttonDown.update();
buttonUp.update();

а потом к каждой кнопке button....read()

Спасибо, вечером попробую.
А если у меня кнопки в разной части программы выполняют разные значения...., то есть в программе есть условия if в которые я захожу (при определенных переменных) и в них выполняются свои действия указанные кнопки, все равно я объявляю только в начале (то есть в начале loop) buttonEsc.update();
buttonEnter.update();
buttonDown.update();
buttonUp.update();
Правильно я понял? Или и в начале после каждой if?

#7 Re: Програмування Arduino » Запись в EEPROM отрицательного значения переменной типа float » 2016-03-02 10:55:29

Zen
NoName пише:

1 обнулите по пределам
if (fabs(data) < 0.00001 )  data = 0.0;
2 IEE754 поковыряйте
3 на целочисленную математику переходите

пробовал обнулять, пробовал и число по модулю.... не помогает. на целочисленное не могу, это коэффициент корректировки.
С IEE754 не работал, сейчас почитаю

#8 Re: Програмування Arduino » Вопрос по использованию библиотеки <Bounce.h> » 2016-03-02 10:44:09

Zen
vvr пише:

в начале цикла loop

В начале цикла я прописываю buttonEsc.update() && buttonEnter.update() && buttonUp.update() && buttonDown.update()  или делать через ||?
Далее я обращаюсь как обычно к кнопкам  buttonEsc.read(), я правильно понял?

#9 Програмування Arduino » Вопрос по использованию библиотеки <Bounce.h> » 2016-03-02 00:19:37

Zen
відповідей: 13

Как работать с одной кнопкой проблем нет, а вот если надо опросить сразу (либо одновременно) несколько кнопок, как сделать запись выражения. Действия с кнопками вызываются в разной части программы и в разных подпрограммах.
Например :
//если не нажаты кнопки, то считаем до выхода из меню
if ((digitalRead(buttonUp)==1)&&(digitalRead(buttonDown)==1)&&(digitalRead(buttonEsc)==1)&&(digitalRead(buttonEnter)==1)&&(valExit!=100))
  {
    valExit++;       
    delay (100);
  }
// если нажата одна из кнопок то сбрасываем счетчик
  if ((digitalRead(buttonUp)==0)||(digitalRead(buttonDown)==0)||(digitalRead(buttonEsc)==0)||(digitalRead(buttonEnter)==0))
  {
    valExit=0;
    delay (100);
  }
Или другой вариант :
if ((digitalRead(buttonEsc)==0)&&(digitalRead(buttonEnter)==0))
  {
    delay (200);
    flagStat=1;
    analogWrite (5, 100);
    delay (700);
  }
Вот такую команду buttonEsc.update() следующая (buttonEsc.read()==00) я пишу в начале цикла loop или перед каждым вызовом кнопок?
Прошу подсказать:)

#10 Програмування Arduino » Запись в EEPROM отрицательного значения переменной типа float » 2016-03-02 00:10:18

Zen
відповідей: 4

Пишу код и вот почти на финише столкнулся с проблемой записи отрицательной переменной типа float. Пишется то все хорошо (и отрицательные и положительные значения), только вот после записи отрицательной переменной, если записать в EEPROM значение 0,0, оно отображается «-0,0» Как убрать знак минус??? Он то не влияет на работу, просто у человека появится логичный вопрос «почему 0 со знаком минус»:(.
Вот кусок кода
if (digitalRead(buttonUp)==0)
          {
            corrU2 = corrU2+0.1;
            delay (150);
          }
            if (digitalRead(buttonDown)==0)
            {
              corrU2 = corrU2-0.1;
              delay (150);
            }
// значение изменяется от -0,5 до 0,5   
    if (corrU2>0.5) corrU2=0.5;
    if (corrU2<-0.5) corrU2=-0.5;

    if (digitalRead(buttonEnter)==0)
    {
       delay (200);
       EEPROM_float_write(36, corrU2);
       delay (100);
пробовал делать 0 по  модулю, пробовал добавлять очень малое положительное число….ничего не помогло.
Причем еще заметил непонятную непонятность, есть точно такой же кусок кода только для другого канала, пишет в EEPROM_float_write(32, corrU1); и вот куда сперва записал отрицательное значение, там и проявляется 0 с минусом:( В остальном все работает как надо, только вот 0 с минусом смотрится не очень:( Прошу посодействовать:)))
Что не так? Как с этим бороться?

#11 Re: Програмування Arduino » Ввод уставок в программу с кнопок » 2015-12-11 12:43:53

Zen
vvr пише:
Zen пише:

Вариант setpoint=setpoint+0.1; не предлагать:))) Буду очень благодарен если кто подскажет:)

при такой постановке вопроса решения не получите

что не так с постановкой вопроса? тот вариант который я указал очень просто и не удобный при вводе больших уставок.

#12 Re: Програмування Arduino » Ввод уставок в программу с кнопок » 2015-12-11 12:42:53

Zen
vvr пише:
Zen пише:

Вариант setpoint=setpoint+0.1; не предлагать:))) Буду очень благодарен если кто подскажет:)

при такой постановке вопроса решения не получите

что не так с постановкой вопроса? тот вариант который я указал очень просто и не совсем удобный при вводе больших уставок.

#13 Програмування Arduino » Ввод уставок в программу с кнопок » 2015-12-10 19:56:55

Zen
відповідей: 9

В инете не могу найти информацию, прошу оказать помощь в части кода:)

Суть такова есть 4 кнопки (Up, Down, Esc, Enter), есть дисплей 1602 и arduino nano:). Надо при помощи этих 4-х кнопок в программу вводить различные уставки типа float с последующей записью в EEPROM.  Например мне надо задать уставку по напряжению отключения 12,6В. Как это организовать? Вариант setpoint=setpoint+0.1; не предлагать:))) Буду очень благодарен если кто подскажет:)

Підвал форуму