GY-63_MS5611/libraries/ADG726/ADG726.h
2023-10-16 16:06:37 +02:00

134 lines
2.4 KiB
C++

#pragma once
//
// FILE: ADG726.h
// AUTHOR: Rob Tillaart
// DATE: 2023-07-24
// VERSION: 0.1.1
// PURPOSE: Arduino library for ADG726 - 16 to 1 channel (2x) multiplexer
// URL: https://github.com/RobTillaart/ADG726
#include "Arduino.h"
#define ADG726_LIB_VERSION (F("0.1.1"))
#define ADG726_ALLOFF 0x80
class ADG726
{
public:
ADG726(uint8_t A, uint8_t B, uint8_t C, uint8_t D, uint8_t CSA, uint8_t CSB, uint8_t EN, uint8_t WR)
{
uint8_t arr[4] = { A, B, C, D };
ADG726(arr, CSA, CSB, EN, WR);
}
explicit ADG726(uint8_t address[4], uint8_t CSA, uint8_t CSB, uint8_t EN, uint8_t WR)
{
for (int i = 0; i < 4; i++)
{
_addr[i] = address[i];
pinMode(_addr[i], OUTPUT);
digitalWrite(_addr[i], LOW);
}
_CSA = CSA;
_CSB = CSB;
_EN = EN;
_WR = WR;
pinMode(_CSA, OUTPUT);
pinMode(_CSB, OUTPUT);
pinMode(_EN, OUTPUT);
pinMode(_WR, OUTPUT);
digitalWrite(_CSA, HIGH);
digitalWrite(_CSB, HIGH);
digitalWrite(_EN, HIGH);
digitalWrite(_WR, HIGH);
// default all off.
_channelA = ADG726_ALLOFF;
_channelB = ADG726_ALLOFF;
}
// set both channels
void setChannel(uint8_t channel)
{
_channelA = channel & 0x0F;
_channelB = _channelA;
write(_channelA, LOW, LOW, LOW);
}
void setChannelA(uint8_t channel)
{
_channelA = channel & 0x0F;
write(_channelA, LOW, HIGH, LOW);
}
void setChannelB(uint8_t channel)
{
_channelB = channel & 0x0F;
write(_channelB, HIGH, LOW, LOW);
}
// last set channel
uint8_t getChannelA()
{
return _channelA;
}
uint8_t getChannelB()
{
return _channelB;
}
uint8_t channelCount()
{
return 16;
}
void allOff()
{
_channelA = ADG726_ALLOFF;
_channelB = _channelA;
write(_channelA, LOW, LOW, HIGH);
}
private:
void write(uint8_t data, uint8_t csa, uint8_t csb, uint8_t en)
{
digitalWrite(_CSA, csa);
digitalWrite(_CSB, csb);
digitalWrite(_WR, LOW);
digitalWrite(_EN, en);
uint8_t mask = 0x01;
for (int i = 0; i < 4; i++)
{
digitalWrite(_addr[i], ((data & mask) > 0)); // LSB-first
mask <<= 1;
}
digitalWrite(_EN, HIGH);
digitalWrite(_WR, HIGH);
digitalWrite(_CSB, HIGH);
digitalWrite(_CSA, HIGH);
}
uint8_t _addr[4];
uint8_t _CSA;
uint8_t _CSB;
uint8_t _EN;
uint8_t _WR;
uint8_t _channelA;
uint8_t _channelB;
};
// -- END OF FILE --