=============
Input Devices
=============

.. currentmodule:: gpiozero

These input device component interfaces have been provided for simple use of
everyday components. Components must be wired up correctly before use in code.

.. note::

    All GPIO pin numbers use Broadcom (BCM) numbering. See the :doc:`recipes`
    page for more information.


Button
======

.. autoclass:: Button(pin, pull_up=True, bounce_time=None)
    :members: wait_for_press, wait_for_release, pin, is_pressed, is_held, hold_time, held_time, hold_repeat, pull_up, when_pressed, when_released, when_held


Line Sensor (TRCT5000)
======================

.. autoclass:: LineSensor(pin)
    :members: wait_for_line, wait_for_no_line, pin, line_detected, when_line, when_no_line


Motion Sensor (D-SUN PIR)
=========================

.. autoclass:: MotionSensor(pin, queue_len=1, sample_rate=10, threshold=0.5, partial=False)
    :members: wait_for_motion, wait_for_no_motion, pin, motion_detected, when_motion, when_no_motion


Light Sensor (LDR)
==================

.. autoclass:: LightSensor(pin, queue_len=5, charge_time_limit=0.01, threshold=0.1, partial=False)
    :members: wait_for_light, wait_for_dark, pin, light_detected, when_light, when_dark


Distance Sensor (HC-SR04)
=========================

.. autoclass:: DistanceSensor(echo, trigger, queue_len=30, max_distance=1, threshold_distance=0.3, partial=False)
    :members: wait_for_in_range, wait_for_out_of_range, trigger, echo, when_in_range, when_out_of_range, max_distance, distance, threshold_distance

Base Classes
============

The classes in the sections above are derived from a series of base classes,
some of which are effectively abstract. The classes form the (partial)
hierarchy displayed in the graph below:

.. image:: images/input_device_hierarchy.*

The following sections document these base classes for advanced users that wish
to construct classes for their own devices.

DigitalInputDevice
==================

.. autoclass:: DigitalInputDevice(pin, pull_up=False, bounce_time=None)
    :members:

SmoothedInputDevice
===================

.. autoclass:: SmoothedInputDevice
    :members:

InputDevice
===========

.. autoclass:: InputDevice(pin, pull_up=False)
    :members:

GPIODevice
==========

.. autoclass:: GPIODevice(pin)
    :members:

