GY-63_MS5611/libraries/ADG731/ADG731.h

89 lines
1.5 KiB
C
Raw Normal View History

2023-07-24 14:33:28 -04:00
#pragma once
//
// FILE: ADG731.h
// AUTHOR: Rob Tillaart
// DATE: 2023-07-24
2024-03-21 15:04:20 -04:00
// VERSION: 0.1.2
2023-07-24 14:33:28 -04:00
// PURPOSE: Arduino library for ADG731 - 32 to 1 channel multiplexer
// URL: https://github.com/RobTillaart/ADG731
#include "Arduino.h"
2024-03-21 15:04:20 -04:00
#define ADG731_LIB_VERSION (F("0.1.2"))
2023-07-24 14:33:28 -04:00
#define ADG731_ALLOFF 0x80
class ADG731
{
public:
explicit ADG731(uint8_t clockPin, uint8_t dataPin, uint8_t syncPin)
{
_clockPin = clockPin;
_dataPin = dataPin;
_syncPin = syncPin;
pinMode(_clockPin, OUTPUT);
pinMode(_dataPin, OUTPUT);
pinMode(_syncPin, OUTPUT);
digitalWrite(_clockPin, HIGH);
digitalWrite(_dataPin, HIGH);
digitalWrite(_syncPin, HIGH);
// default all off.
_channel = ADG731_ALLOFF;
}
void setChannel(uint8_t channel)
{
2023-10-16 10:13:58 -04:00
_channel = channel & 0x1F;
2023-07-24 14:33:28 -04:00
write(_channel);
}
uint8_t getChannel()
{
return _channel;
}
uint8_t channelCount()
{
return 32;
}
void allOff()
{
_channel = ADG731_ALLOFF;
write(_channel);
}
private:
void write(uint8_t data)
{
digitalWrite(_syncPin, LOW);
for (int i = 0; i < 8; i++)
{
// CLOCK max 30 MHz.
digitalWrite(_clockPin, HIGH);
digitalWrite(_dataPin, (data & 0x80) > 0);
data <<= 1;
digitalWrite(_clockPin, LOW);
}
digitalWrite(_syncPin, HIGH);
}
uint8_t _clockPin;
uint8_t _dataPin;
uint8_t _syncPin;
uint8_t _channel;
};
// -- END OF FILE --