2023-01-26 06:32:14 -05:00
|
|
|
|
|
|
|
[![Arduino CI](https://github.com/RobTillaart/HC4051/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
|
|
|
[![Arduino-lint](https://github.com/RobTillaart/HC4051/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/HC4051/actions/workflows/arduino-lint.yml)
|
|
|
|
[![JSON check](https://github.com/RobTillaart/HC4051/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/HC4051/actions/workflows/jsoncheck.yml)
|
2023-11-04 09:18:31 -04:00
|
|
|
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/HC4051.svg)](https://github.com/RobTillaart/HC4051/issues)
|
|
|
|
|
2023-01-26 06:32:14 -05:00
|
|
|
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/HC4051/blob/master/LICENSE)
|
|
|
|
[![GitHub release](https://img.shields.io/github/release/RobTillaart/HC4051.svg?maxAge=3600)](https://github.com/RobTillaart/HC4051/releases)
|
2023-11-04 09:18:31 -04:00
|
|
|
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/HC4051.svg)](https://registry.platformio.org/libraries/robtillaart/HC4051)
|
2023-01-26 06:32:14 -05:00
|
|
|
|
|
|
|
|
|
|
|
# HC4051
|
|
|
|
|
|
|
|
HC4051 is an Arduino library for a HC4051 1x8 channel multiplexer.
|
|
|
|
|
|
|
|
|
|
|
|
## Description
|
|
|
|
|
|
|
|
HC4051 is a library to control the CD74HC4051 8 channel
|
|
|
|
multiplexer / demultiplexer and compatible devices.
|
|
|
|
|
|
|
|
The HC4051 allows e.g one analog port read up to 8 different analog channels,
|
|
|
|
or one digital port to read the state of 8 buttons.
|
|
|
|
|
|
|
|
|
|
|
|
The channel selection is done with four select lines **A, B, C**
|
|
|
|
|
|
|
|
The device can be enabled/disabled by the enable line **INH**
|
|
|
|
|
|
|
|
|
|
|
|
#### Compatibles
|
|
|
|
|
|
|
|
to elaborate.
|
|
|
|
|
|
|
|
|
|
|
|
#### Related to
|
|
|
|
|
|
|
|
- https://github.com/RobTillaart/HC4051 (1x8 mux)
|
|
|
|
- https://github.com/RobTillaart/HC4052 (2x8 mux)
|
|
|
|
- https://github.com/RobTillaart/HC4053 (3x2 mux)
|
|
|
|
- https://github.com/RobTillaart/HC4067 (1x16 mux)
|
|
|
|
|
|
|
|
|
|
|
|
## Hardware connection
|
|
|
|
|
|
|
|
Typical connection is to connect the four **select pins** to four IO Pins of your board.
|
|
|
|
|
|
|
|
The optional **enablePin (INH)** must be connected to GND if not used.
|
|
|
|
This way the device is continuous enabled.
|
|
|
|
|
|
|
|
Example multiplexing analog in.
|
|
|
|
|
|
|
|
```
|
|
|
|
processor HC4051
|
|
|
|
+-------------+ +-------------+
|
|
|
|
| | | |
|
|
|
|
| A |------------->| S0 Y0 |
|
|
|
|
| B |------------->| S1 Y1 |
|
|
|
|
| C |------------->| S2 Y2 |
|
|
|
|
| | | Y3 |
|
|
|
|
| E |------------->| INH Y4 |
|
|
|
|
| | | Y5 |
|
|
|
|
| A0 |<-------------| Y Y6 |
|
|
|
|
| | | Y7 |
|
|
|
|
| GND |--------------| GND Y8 |
|
|
|
|
| | | VCC |
|
|
|
|
| | | |
|
|
|
|
+-------------+ +-------------+
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Interface
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
#include "HC4051.h"
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Core
|
|
|
|
|
|
|
|
- **HC4051(uint8_t A, uint8_t B, uint8_t C, uint8_t enablePin = 255)** constructor.
|
|
|
|
Set the three select pins and optional the enable pin.
|
|
|
|
If the enablePin == 255 it is considered not used.
|
|
|
|
- **void setChannel(uint8_t channel)** set the current channel.
|
|
|
|
Valid values 0..7, this value is not checked, only the lower 3 bits will be used.
|
|
|
|
- **uint8_t getChannel()** get current channel 0..7.
|
|
|
|
|
|
|
|
|
|
|
|
#### Enable
|
|
|
|
|
|
|
|
These functions work only if enablePin is set in the constructor.
|
|
|
|
|
|
|
|
- **void enable()** idem.
|
|
|
|
- **void disable()** idem.
|
|
|
|
- **bool isEnabled()** idem.
|
|
|
|
Also returns true if enablePin is not set.
|
|
|
|
|
|
|
|
|
|
|
|
## Future
|
|
|
|
|
|
|
|
- keep in sync with HC4067 et.al.
|
|
|
|
|
2023-11-04 09:18:31 -04:00
|
|
|
|
|
|
|
## Support
|
|
|
|
|
|
|
|
If you appreciate my libraries, you can support the development and maintenance.
|
|
|
|
Improve the quality of the libraries by providing issues and Pull Requests, or
|
|
|
|
donate through PayPal or GitHub sponsors.
|
|
|
|
|
|
|
|
Thank you,
|
|
|
|
|