С какой частотой правильно отслеживать нажатие кнопки?

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

ЕвгенийП пишет:

Duino A.R. пишет:
"Arduino. Сага о кнопках v.2.0" https://yadi.sk/d/nXvEorbUjf3oX посвящена главка "Песнь кнопки сладкоголосой". Там всё из жизни. :))

Ёкарный бабай! Писал человек, писал, вроде, всё разумно, а тут с 42-ой страницы, на тебе ... борьба с переполнением миллис! Да ещё и ссылка [14] на совершенно безграмотный код на эту же тему :-(

«Вот те раз! Нельзя же так!»

А так всё хорошо начиналось :-(

Миллисы вставлены в версию 2.0 под давлением общественности в ходе обсуждения. :)) Читайте исходную версию "Arduino. Сага о кнопках"  https://yadi.sk/i/VjfxWUTWjPQfW там про кнопки всё есть, а про миллисы ничего нет. :))

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

Duino A.R. пишет:
под давлением общественности
Завистников, имеющих целью испортить материал!

Гриша
Offline
Зарегистрирован: 27.04.2014

Green пишет:

Я несколько раз встречался с неисправностью герконов - просто залипают. Но это не ваш случай.)

часто встречающаяся проблема, и причин как правило две

1) залипание контактов от протекающего тока - как раз случай при неправильной реактивной нагрузке, подгорают заряжая/ разрежая конденсаторы, да и катушки индуктивности "подпаливают контакты" который потом пропадает...

2) самое печальное - намагничиваются и "примагничиваются" если ток "достаточный" греются и сплавляются. да и обращения требуют нежного...

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

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

Green
Offline
Зарегистрирован: 01.10.2015

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

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Гриша пишет:

часто встречающаяся проблема, и причин как правило две

1) залипание контактов от протекающего тока - как раз случай при неправильной реактивной нагрузке, подгорают заряжая/ разрежая конденсаторы, да и катушки индуктивности "подпаливают контакты" который потом пропадает...

Да. Сам на это неоднократно попадал, хотя никак не ожидал ввиду малости напряжений и емкостей. Один пример. Контроллерный модуль дискретных выходов на герконовых реле. Шкафным монтажем сделана мудрёная аппаратная логика "и-или". Несколько конденсаторов емкостью 22н (зачем они были - уже не помню). Напряжение питания =24 В. Контакт геркона, замыкавший предварительно заряженный конденсатор, подваривался. На заводских испытаниях приходилось обстукивать реле, а конденсаторы срочно выкусывать из готового устройства.

Гриша пишет:
2) самое печальное - намагничиваются и "примагничиваются" если ток "достаточный" греются и сплавляются. да и обращения требуют нежного...

Следя за параметрами контактов, люди обычно забывают о допустимых параметрах магнитного поля. Если даже однократно "наддать тока в катушку", геркон можно банально испортить. Классические электромагнитные реле в этом смысле гораздо выносливее.

Гриша пишет:
...хороший пример для рассмотрения, но механическая кнопка насколько более надежный прибор - ниже время переключения, больше усилие на пробой окислов, ниже время переходных процессов. не знаю зачем написал... но может кого заставит задуматься... если кому вообще интересно.

Мой опыт говорит о другом. Для сравнимых по параметрах коммутации слаботочных кнопках (а их множество видов) время переключения меньше у герконов, окисная пленка на контактах не образуется ввиду их герметичности, ресурс по количеству срабатываний больше. Если говорить о клавиатуре то в советских ЭКВМ (настольных калькуляторах) "Искра" клавиатура была комбинированная. Механическая часть: пластик + металлическая цилиндрическая пружина, подвижный постоянный магнит. Контактная группа - геркон. Эта клавиатура выдерживала бухгалтерии и учебные аудитории в ВУЗах. После разрушения самой машинки клавиши ещё работали и работали во всяких самоделках, выгодно отличаясь от их чисто механических более молодых аналогов.

SLKH
Offline
Зарегистрирован: 17.08.2015

Гриша пишет:

 

хороший пример для рассмотрения, но механическая кнопка насколько более надежный прибор 

при равном числе срабатываний? например, при 100+ тысяч в сутки? 

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Друзья, всем спасибо. В своем варианте пришел к интервалу опроса 200 мсек, как к самому комфортному. 

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

Sonologist пишет:

Друзья, всем спасибо. В своем варианте пришел к интервалу опроса 200 мсек, как к самому комфортному. 

О_О

Green
Offline
Зарегистрирован: 01.10.2015

Для эстонских парней вполне.)

