初始化提交
This commit is contained in:
106
arduino-cli/libraries/RL_TCA9548A/RL_TCA9548A.cpp
Normal file
106
arduino-cli/libraries/RL_TCA9548A/RL_TCA9548A.cpp
Normal file
@@ -0,0 +1,106 @@
|
||||
#include <RL_TCA9548A.h>
|
||||
|
||||
|
||||
TCA9548A_I2CMultiplexer::TCA9548A_I2CMultiplexer(uint8_t addr){
|
||||
Wire.begin();
|
||||
I2CMultiplexer = addr;
|
||||
}
|
||||
|
||||
uint8_t *TCA9548A_I2CMultiplexer::scan(uint8_t port){
|
||||
static uint8_t dev[127] = {0};
|
||||
// uint8_t dev;
|
||||
memset(dev,0,sizeof(dev));
|
||||
uint8_t i = 0;
|
||||
selectPort(port);
|
||||
|
||||
byte error, address;
|
||||
int nDevices;
|
||||
nDevices = 0;
|
||||
for(address = 1; address < 127; address++ ) {
|
||||
if (address == I2CMultiplexer){ continue;}
|
||||
Wire.beginTransmission(address);
|
||||
error = Wire.endTransmission();
|
||||
if (error == 0){
|
||||
dev[i] = address;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return dev;
|
||||
}
|
||||
|
||||
void TCA9548A_I2CMultiplexer::selectPort(uint8_t port){
|
||||
if (port > 7) return;
|
||||
Wire.beginTransmission(I2CMultiplexer);
|
||||
Wire.write(1 << port);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
uint8_t TCA9548A_I2CMultiplexer::write(uint8_t port,uint8_t addr, uint8_t reg,uint8_t* buf, uint8_t len){
|
||||
selectPort(port);
|
||||
|
||||
Wire.beginTransmission(addr); // transmit to device #8
|
||||
Wire.write(reg); // sends one byte
|
||||
uint8_t i = 0;
|
||||
for(i = 0; i < len; i++){
|
||||
Wire.write(*buf);
|
||||
buf++;
|
||||
}
|
||||
Wire.endTransmission(); // stop transmitting
|
||||
}
|
||||
|
||||
|
||||
uint8_t TCA9548A_I2CMultiplexer::read(uint8_t port,uint8_t addr,uint8_t reg,uint8_t* data, uint8_t len){
|
||||
selectPort(port);
|
||||
int i = 0;
|
||||
Wire.beginTransmission(addr); //Start transmission to device
|
||||
Wire.write(reg); //Sends register address to read rom
|
||||
Wire.endTransmission(); //End transmission
|
||||
|
||||
Wire.requestFrom(addr, len);//Send data n-bytes read
|
||||
while (Wire.available()) // slave may send less than requested
|
||||
{
|
||||
data[i++] = Wire.read(); // print the character
|
||||
}
|
||||
// Serial.println(result[0]);
|
||||
return i;
|
||||
}
|
||||
|
||||
//Enables a specific port number
|
||||
boolean enableMuxPort(uint8_t portNumber)
|
||||
{
|
||||
if(portNumber > 7) portNumber = 7;
|
||||
|
||||
//Read the current mux settings
|
||||
Wire.requestFrom(addr, 1);
|
||||
if(!Wire.available()) return(false); //Error
|
||||
uint8_t settings = Wire.read();
|
||||
|
||||
//Set the wanted bit to enable the port
|
||||
settings |= (1 << portNumber);
|
||||
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write(settings);
|
||||
Wire.endTransmission();
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
//Disables a specific port number
|
||||
boolean disableMuxPort(uint8_t portNumber)
|
||||
{
|
||||
if(portNumber > 7) portNumber = 7;
|
||||
|
||||
//Read the current mux settings
|
||||
Wire.requestFrom(addr, 1);
|
||||
if(!Wire.available()) return(false); //Error
|
||||
uint8_t settings = Wire.read();
|
||||
|
||||
//Clear the wanted bit to disable the port
|
||||
settings &= ~(1 << portNumber);
|
||||
|
||||
Wire.beginTransmission(addr);
|
||||
Wire.write(settings);
|
||||
Wire.endTransmission();
|
||||
|
||||
return(true);
|
||||
}
|
||||
23
arduino-cli/libraries/RL_TCA9548A/RL_TCA9548A.h
Normal file
23
arduino-cli/libraries/RL_TCA9548A/RL_TCA9548A.h
Normal file
@@ -0,0 +1,23 @@
|
||||
#ifndef _RL_TCA9548A_H_
|
||||
#define _RL_TCA9548A_H_
|
||||
#include "Wire.h"
|
||||
#include <Arduino.h>
|
||||
//extern "C" {
|
||||
//#include "utility/twi.h" // from Wire library, so we can do bus scanning
|
||||
//}
|
||||
class TCA9548A_I2CMultiplexer
|
||||
{
|
||||
public:
|
||||
TCA9548A_I2CMultiplexer(uint8_t addr);
|
||||
uint8_t *scan(uint8_t port);
|
||||
void selectPort(uint8_t port);
|
||||
uint8_t read(uint8_t port,uint8_t addr,uint8_t reg,uint8_t* data, uint8_t len);
|
||||
uint8_t write(uint8_t port,uint8_t addr, uint8_t reg,uint8_t* buf, uint8_t len);
|
||||
|
||||
private:
|
||||
uint8_t I2CMultiplexer;
|
||||
};
|
||||
|
||||
boolean disableMuxPort(uint8_t portNumber);
|
||||
boolean enableMuxPort(uint8_t portNumber);
|
||||
#endif
|
||||
Reference in New Issue
Block a user