999 вопросов по программированию

Тема в разделе "Флудилка", создана пользователем CYITEP_BAC9I, 9 авг 2018.

  1. Airbus

    Airbus Радиохулиган Модератор

    А чем if/else не if/else?Каждая проверка вызывает свою функцию и что то делает. Switch case больше для оценки того что пришло а Порт/USART.Или каждое нажатие вызывает своё прерывание тобишь функцию.Но так можно на "настоящем"Си в Ардуино это невозможно.
     
  2. parovoZZ

    parovoZZ Гуру

    Это кто? Я то подумал, что в твоём коде какой-то параллельный внализ ведётся (антидребезг меня не интересует, только состояние кнопок), а получается все так же последовательно. Не обижайся, ежели че))) Мне не понятен следующий посыл - для чего копировать регистр порта в другой регистр, если регистр порта - это такой же регистр, в который мы скопировали его значение?
     
  3. SergeiL

    SergeiL Оракул Модератор

    То есть, один раз проверяем через 50 мс, и если состояние такое-же то принимаем решение???
    Как-то не правильно это, а если в течении этих 50 мс или позже оно изменилось???

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

    Есть разница???
     
    Последнее редактирование: 10 авг 2018
  4. parovoZZ

    parovoZZ Гуру

    if/else даёт скорость выполнения, а case компактность, если я ничего не попуточки))) Если с кнопкой работать в прерывании, то привет функция антидребезга приведённая выше. Если кнопок больше двух, то для организации прерывания получится чуть больше кода.
     
  5. SergeiL

    SergeiL Оракул Модератор

    Я этот вариант использую и на "smart" выключателе 220В. Схема здесь.

    Анализируется каждый полупериод.

    Если, больше двух третьих полупериода не было напряжения - тогда состояние 0.
    Если было - состояние - единица.

    Если 4 раза подряд состояние 0 - выключатель - выключен.
    Если 4 раза подряд состояние 1 - выключатель - включен.

    Пока не сделал так - были, правда редко, но были, подщелкивания реле.

    Как добавил - все стало работать стабильно, без всяких аппаратных решений.
    Скорости ESP с запасом хватает, даже излишне...
     
  6. parovoZZ

    parovoZZ Гуру

    Принимаем решение с первого раза. Все. Кнопка либо успокоилась, либо вот-вот успокоится. Я не знаю человека, который способен удержать кнопку в течении 20 мс. Это значение ползёт к 100 мс.
     
  7. parovoZZ

    parovoZZ Гуру

    Да. В варианте с таймером мы вообще не отвлекаемся на дребезг. Антидребезг полностью аппаратный.
     
  8. SergeiL

    SergeiL Оракул Модератор

    Там может быть и не человек, а просто сухой контакт, счетчик, наводка, да что угодно ...
    Как Вам угодно, а я привык проверять состояние несколько раз! И буду проверять!
    ИБО, так учили, и военная приемка по другому не принимала!
     
  9. parovoZZ

    parovoZZ Гуру

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

    SergeiL Оракул Модератор

    Вот главный вопрос, Так надежнее???
    Если да - то лучше???
    Код не сильно увеличивается???
     
  11. parovoZZ

    parovoZZ Гуру

    Наши телеки были сделаны по всем, казалось бы, правилам схемотехники - все провода в экране, платы в куче экранов, но сцука соня, у которой экран только на блоке тюнера, показывала В РАЗЫ ЛУЧШЕ.
     
  12. SergeiL

    SergeiL Оракул Модератор

    Ок.
    Ради бога, можете даже не проверять через 50мс...
    Я уже писал:
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Кто мешает сделать антидребезг внутри прерывания?Маленький delay эдак на 100 мс спасет Отца русской демократии
     
  14. Airbus

    Airbus Радиохулиган Модератор

    Не всегда.Точнее никогда.Ибо законы физики никому не удалось нае@атьА дребезг контактов это данная нам реальность
     
  15. SergeiL

    SergeiL Оракул Модератор

    Так все же сделано, работает, без делей, паралельно по всем входам в прерывании, не тормозит ничего, ... КРАСИВО ЖЕ!!!
    НО не понимают же... ОБИДНО блин..
     
  16. ostrov

    ostrov Гуру

    Может не в тему, вчитываться лень, но я делаю антидребезг так: опрашиваю пин раз в 20мс (ну или реже) не важно прерыванием ли или в цикле, сохраняю цепочку состояний (в массиве или в байте битами, если места жалко) и когда последовательность получается 10 (или 01, смотря как подключено) - вот оно и есть. То есть цепочки из двух звеньев хватает почти всегда. Для перфекционистов можно сделать три звена и отслеживать последовательность 110 (001), тогда заодно и антипомеха будет. Можно опрашивать хоть по одному пину, весь порт разом, результат всегда правильный.
     
    Сусемьбек нравится это.
  17. parovoZZ

    parovoZZ Гуру

    Так ведь никто ж не запрещает вводить счётчик. Тем более в варианте, когда нам нужны длинные и короткие нажатия. А при удержании кнопки более положеннооо периода можно и оповестить юзера, что кнопочку пора бы и отжать. При опросе 50 раз в секунду и емкости счетчика в байт, эта величина может доходить до 2.5 секунд)))
     
  18. Airbus

    Airbus Радиохулиган Модератор

    Можно и с делей.Не так страшен Делей как его
     
  19. SergeiL

    SergeiL Оракул Модератор

    Все ухожу - БЕСПОЛЕЗНО!!!
     
    Airbus нравится это.
  20. parovoZZ

    parovoZZ Гуру

    Ну вот как ты будешь программно устранять наводку по цепи питания? Вот как?
    А что дребезг? Кнопка побренчит и через 5-10 мс успокоится.