millis() и Bounce = как взаимосвязаны

DEN35
Offline
Зарегистрирован: 10.12.2017

Такая ситуация.

Использую  Bounce  для подавления дребезга .... все работает.

Добавил в часть кода (который не связан с той частью где давим дребезг) millis() и установил время ожидания 60000 мс, после этого получил некий ступор после загрузки ардуины, который выражается в том, что та часть когда где даив дребезг и используем Bounce не хочет корректно работать (впринципе работать) пока не истечет 60 сек с загрузки ардуины ... после этого все работает нормально!!! в чем прикол и как победить, чтобы та часть кода где давим бребезг кнопки работала сразу и не зависила от millis()?

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Как миллиc использовали? С вайлом поди?

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

ХЗ куда вы что вставили, соответственно ХЗ почему не работает. Как то так. Мы конечно понимаем, что все супер скетчи очень секретны, только с картами таро и шарами хрустальными нынче туго.(((((

DEN35
Offline
Зарегистрирован: 10.12.2017

Напишите без сленга))) не особо в нем пока рублю... что твы имели ввиду под свайлом?

как-то так примерно с millis()

unsigned long time1;

time1 = millis();

 

if(millis()-time1 > 60000)
  {

 код, который должен выполняться повторно не ранее чем через 60 сек, после его пред. выполнения 

time1 = millis();

}

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

#include <Bounce2.h>

bouncer .attach(2);

bouncer .interval(20);

void loop(){if (bouncer.update()){ if (bouncer.read()==LOW){ код }}}
DEN35
Offline
Зарегистрирован: 10.12.2017

общая структура такая

if (millis()-time1 > 60000)
{
  // выполнять действие A

 

 

 time1 = millis();

}
else if (if (bouncer1.update()){ if (bouncer1.read()==LOW)) // тупит тут пока не пройдет 60 сек
{
  // выполнять действие B
}
else if (if (bouncer2.update()){ if (bouncer2.read()==LOW)) // // тупит тут пока не пройдет 60 сек
{
  // выполнять действие С
else
{
  // выполнять действие  D
}

 

arduinec
Offline
Зарегистрирован: 01.09.2015

DEN35 пишет:

Напишите без сленга

Те строчки, которые приведены, абсолютно не показывают как в скетче они используются.

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

arduinec пишет:

Те строчки, которые приведены, абсолютно не показывают как в скетче они используются.

Так я и говорю, СЕКРЕТНО. Вдруг враги похитят и китайцам задешево продадут.

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

1. сделай из своего проекта небольшой код, в котором повторяется явление.

2. Опубликуй его  тут, комментируя КАЖДУЮ строку - что она, по твоему мнению, делает?. Чаще всего, на этом этапе новичек уже найдет ошибку сам.

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

=============================

Для мотивации - ОТВЕТ на вопрос заголовка темы: НИКАК не связаны millis() и  bounce.

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

Может структура ТАКАЯ

bouncer1.update()
bouncer2.update()

if (millis()-time1 > 60000)
{
  // выполнять действие A
  time1 = millis();
}

else if(bouncer1.read()==LOW) // тупит тут пока не пройдет 60 сек
{
  // выполнять действие B
}
else if(bouncer2.read()==LOW) // // тупит тут пока не пройдет 60 сек
{
  // выполнять действие С
else
{
  // выполнять действие  D
}
 

 

DEN35
Offline
Зарегистрирован: 10.12.2017

спасибо  - попробую отпишусь (но вроде я так тоже пробовал)

структура такая рабочая будет?

01 bouncer1.update()
02 bouncer2.update()
03  
04 if (Если стоп == LOW)  // стоп в приоритете
05 {
06   // выполнять действие A
07   
08 }
09  
10 else if(bouncer1.read()==LOW) // левый поворот почему то тупит тут пока не пройдет 60 сек с момента запуска или с момента последнего срабатывания else
11 {
12   // выполнять действие B
13 }
14 else if(bouncer2.read()==LOW) // правый поворот почему то тупит тут пока не пройдет 60 сек
15 {
16   // выполнять действие С
17 else
18 {if (millis()-time1 > 60000)
19 // выполнять действие  D (Если ускорени превышает опред. предел - воспроизводиться виз. эффект. но нужно чтобы он не выполнялся постоянно (возможен такой поток даных управления), а не раньше чем через 60 сек. от последнего его включения)
20   time1 = millis();}}

 

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

Если скобки правильно раставите то проблем я не вижу. С библиотекой я не работал, но она использует тотже милис, так что проблема только в коде!

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

Инициализируйте time1 при запуске. Где и как она обявлена?

DEN35
Offline
Зарегистрирован: 10.12.2017

Есть в начале 

unsigned long time1;

потом в загрузке 

time1 = millis(); чтобы начать первый отсчет после загрузки

DEN35
Offline
Зарегистрирован: 10.12.2017

vosara пишет:

Если скобки правильно раставите то проблем я не вижу. С библиотекой я не работал, но она использует тотже милис, так что проблема только в коде!

 

не работает

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Беда.

vvadim
Offline
Зарегистрирован: 23.05.2012

DEN35 пишет:

Такая ситуация.

Использую  Bounce  для подавления дребезга .... все работает.

Добавил в часть кода (который не связан с той частью где давим дребезг) millis() и установил время ожидания 60000 мс, после этого получил некий ступор после загрузки ардуины, который выражается в том, что та часть когда где даив дребезг и используем Bounce не хочет корректно работать (впринципе работать) пока не истечет 60 сек с загрузки ардуины ... после этого все работает нормально!!! в чем прикол и как победить, чтобы та часть кода где давим бребезг кнопки работала сразу и не зависила от millis()?

 

может покажите отформатированый полный код

DEN35
Offline
Зарегистрирован: 10.12.2017

решилось 

так не конфликтует

 
     если интервал дребезга выставлять не более 10 мс
 
bouncerL.attach(buttonPinL);
  bouncerL.interval(10);
 
 

 

DEN35
Offline
Зарегистрирован: 10.12.2017

как это взаимсвязано с  millis(); - хз

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

У вас что в #4, что в #9 проблемы со скобками!!!

DEN35
Offline
Зарегистрирован: 10.12.2017

?

arduino328
Offline
Зарегистрирован: 01.09.2016

vvadim пишет:

DEN35 пишет:

в чем прикол и как победить

может покажите отформатированый полный код

Судя по нику, он его только в 35 день показывает :)

DEN35
Offline
Зарегистрирован: 10.12.2017

arduino328 пишет:

vvadim пишет:

DEN35 пишет:

в чем прикол и как победить

может покажите отформатированый полный код

Судя по нику, он его только в 35 день показывает :)

 как раз ваших дельных советов очень не хватает...

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

DEN35
Offline
Зарегистрирован: 10.12.2017

Аппартно, через тригге шмитта?

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Да. 35 фэней (11/3 рубля) - и никакой возни.

DEN35
Offline
Зарегистрирован: 10.12.2017

согласен, если отступать будет некуда, то так и поступлю .... но хотелось в программном варианте по тренироваться!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Voodoo Doll пишет:

Вы уверены, что делитель из 4.7к и 10к даст на выходе логический ноль?