ИК дальномер в качестве датчика присутствия - как использовать прерывание?

Тема в разделе "Arduino & Shields", создана пользователем Gomez, 6 фев 2018.

  1. Gomez

    Gomez Гик

    Хочу использовать дальномер Sharp GP2Y0A02YK в качестве датчика присутствия (да, небольшой угол и небольшая дальность, я понимаю, это устраивает). То есть, если есть тело в зоне действия дальномера, тогда - логическая 1. Если в его поле зрения ничего - логический 0.
    Думаю, для этой цели глупо использовать analogRead() или библиотеку для вычисления расстояния.
    Хочется повесить это дело на прерывание, чтобы "куковало" только в нужные моменты.
    Слышал, что можно как-то использовать встроенный в Ардуино аналоговый компаратор, чтобы генерить прерывание, когда определенное значение (точнее, падение или возрастание?) будет достигнуто.
    Как я понял, в этом случае аналоговый датчик подключается к цифровому пину (на котором поддерживаются прерывания)

    Не может ли кто-то поделиться ссылкой или каким-то примером? Вроде ищу неплохо, но то ли я неправильно формулирую то, что слышал краем уха, то ли это нечасто применяется.
     
  2. Gomez

    Gomez Гик

    Нашел такой пример https://arduino.stackexchange.com/a/17967
    но мало понял (я про код)
    Не вижу, где интурист задает D6 и D7 в коде, (видимо, это не нужно, поскольку только эти ноги и могут работать, как компаратор?) (А на Меге где их искать?)
    И не понимаю, как задать "certain threshold".
     
  3. Gomez

    Gomez Гик

    Так я же и спрашиваю, как использовать встроенный. :rolleyes:
    Тоже была мысль сделать внешний компаратор и тогда уж просто подключаться к любому цифровому пину с прерыванием.
    У меня есть такие модули
    https://ru.aliexpress.com/item/High...n-Module-For-Arduino-AVR-PIC/32530266337.html
    и такие
    https://ru.aliexpress.com/item/Reed...tch-MagSwitch-For-Arduino-WC/32671594774.html
    И там, и там что-то очень похожее на компараторы, поскольку везде стоят LM393.
    (хотя хотелось бы использовать встроенный)
     
    Последнее редактирование: 6 фев 2018
  4. Airbus

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

    А чем analog read не угодил?Там же програмно можно настроить уровень срабатывания.А к компаратору внутреннему или внешнему надо лепить обвязку для того же самого.
     
  5. Gomez

    Gomez Гик

    Да может, это у меня глюк и правда ничего такого не надо.
    В loop у меня пара таймеров, и только по срабатыванию их разное исполняется.
    Наверное, ничего страшного не будет, если добавить третий, который с интервалом, скажем, в полсекунды будет делать analog read без всяких прерываний и проч.
     
  6. Airbus

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

    Так пусть в loop и читает без всяких таймеров по кругу по умолчанию.Или готовое решение
     
    Последнее редактирование: 6 фев 2018
  7. mcureenab

    mcureenab Гуру

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

    Тут есть примеры программ с использованием компаратора набортного

    http://forum.arduino.cc/index.php?topic=149840.0