Ви не увійшли.
Сторінки 1
и кажется что большое запаздывание, нажал, отпустил и потом примерно чрез 0,5-1 сек происходит реакция на нажатие, так и должно быть?
в лупе идёт постоянный опрос кнопок
а уже работайте с ними где вам нужно, после или до ваших ифов
у меня еще используется switch case...при попадании в case корректно ли будет работать опрос, если разместить сразу после loop
buttonEsc.update() и т.д. Загрузил в ардуину, и мне кажется, что нажатие как-то очень долго остается активно, потому что заходит в меню (написанное мной в case) и сразу выходит из него.... в самом начале программы объявлено Вounce buttonUp = Bounce(8, 5); (аналогично и для других кнопок)
что не так?
Zen пише:пытаюсь бороться с дребезгом контактов....
Лучше 0,1 мкф впаралель кнопкам.
дребезг заключается не в плохом контакте, а в том, что одно нажатие воспринимается программой как нажатий 10-15 (за счет высокой скорости опроса). Почитайте в serial одно нажатие сколько раз отобразится у вас?:))
а нафига вам столько делеев в коде
ну и ещё есть хорошая штука Serial
смотрите в мониторе что с вашими переменными происходит
пытаюсь бороться с дребезгом контактов....
вот если получиться нормально решить вопрос с этой библиотекой, тогда избавлюсь от делеев)
если поставить сразу после loop
buttonEsc.update();
buttonEnter.update();
buttonDown.update();
buttonUp.update();
то не совсем то что надо, например если я по какому-то условию попадаю в условие if, кнопки должны опрашиваться и обновляться только в этом условии....., у них в этом условии свои назначения....как это решить?
один раз в начале loop()
кнопки проде бы заработали, только вот такое выражение отказывается работать
if ((buttonEsc.read()==0)&&(buttonEnter.read()==0))
{
flagStat=1;
delay (300);
}
что не так?
buttonEsc.update();
buttonEnter.update();
buttonDown.update();
buttonUp.update();а потом к каждой кнопке button....read()
Спасибо, вечером попробую.
А если у меня кнопки в разной части программы выполняют разные значения...., то есть в программе есть условия if в которые я захожу (при определенных переменных) и в них выполняются свои действия указанные кнопки, все равно я объявляю только в начале (то есть в начале loop) buttonEsc.update();
buttonEnter.update();
buttonDown.update();
buttonUp.update();
Правильно я понял? Или и в начале после каждой if?
1 обнулите по пределам
if (fabs(data) < 0.00001 ) data = 0.0;
2 IEE754 поковыряйте
3 на целочисленную математику переходите
пробовал обнулять, пробовал и число по модулю.... не помогает. на целочисленное не могу, это коэффициент корректировки.
С IEE754 не работал, сейчас почитаю
в начале цикла loop
В начале цикла я прописываю buttonEsc.update() && buttonEnter.update() && buttonUp.update() && buttonDown.update() или делать через ||?
Далее я обращаюсь как обычно к кнопкам buttonEsc.read(), я правильно понял?
Как работать с одной кнопкой проблем нет, а вот если надо опросить сразу (либо одновременно) несколько кнопок, как сделать запись выражения. Действия с кнопками вызываются в разной части программы и в разных подпрограммах.
Например :
//если не нажаты кнопки, то считаем до выхода из меню
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 или перед каждым вызовом кнопок?
Прошу подсказать:)
Пишу код и вот почти на финише столкнулся с проблемой записи отрицательной переменной типа 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 с минусом смотрится не очень:( Прошу посодействовать:)))
Что не так? Как с этим бороться?
Zen пише:Вариант setpoint=setpoint+0.1; не предлагать:))) Буду очень благодарен если кто подскажет:)
при такой постановке вопроса решения не получите
что не так с постановкой вопроса? тот вариант который я указал очень просто и не удобный при вводе больших уставок.
Zen пише:Вариант setpoint=setpoint+0.1; не предлагать:))) Буду очень благодарен если кто подскажет:)
при такой постановке вопроса решения не получите
что не так с постановкой вопроса? тот вариант который я указал очень просто и не совсем удобный при вводе больших уставок.
В инете не могу найти информацию, прошу оказать помощь в части кода:)
Суть такова есть 4 кнопки (Up, Down, Esc, Enter), есть дисплей 1602 и arduino nano:). Надо при помощи этих 4-х кнопок в программу вводить различные уставки типа float с последующей записью в EEPROM. Например мне надо задать уставку по напряжению отключения 12,6В. Как это организовать? Вариант setpoint=setpoint+0.1; не предлагать:))) Буду очень благодарен если кто подскажет:)
Сторінки 1