GY-63_MS5611/libraries/PIR/README.md
rob tillaart 8a2f0e7b16 0.1.2 PIR
2022-12-16 17:17:36 +01:00

80 lines
2.7 KiB
Markdown

[![Arduino CI](https://github.com/RobTillaart/PIR/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
[![Arduino-lint](https://github.com/RobTillaart/PIR/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/PIR/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/PIR/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/PIR/actions/workflows/jsoncheck.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/PIR/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/PIR.svg?maxAge=3600)](https://github.com/RobTillaart/PIR/releases)
# PIR
PIR library for Arduino. Supports up to 8 PIR sensors.
## Description
The PIR library implements a class to monitor 1 or more PIR sensors.
The library supports up to 8 PIR sensors per object, which typically are added in **setup()**.
It is possible to add a sensor (pin) multiple times.
The library accepts duplicates.
The library has two **read()** functions, one to read a specific sensor, and one to read all of them.
The latter will return a mask indicating HIGH and LOW.
The first added PIR will have the LSB.
Instead of PIR sensors one can add other DigitalOut sensors or even switches.
## Interface
#### Base
- **PIR()** constructor. Allocated room for 8 PIRs.
- **uint8_t add(uint8_t pin)** adds a PIR pin to the set of pins.
Returns the index or PIR_ARRAY_FULL (0xFE)
- **uint8_t count** returns number of PIR sensors added.
#### Read
- **uint8_t read()** read all PIR sensors in the set.
Returns a bit mask of HIGH / LOW values.
Not used slots will return 0.
- **uint8_t read(uint8_t index)** read a specific PIR sensor.
Faster than read() above.
- **uint8_t lastValue()** returns last values read (bit mask) with read().
- **uint8_t changed()** returns bit mask of pins that changed since last read().
This can improve processing in some cases.
## Future
#### Must
- update documentation
#### Should
- add examples
- interrupts?
#### Could
- investigate PIR16 PIR32 class that can hold more
- think MEGA2560.
- or dynamic allocation? 0.2.0
- one lastRead for all?
- **uint8_t pin(uint8_t index)** to get back configuration
- **bool add(uint8_t array, length)** faster configuration. Return true if there was enough room.
- **clear()** to reset whole object?
#### Wont
- PIR class based upon a PCF8574?
- separate class
- timestamp per PIR
- lastRead, lastTriggered?
- taking "a lot of RAM" for every pin
- add statistics?
- # calls # high% # low%
- duration
- investigate noise (what noise)
- **remove(pin)**
- difficult, more admin, expectations...