18#include <initializer_list>
23#include "buttoncontroller.h"
40 Multiplexer (
const std::initializer_list<int>& spins,
int inhPin) :
41 ButtonController(), m_spin (spins), m_inh (inhPin) {
43 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);
47 ButtonController(), m_inh (-1) {
62 virtual void begin() {
64 if ( (isOpened() ==
false) && (
isNull() ==
false)) {
65 SPAIOT_DBG (
"Multiplexer::begin(): opening");
67 pinMode (m_inh, OUTPUT);
68 digitalWrite (m_inh, HIGH);
70 for (
int i = 0; i < m_spin.size(); i++) {
72 pinMode (m_spin.at (i), OUTPUT);
73 digitalWrite (m_spin.at (i), LOW);
86 if (isOpened() && (button >= 0) && (button <= W)) {
88 for (
int i = 0; i < m_spin.size(); i++) {
90 digitalWrite (m_spin.at (i), (button & (1 << i)) ? HIGH : LOW);
93 digitalWrite (m_inh, LOW);
102 virtual void deselect () {
106 digitalWrite (m_inh, HIGH);
117 return m_spin.size() == 0;
125 virtual bool operator== (
const ButtonController &other)
const {
127 if (ButtonController::operator== (other)) {
130 return ( (m_spin == o.m_spin) && (m_inh == o.m_inh));
142 return m_spin.at (key);
156 std::vector<int> m_spin;
Analog multiplexer template.
Definition: multiplexer.h:32
void setSelectPin(int key, int pin)
Definition: multiplexer.h:150
int size() const
Definition: multiplexer.h:54
virtual bool operator==(const ButtonController &other) const
Definition: multiplexer.h:125
Multiplexer(const std::initializer_list< int > &spins, int inhPin)
Definition: multiplexer.h:40
virtual bool isNull() const
Definition: multiplexer.h:115
int selectPin(int key) const
Definition: multiplexer.h:140
virtual int select(int button)
Definition: multiplexer.h:84
SpaIot name space.
Definition: bussettings.h:21