Гриша
Offline
Зарегистрирован: 27.04.2014

SLKH пишет:

Гриша пишет:

хороший пример для рассмотрения, но механическая кнопка насколько более надежный прибор 

при равном числе срабатываний? например, при 100+ тысяч в сутки? 

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

Pyotr
Offline
Зарегистрирован: 12.03.2014

Задание из #42 (точнее #39) что-то никто не захотел решать. Всё нужно делать самому))

Схема для наглядности. Считаем, что конденсатор и резистор припаяны к выводам кнопки и составляют одно целое. Тестировал на макетке.
Без С1 и R3 схема не будет работать. R1 необязателен на короткой линии. Достаточно внутренней подтяжки. С1 пробовал от 80 нФ до 500 нФ.

#define PIN_SWITCH 2

word currMillis, prevMillis, intervalMs = 40;
byte counterCycle, prevStateKey=1, currStateKey;

void setup() {
  pinMode(PIN_SWITCH, OUTPUT);
  Serial.begin(115200);  
}
void loop() {
  currMillis = (word)millis();
  if (currMillis - prevMillis >= intervalMs) {
    prevMillis += intervalMs;
    if ((counterCycle & 1) == 0) { //проверка цепи концевика на обрыв
      pinMode(PIN_SWITCH, INPUT_PULLUP);
      counterCycle++;
      byte error = digitalRead(PIN_SWITCH);//1-нет контакта, обрыв линии
      if (error) {
        digitalWrite(PIN_SWITCH, LOW);//откл.подтяжку
        pinMode(PIN_SWITCH, OUTPUT);
        counterCycle++;
        Serial.println("NOT circuit");
      }
    }
     //чтение состояния концевика через 20 мс. Обрыва линии нет.
    else {
      byte currStateCircuit = 0;
      currStateCircuit = digitalRead(PIN_SWITCH);
      if (currStateCircuit) { // 1 -кнопка отпущена, кондер зарядился
        if (prevStateKey == 0) { //только что оппущена
          prevStateKey = currStateCircuit;
          Serial.println("button was released");
        }
      } else { // 0 - КЗ в линии или нажата кнопка
        pinMode(PIN_SWITCH, OUTPUT);//выход в 1
        delay(2);//если КЗ нет, то кондер зарядится через 100 Ом       
        currStateCircuit = digitalRead(PIN_SWITCH);//
        if (currStateCircuit == 0) { //всеж КЗ в линии
          Serial.println("short circuit");
        } else {   //кнопка нажата, конденсатор зарядился          
          currStateKey = 0;
          if (prevStateKey){ //была отпущена
            prevStateKey = currStateKey;
            Serial.println("button was pressed");
          }
        }
      }
      counterCycle++;
      digitalWrite(PIN_SWITCH, LOW);//откл.подтяжку
      pinMode(PIN_SWITCH, OUTPUT);
    }   
  }
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

Похоже на транзистор тестер в момент измерения что же там подключено. 

b707
Offline
Зарегистрирован: 26.05.2017

Sonologist пишет:

Друзья, всем спасибо. В своем варианте пришел к интервалу опроса 200 мсек, как к самому комфортному. 

вот так, спрашивал спрашивал, все в среднем советовали 10-20, ну максимум 50 - а он выбрал 200 :)

чего, спрашивается. спрашивал тогда?

 

Pyotr
Offline
Зарегистрирован: 12.03.2014

Парни, а я ведь лоханулся с кодом... Сегодня после обеда прилег на диван и чето мне эта схема в голову пришла. Прокрутил мысленно код - так ведь проверка на КЗ не должна работать!! А какже я вчера сам тестировал и все работало??
Блин... так я пин коротил на землю до резистора в 100 Ом !! Пин мои издевательства выдержал!!
Так что для проверки линии на КЗ скетч нужно подправить.

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

Pyotr пишет:
Схема для наглядности. Считаем, что конденсатор и резистор припаяны к выводам кнопки и составляют одно целое. Тестировал на макетке.

зачем конденсатор рядом с кнопкой?

Pyotr, понимаешь, это уже какая-то хрень ради хрени.

Все эти подтяжки конденсаторы и т.д. выбираются с учетом предполагаемой помеховой обстановки, и конденсаторы ВСЕГДА ставятся на приемном конце  линии, т.к. линия это антенна.

Так же и вопрос буферов. нужны - ненужны, может где-то на огороде, дома или в пределах девайса и не нужны, а если неподалеку разряжаются конденсаторы размером с дом, так кроме оптоволокна ничего не спасет, ни буфера, ни кабеля с двойным экранированием.