44 lines
1.2 KiB
C
44 lines
1.2 KiB
C
|
|
#ifndef MuxService_h
|
||
|
|
#define MuxService_h
|
||
|
|
|
||
|
|
#include "SerialService.h"
|
||
|
|
#include <Wire.h>
|
||
|
|
|
||
|
|
class MuxService {
|
||
|
|
public:
|
||
|
|
static const uint8_t enderecoMux = 0x70; // Padrão do TCA9548A
|
||
|
|
static bool Iniciado;
|
||
|
|
static int canalAtivo;
|
||
|
|
|
||
|
|
static void IniciarMUX() {
|
||
|
|
PrintTela("[MUX] Iniciando TCA9548A...");
|
||
|
|
Wire.beginTransmission(enderecoMux);
|
||
|
|
Iniciado = (Wire.endTransmission() == 0);
|
||
|
|
if (Iniciado) {
|
||
|
|
canalAtivo = -1; // Nenhum canal ativo ainda
|
||
|
|
PrintTela("[MUX] TCA9548A Iniciado");
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
PrintTela("[MUX] TCA9548A nao Iniciado, endereco " + String(enderecoMux) + " nao encontrado no barramento");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
static void SelecionarCanal(uint8_t canal) {
|
||
|
|
if (!Iniciado) return;
|
||
|
|
if (canalAtivo == canal) return; // Já está no canal certo
|
||
|
|
|
||
|
|
Wire.beginTransmission(enderecoMux);
|
||
|
|
Wire.write(1 << canal);
|
||
|
|
Wire.endTransmission();
|
||
|
|
|
||
|
|
PrintTela("[MUX] Canal alterado de " + String(canalAtivo) + " para " + String(canal));
|
||
|
|
|
||
|
|
canalAtivo = canal;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
bool MuxService::Iniciado = false;
|
||
|
|
int MuxService::canalAtivo = -1;
|
||
|
|
|
||
|
|
#endif
|