17#include <initializer_list>
19#include "spaiotdebug.h"
21#include "buttoncontroller.h"
42 Multiplexer (
const std::initializer_list<int>& spins,
int inhPin) :
43 ButtonController(), m_spin (spins), m_inh (inhPin) {
45 SPAIOT_ASSERT ( (1 << spins.size()) >= W,
"The size of spins:%d does not allow you to select the number of channels:%d", spins.size(), W);
48 Multiplexer (
const String & name,
const std::initializer_list<int>& spins,
int inhPin) :
49 ButtonController (name), m_spin (spins), m_inh (inhPin) {
51 SPAIOT_ASSERT ( (1 << spins.size()) >= W,
"The size of spins:%d does not allow you to select the number of channels:%d", spins.size(), W);
59 ButtonController(), m_inh (-1) {
79 if ( (isOpened() ==
false) && (
isNull() ==
false)) {
80 SPAIOT_DBG (
"Multiplexer::begin(): opening");
82 pinMode (m_inh, OUTPUT);
83 digitalWrite (m_inh, HIGH);
85 for (
unsigned int i = 0; i < m_spin.size(); i++) {
87 pinMode (m_spin.at (i), OUTPUT);
88 digitalWrite (m_spin.at (i), LOW);
101 for (
unsigned int i = 0; i < m_spin.size(); i++) {
103 pinMode (m_spin.at (i), INPUT_PULLUP);
105 ButtonController::end();
117 if (isOpened() && (button >= 0) && (button <= W)) {
119 for (
unsigned int i = 0; i < m_spin.size(); i++) {
121 digitalWrite (m_spin.at (i), (button & (1 << i)) ? HIGH : LOW);
124 digitalWrite (m_inh, LOW);
137 digitalWrite (m_inh, HIGH);
149 return m_spin.size() == 0;
159 virtual bool operator== (
const ButtonController &other)
const {
161 if (ButtonController::operator== (other)) {
164 return ( (m_spin == o.m_spin) && (m_inh == o.m_inh));
177 return m_spin.at (key);
192 std::vector<int> m_spin;
Analog multiplexer template.
Definition: multiplexer.h:30
void setSelectPin(int key, int pin)
Definition: multiplexer.h:186
int size() const
Definition: multiplexer.h:67
virtual bool operator==(const ButtonController &other) const
Definition: multiplexer.h:159
Multiplexer()
Definition: multiplexer.h:58
Multiplexer(const std::initializer_list< int > &spins, int inhPin)
Definition: multiplexer.h:42
virtual void end()
Definition: multiplexer.h:99
virtual void begin()
Definition: multiplexer.h:77
virtual bool isNull() const
Definition: multiplexer.h:147
int selectPin(int key) const
Definition: multiplexer.h:175
virtual void deselect()
Definition: multiplexer.h:133
virtual int select(int button)
Definition: multiplexer.h:115
SpaIot name space.
Definition: bussettings.h:21